C 文法を使用して AST を作成しようとしています。ここで見つけることができます。ただし、操作の優先順位は考慮されていません。たとえば、次のコードを入力した場合です。
l = k*j*5 - 10;
私はこれを得る:
操作は次のコードによって管理されます。
multiplicative_expression
: primary_expression (('*'^ additive_expression) | ('/'^ additive_expression) | ('%'^ additive_expression) )*
;
additive_expression
: multiplicative_expression (('+'^ multiplicative_expression) | ('-'^ multiplicative_expression))*
;
これを修正する解決策はありますか?
別の質問ですが、AST を構築するときに特別なトークンを追加する方法はありますか? たとえば、次のようなものです。
A B C -> ^( "VAR" B C)
VAR は、AST でのみ確認できる新しいトークンです。
また、「nil」トークンの名前を別のものに変更することは可能ですか?