我仍然是ANTLR 4的初学者,我想知道是否有一种方法可以用unicode编写语法规则名称。例如,可以使用以下规则:
atomExp returns [double value]
: n=Number {$value = Double.parseDouble($n.text);}
| '(' exp=additionExp ')' {$value = $exp.value;}
;
然而,假设我想编写相同的规则,但不是将其名称写成"atomExp",而是将其名称写成阿拉伯语单词"تعبير"
تعبير returns [double value]
: n=Number {$value = Double.parseDouble($n.text);}
| '(' exp=additionExp ')' {$value = $exp.value;}
;
但是当我试着那样写的时候,我得到了"no viable alternative"错误。有人能解决我的问题吗?提前感谢
查看ANTLR4的词法分析器语法时,您可以看到词法分析器和解析器名称支持某些Unicode字符:
/** Allow unicode rule/token names */
ID : NameStartChar NameChar*;
fragment
NameChar
: NameStartChar
| '0'..'9'
| '_'
| 'u00B7'
| 'u0300'..'u036F'
| 'u203F'..'u2040'
;
fragment
NameStartChar
: 'A'..'Z'
| 'a'..'z'
| 'u00C0'..'u00D6'
| 'u00D8'..'u00F6'
| 'u00F8'..'u02FF'
| 'u0370'..'u037D'
| 'u037F'..'u1FFF'
| 'u200C'..'u200D'
| 'u2070'..'u218F'
| 'u2C00'..'u2FEF'
| 'u3001'..'uD7FF'
| 'uF900'..'uFDCF'
| 'uFDF0'..'uFFFD'
; // ignores | ['u10000-'uEFFFF] ;
INT : [0-9]+
;
但是你的ID تعبير
似乎不符合ID
规则的NameChar*
部分