全部,
我一直在尝试从标准文档 N4567 创建 C++ 语法,这是我能找到的最新版本。我相信语法是完整的,但我需要测试它。我一直试图解决的一个问题是让词法分析器从标准中识别原始字符串。我已经使用 Actions & Semantic Predicates 实现了一个可能的解决方案。我需要帮助确定它是否真的有效。我已经阅读了关于操作和谓词之间交互的 ANTLR4 参考,但可以决定我的解决方案是否有效。下面包含一个精简语法。任何想法将不胜感激。我试图将我的想法包含在样本中。
grammar SampleRaw;
@lexer::members {
string d_char_seq = "";
}
string_literal
: ENCODING_PREFIX? '\"' S_CHAR* '\"'
| ENCODING_PREFIX? 'R' Raw_String
;
ENCODING_PREFIX // one of
: 'u8'
| [uUL]
;
S_CHAR /* any member of the source character set except the
double_quote ", backslash \, or NEW_LINE character
*/
: ~[\"\\\n\r]
| ESCAPE_SEQUENCE
| UNIV_CHAR_NAME
;
fragment ESCAPE_SEQUENCE
: SIMPLE_ESCAPE_SEQ
| OCT_ESCAPE_SEQ
| HEX_ESCAPE_SEQ
;
fragment SIMPLE_ESCAPE_SEQ // …Run Code Online (Sandbox Code Playgroud)