それらを機能させる方法がわからないANTLRルールがいくつかあります
最初のルールは次のとおりです。
STRING_LITERAL
: '"' ( EscapeSequence | ~('\\'|'"') )* '"'
;
2 番目のルールは次のとおりです。
element
: name '=' math_formula ;
math_formula
: '"' expression '"';
式は通常の C のような式です
構文の例
"count" = "array[3]"
count は文字列、array[3] は式です。
私の問題は、レクサーが常に「count」と「array[3]」の両方を文字列として返し、パーサーが式を認識できないことです。
私はJavaターゲットを使用しています。
編集:「変数名」を「カウント」に変更しました。
EDIT2:以下の2回目の試みについて説明しました:
「= "」で式の開始を検出できますが、レクサーで式の終了を検出できず、「,」で区切られた 2 つの要素がある場合に文字列の誤検出が発生します。
"count1" = "array[1]",
"count2" = "array[2]"
'= "' を START_EXPRESSION として使用した場合、レクサーは最初の式を終了する引用符を検出し、2 番目の文字列を開始する引用符を文字列 ",\n" として検出しましたが、これは明らかに正しくありません。
編集 3: 構文述語を試す
STRING_LITERAL のルールを次のように変更しました
STRING_LITERAL
: (~('=') '"' ( EscapeSequence | ~('\\'|'"') )* '"')=> '"' ( EscapeSequence | ~('\\'|'"') )* '"'
;
それでも機能しません。また、要素ラベルなどを割り当てて、ルール自体で ~('=') を生成する方法も知りませんでした