在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规则中的谓词