在ANTLR中捕获格式化变量声明
我有一个简单的lexer/语法,我一直在研究,我很难理解匹配格式化变量的标准操作过程。我正在尝试匹配以下内容:在ANTLR中捕获格式化变量声明,antlr,grammar,lexer,Antlr,Grammar,Lexer,我有一个简单的lexer/语法,我一直在研究,我很难理解匹配格式化变量的标准操作过程。我正在尝试匹配以下内容: 变量名至少可包含1个字符。如果是一个字符,则必须是大写或小写字母 如果大于1个字符,则必须以任意大小写的字母开头,然后后跟任意数量的字符,包括数字、下划线和美元符号 我已经用多种方式重写了几次,但总是出现以下错误: 决策可以使用多个选项匹配输入,例如“单字母”: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';
为什么不创建
VariableName
,这是一个为整个名称生成单个标记的lexer规则
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';
此外,您编写
变量名
的方式没有遵循您编写的第2点(语法允许变量以开头,但您在解释中不允许这样做).非常感谢您的回复。不过,这两个规则似乎与我写的完全相同,只是一个是lexer,一个是解析器规则。“决策可以使用多个选项匹配输入,例如“{a'..'Z','a'..'Z'}”:1,2因此,该输入禁用了选项2”