2016-11-21 103 views
0

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

set {myVariable} =“5”;

我正在使用java语法作为指导,其中variableExpression是新的,但标识符和表达式只是从java的副本。我有: variableExpression :'{'Identifier'}' ; '('expression')' ;'('expression')'

parExpression

但我得到一个错误,{缺少当我有 set {foo} =“5”;

如果我将大括号更改为(),则它可以工作。 !作品。 $没有。是否有特殊字符需要以某种方式逃脱才能完成这项工作?不,我不能改变大括号的使用(遗留代码问题)。

我目前正在挖掘文档和网站的指导,但如果有人已经知道答案,请让我知道。

谢谢!

回答

1

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

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看起来是这样的:

enter image description here