Skip to content.

kagome.lab.tkikuchi.net

Sections
Personal tools
Views

演習3

Document Actions
木構造その他

いつものように

  • ~/da/ex3 ディレクトリを作成してその下で演習をおこなう

逆ポーランド記法による電卓

  • rpn.py を実行してみよう。
  • 100 100 + 5 / 20 2 / +

標準入力の利用

  • 次のように計算式を1行ずつ読み取って、その計算結果を表示するようにしてみる。
  • rpn2.py
  • 上のプログラム用のテストデータ:test.rpn
  • 使用法:
  • $ python rpn2.py < test.rpn
    

パーザ・ジェネレータで作る電卓プログラム

  • パーザ・ジェネレータ (yacc, bison, ... ) の練習に、電卓プログラムがよく取り上げられる
  • が、電卓ごときに yacc を使うのは面倒
  • なので、Python で書かれたパーザ・ジェネレータを探してきました。
  • Toy Parser Generator

TPG の使い方

  • Python の標準ライブラリには入っていないので、もし管理者がインストールして くれてなければ、自分でインストールしてください。
  • まずは 例題 ... やってみる
  • 解説 ... 読む

calc.py について

  • class Calc(tpg.Parser) ... パーザクラスの定義
  • r""" ... 実は docstring に書いてある(普通はコメント/ヘルプに使用)
  • 文法の書き方
    • 正規表現形式に近い構造
    • E -> T (+ T)* ... * は0回以上の繰り返し
    • E/e ... e は変数
    • $ e += t ... 動作を与える

と、理解した上で

  • calc2.py
  • 文法を簡単に
    • 実数/整数 -> 実数のみ
    • 単項演算子の - を省略
    • べき乗 ** を省略
  • 直ぐに計算するのでなく、リストで木を作る

問題

  • q3-1.py ... rpn2.py を参考に、標準入力から(RPNでない普通の)計算式を入力してその計算結果を表示するプログラムを作成しなさい。(例えば以下のようなコマンドで計算ができる)計算式(test2.calc)

    $ python q3-1.py < test2.calc
    

  • q3-2.py ... 前回の講義で習った「後順走査」を使って、標準入力から入れた計算式を 逆ポーランド記法に して出力するプログラムを作成しなさい。(例えば以下のようなコマンドで計算ができる)

    $ python q3-2.py < test2.calc > test2.rpn
    $ python rpn2.py < test2.rpn
    

Created by tkikuchi
Last modified 2006-06-20 10:39
 

Powered by Plone

This site conforms to the following standards: