Antlr4 允许使用带空格的变量名称



我是Antlr的新手,我想为自定义编程语言编写一个编译器,该语言具有带空格的变量名称。下面是示例代码:

SET Variable with a Long Name TO FALSE
SET Variable with Numbers 1 2 3 in the Name TO 3 JUN 1990
SET Variable with Symbols @ %^& TO "A very long text string"

变量规则:可以包含空格可以包含特殊符号

我想用javascript编写编译器。以下是我的语法:

grammar Foo;
compilationUnit: stmt*;
stmt:
    assignStmt
    | invocationStmt
;
assignStmt: SET ID TO expr;
invocationStmt: name=ID ((expr COMMA)* expr)?;
expr: ID | INT | STRING;
COMMA: ',';
SAY: 'say';
SET: 'set';
TO: 'to';
INT: [0-9]+;
STRING: '"' (~('n' | '"'))* '"';
ID: [a-zA-Z_] [ a-zA-Z0-9_]*;
WS: [ ntr]+ -> skip;

我尝试提供输入源代码为:

"set variable one to 1".

但收到错误"未定义的令牌标识符"。

任何帮助将不胜感激。

ID: [a-zA-Z_] [ a-zA-Z0-9_]*;

匹配"将变量 1 设置为 1"。像大多数词汇分析仪一样,ANTLR的扫描仪尽可能多地匹配。 即使set具有特定的模式,也不会匹配。(即使你做到了这一点,"变量 1 到 1"也会在下一个令牌上匹配;匹配不会仅仅因为碰巧出现to而停止。

处理多单词变量名称的最佳方法是将它们视为多个单词。也就是说,将每个单词识别为单独的标记,并将标识符识别为单词序列。这样做的结果是two wordstwo words最终成为相同的标识符,但恕我直言,这是一个功能,而不是一个错误。

相关内容

  • 没有找到相关文章

最新更新