在antlr4c+中编写UTF-16标识符字符的语法+;目标 我用AtLR 4编写C++目标分析器。< /P> 它有一些用java编写的动作代码,所以我需要把它转换成C++,以便编译它。
对于以下代码,我不理解其含义:在antlr4c+中编写UTF-16标识符字符的语法+;目标 我用AtLR 4编写C++目标分析器。< /P> 它有一些用java编写的动作代码,所以我需要把它转换成C++,以便编译它。,java,c++,antlr,antlr4,utf-16,Java,C++,Antlr,Antlr4,Utf 16,对于以下代码,我不理解其含义: fragment IdentifierStartChar : // these are the valid identifier start characters below 0x7F [a-zA-Z_] | // these are the valid characters from 0x80 to 0xFF [\u00AA\u00B5\u00BA\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u00FF]
fragment
IdentifierStartChar
: // these are the valid identifier start characters below 0x7F
[a-zA-Z_]
| // these are the valid characters from 0x80 to 0xFF
[\u00AA\u00B5\u00BA\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u00FF]
| // these are the letters above 0xFF which only need a single UTF-16 code unit
[\u0100-\uD7FF\uE000-\uFFFF] {Character.isLetter((char)_input.LA(-1))}?
| // letters which require multiple UTF-16 code units
[\uD800-\uDBFF] [\uDC00-\uDFFF] {Character.isLetter(Character.toCodePoint((char)_input.LA(-2), (char)_input.LA(-1)))}?
;
动作代码块{action code}
后面的问号?
有什么作用?(编辑:下面回答我自己)
这似乎是UTF-16编码的标识符字符的某种字母识别
< >我在寻找代码>字符的C++选项。ISLITTER()/<代码>和<代码>字符。toCODEPOUNT()/CUT>。这是正确的方式吗?ANTLR 4 C++目标与java的工作方式相同吗?所以我只需要交换函数。
或者,我如何修改上面的代码,以便它可以在C++目标中工作?< /p> 问题< /p>
动作代码块{action code}
后面的问号?
有什么作用
我从以下几个方面找到了答案:
{«p»}?
计算语义谓词«p»。如果«p»在运行时计算为false,则周围的规则将变为“不可见”(不可用)。表达式«p»符合目标语言语法。虽然语义谓词可以出现在lexer规则中的任何位置,但将它们放在规则末尾是最有效的。需要注意的一点是,语义谓词必须在lexer操作之前。请参阅Lexer规则中的谓词