特定の言語を解析するために Python PLY を使用しています。次のような文法の場合:
IF LPAREN condition RPAREN LBRACE stmtlist RBRACE ELSE LBRACE stmtlist RBRACE
値がわかっているcondition
場合、True と言うと、パスstmtlist
内の解析を停止する方法はありますか?ELSE
ありがとう、
RBRACE
2 番目の;で囲まれたブロックの終わりを見つける必要があるため、解析を続行する必要があります。つまり、次のステートメントの開始を見つけるために解析する必要があります。
とはいえ、解析の結果を分析するとき(コードを生成するため、AST を構築するため、必要なことは何でも)、それがcondition
常に評価されると判断できる場合true
(おそらくそれは式1 = 1
です)、次のコードの生成を抑制することができます。 2番目stmtlist
。
アップデート:
文法 (言語の構文) は非手続き的に指定されているため、条件付きロジックを追加する場所がありません。
一方、文法の特定の構文要素が一致したときに実行するセマンティックアクションを指定し、これを手続き的に行います。PLYでは、文法規則関数の本体をコーディングすることでこれを行います。2 番目の に一致する文法規則関数ではstmtlist
、入力プログラム (コンパイルされた言語プロセッサへの入力) について把握した他の情報に基づいて、コード生成をスキップする条件付きコードを記述できます。