我有一个简单的词法分析器/语法我一直在努力,我无法理解匹配格式化变量的标准操作过程。我想尝试匹配以下内容:
我已经多次重写过这种方式,并且总是会出现以下错误:
决策可以使用多种选择匹配输入,例如“SINGLELETTER”:1,2
结果,对于该输入“
,禁用了备选方案2
非常感谢一些见解。我理解我的语法有些含糊不清,但是一旦我们进入原始的匹配循环,我有点困惑为什么可以匹配多个替代品。谢谢!
variablename
: (SINGLELETTER)
| (SINGLELETTER|UNDERSCORE)( SINGLELETTER|UNDERSCORE | DOLLAR | NUMBER)*;
SINGLELETTER : ( 'a'..'z' | 'A'..'Z');
fragment LOWERCASE : 'a'..'z';
fragment UNDERSCORE : '_';
fragment DOLLAR : '$';
fragment NUMBER : '0'..'9';
答案 0 :(得分:0)
为什么不制作VariableName
,一个为整个名称生成单个标记的词法分析器规则?
Variablename
: SINGLELETTER
| (SINGLELETTER|UNDERSCORE) (SINGLELETTER | UNDERSCORE | DOLLAR | NUMBER)*;
fragment SINGLELETTER : ( 'a'..'z' | 'A'..'Z');
fragment LOWERCASE : 'a'..'z';
fragment UNDERSCORE : '_';
fragment DOLLAR : '$';
fragment NUMBER : '0'..'9';
此外,您编写variableName
的方式并不遵循您编写的第2点(语法允许变量以_
开头,但您在解释中并未允许这样做。)< / p>