0

我有一个我一直在研究的简单词法分析器/语法,但我无法理解匹配格式化变量的标准操作过程。我正在尝试匹配以下内容:

  1. 变量名称至少可以是 1 个字符。如果是一个字符,则必须是大写或小写字母。
  2. 如果大于 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';
4

1 回答 1

0

为什么不 make 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 点(语法允许变量以 开头_,但您在解释中不允许这样做)。

于 2013-09-10T03:52:44.490 回答