Sub expression() 命令文

再帰下降構文解析による
計算式の演算
επιστημη さん 提供の
VB.NETプログラムを丸裸にする!?
アクア@わんくま同盟
計算式の構文図
計算式を以下のような仕様である。と考えて構文解析する。
式
項
加減演算子
項
因子
乗除演算子
因子
変数又は定数
()内の式
×
乗除演算子
+
加減演算子
÷
-
構文図の解説①
計算式の例: 式 = a + b * (c - d) / ( e + f )
①
式は1つ以上の項と加減演算子により構成されている。
式
項
加減演算子
+
加減演算子
-
上記にある計算式の例を①に照らし合わせて分析すると
式=項+項
となる
構文図の解説②
計算式の例: 式 = a + b * (c - d) / ( e + f )
②
項は1つ以上の因子と乗除演算子により構成されている。
項
因子
乗除演算子
×
乗除演算子
÷
上記にある計算式の例を②に照らし合わせて分析すると
式=項+項は
式 = 因子 + 因子 * 因子 / 因子
となる
構文図の解説③
計算式の例: 式 = a + b * (c - d) / ( e + f )
③
因子は変数または定数と
因子
()←括弧で囲まれた別の式で構成されている。
変数又は定数
()内の式
上記にある計算式の例を③に照らし合わせて分析すると
式 = 因子 + 因子 * 因子 / 因子
は
式= a + b *(別の式)/ (別の式)
となる。
別の式は式として構文図の解説①に戻り、再度分析し、評価を繰り返す。
プログラミングコードの解説
επιστημη さん のプログラムに使われている数式処理の命令文
Sub expression() 命令文
式を構文解説①にある式の処理に当てはめ、項と加減演算子の組み合わせ
にする。
Sub expression() 命令文 により分類された項の処理は、以下にある
Sub term()命令文にて行う。
Sub term() 命令文
式を構文解説②にある項の処理に当てはめ、因子と乗除演算子の組み合わ
せにする。
Sub term() 命令文 により分類された因子の処理は、以下にある
Sub factor()命令文の処理にて行う。
Sub factor() 命令文
式を構文解説③にある因子の処理に当てはめ、変数又は定数と ()←カッコ でく
くられた式の組み合わせにする。
Sub factor() 命令文 により分類された項の処理は、上記の
Sub expression() 命令文 にて行う。
プログラミングコードの解説
επιστημη さん の大まかなプログラムフロー
Sub Main()
dicに変数となる文字と数値を代入
計算式を指定したのち
Sub expressionを呼び出す。
Sub expression()
Sub term() 命令文を呼び出す。
Sub term()
その他の命令文
• スタックをダンプして出
力する
• 文字列の空白を文字単位
で精査する
といった処理を実行
Sub factor() 命令文を呼び出す。
Sub factor()
()で括られた式があれば、
Sub expression () 命令文を呼び出す。
まとめ
決してスゲー事はしていない。でも押さえるトコは抑えとけ!
• 掲示板にある逆ポーランド記法というキーワードに惑わされるな!
実は再帰下降構文解析が真に押さえるべきキーワード。
Wikipedia :『構文解析』『再帰下降構文解析』
• ジェネリック等を使ってるからVB.NETの文法はキッチリ押さえる。
# 自分は未だ使いこなせないけどね♪
•
基本となるアルゴリズムは数学でいう公式みたいなもの?
中級者へのステップとして勉強して損はしない!!
• C++の第一人者がわざわざVB.NETでプログラミングコードを示して
くれるその価値を見逃すな!!
上級者が視線を落としてくれるのは我々にもっと切磋琢磨しろ
と叱咤激励してくれている!!??
• まとめは蛇足!?
επιστημηさんへの感謝をこのページに込めたつもり…