我仍然在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;} ;
但是当我尝试写这样,我得到“没有可行的替代”的错误。 谁能解决我的问题吧。 提前致谢
当在寻找的词法语法为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 تعبير
不遵守NameChar*
中的一部分ID
规则。