我有几个 ANTLR 规则,我不知道如何使它们起作用
第一条规则是:
STRING_LITERAL
: '"' ( EscapeSequence | ~('\\'|'"') )* '"'
;
第二条规则是:
element
: name '=' math_formula ;
math_formula
: '"' expression '"';
该表达式是一个类似于 C 的正则表达式
语法示例
"count" = "array[3]"
count 应该是一个字符串,而 array[3] 应该是一个表达式
我的问题是词法分析器总是将“count”和“array[3]”作为字符串返回,而 Parser 无法识别表达式。
我正在使用java目标。
编辑:将“variable_name”更改为“count”。
EDIT2:在下面解释了我的第二次尝试:
我可以用 '= "' 检测到表达式的开头,但是我无法在 Lexer 中检测到表达式的结尾,当我有 2 个由 ',' 分隔的元素时会导致错误检测字符串
"count1" = "array[1]",
"count2" = "array[2]"
如果我使用 '= "' 作为 START_EXPRESSION,词法分析器检测到结束第一个表达式的引号,并且将第二个字符串开头的引号检测为字符串 ",\n",这显然是不正确的。
编辑 3:尝试句法谓词
我将 STRING_LITERAL 的规则更改为
STRING_LITERAL
: (~('=') '"' ( EscapeSequence | ~('\\'|'"') )* '"')=> '"' ( EscapeSequence | ~('\\'|'"') )* '"'
;
仍然不起作用,我也不知道如何通过为其分配元素标签或其他东西来在规则本身中生成 ~('=')