我有一个我一直在研究的简单词法分析器/语法,但我无法理解匹配格式化变量的标准操作过程。我正在尝试匹配以下内容:
- 变量名称至少可以是 1 个字符。如果是一个字符,则必须是大写或小写字母。
- 如果大于 1 个字符,则必须以任意大小写的字母开头,后跟任意数量的字符,包括数字、下划线和美元符号。
我已经多次重写了这个,在很多方面,我总是得到以下错误:
决策可以使用多种选择匹配诸如“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';