パーソナルブログメモリ

a = [1, 1]
for _ in "*" * 999: a += [sum(a[-2:])]
print(a)

パーサーを作って、上昇電卓を作ってみる

2021-12-04 | Python

パーサーとか構文解析を調べてwikiに

 

『簡単なサンプルによくあるいわゆる「電卓プログラム」などの場合を例として説明する。』

 

とそこに "12*(3+4)^2" というサンプルがあったのでこれを解くことのできる電卓を作って

みました。増える系の演算子しかないので上昇電卓という名前にします。

 

作ったものはこちら。

https://colab.research.google.com/drive/1NZ3OOuB_MBvauZlqIt0QfRaX7iaNFmzF?usp=sharing

 

パーサーと(演算処理とカッコ処理)のサブルーチン

parser 数値とそれ以外を分割してリストに入れています。

 acalc 演算子の左右が数値の時計算した値に変換したリストを返します。

kakko 数値の前後が()でつつまれている時に()を取ったリストを返します。

 

 

演算のメイン処理とテスト

51行目をテストしている時に、1+2を先に演算していたので41行目を一段下げました。

まだレアケースでおかしくなりそうです。

 

38行目 b = len(a)

42行目 b == len(a) としておけばcopy使わなくてすみました。

あっ! エラーケースのテスト忘れました。

 

ということで2枚め差し替えです。+5でエラーというのは少し物悲しいですが仕様になります。

 


最新の画像もっと見る

コメントを投稿

ブログ作成者から承認されるまでコメントは反映されません。