Antlr 4大括号的使用

Antlr 4 curly brace usage

我继承了一种脚本语言,我正试图将其移植到 antlr4。部分脚本语言使用花括号来标识变量。

设置{myVariable} = "5";

我使用 java 语法作为指导,其中 variableExpression 是新的,但标识符和表达式只是 java 的副本。我有: 变量表达式 : '{' 标识符 '}' ;

par表达式 : '(' 表达 ')' ;

但是我得到一个错误,当我有 设置 {foo} = "5";

如果我将花括号更改为 (),它会起作用。 !作品。 $ 没有。是否有我们需要以某种方式转义才能使这项工作正常进行的特殊字符?不,我无法更改花括号的使用(遗留代码问题)。

我目前正在通过文档和网络寻找指导,但如果有人已经知道答案,请告诉我。

谢谢!

使用这些字符没有这样的限制{}()!$。作为示例,让我们看一个简单的语法:

WS : [ \r\n\t] -> skip;
NAME : [a-zA-Z0-9]+;
STRING : '\"' .*? '\"';

script
    : varDeclaration+ EOF;

varDeclaration
    : 'set' variable '=' STRING;

variable
    : '(' NAME ')'
    | '{' NAME '}'
    | '!' NAME '!'
    | '$' NAME '$'
    ;

此语法允许匹配以下代码:

set {var1} = "value1"
set (var2) = "value2"
set !var3! = "value3"
set $var4$ = "value4"

结果 AST 如下所示: