0

パスカル文法をチェックするための再帰下降構文解析の記述について1つの質問があります。私は例えばこのコードを持っています:

a := c ;

a、cが変数であることがわかります。:=および; -は端末です。この表現を確認できます。しかし、私がこのようなsmthを持っている場合:

a := c + 1 - d ;

この式の再帰下降構文解析の書き方に問題があります。

最初の例では、C#で次のように記述しました。

if ((!parsing(current_token, "var")) || (!current_token, ":=")) || (  !parsing(current_token, "var") && !parsing(current_token, "const")  ) || (!current_token, "term"))) show_error();

2番目の例をどのように書くことができますか?ありがとう。

4

1 に答える 1

0

Pascal での変数代入には、次の BNF があります。

variable := expression 

:=したがって、トークンに続く式を解析する必要があります。コードをトークン化すると、次のトークンとして何が有効かを判断する必要があります。この場合、変数の後に := 演算子が続くことがわかります。式パーサー関数に再帰する必要があります。

適切な式パーサーを作成することは、価値のある言語を解析するために重要です。たとえば、For ループ、If ステートメント、Case ステートメントなど、あらゆる場所で式を見つけることができます。

簡単な BING を実行したところ、この BNF for Pascal が役立つ可能性があることがわかりました

http://www2.informatik.uni-halle.de/lehre/pascal/sprache/pas_bnf.html

于 2011-04-10T19:12:39.047 に答える