如何定义词法分析器和解析器的工作集(例证: flex和bison)以支持C ++ 0x样式的原始字符串文字?
您可能已经知道,C ++ 0x中的新字符串文字可以非常灵活的方式表达。
R"<delim>...<delim>";
- 在此代码中,<delim>
可以是几乎所有内容,也不需要转义字符。
可以使用任何类型的括号来分隔字符串的结尾:
R"(I love those who yearn for the impossible. (Von Goethe, "Faust"))";
可以使用相同的相同字符来简单地定义文本块:
R";***************************(
; TINY BASIC FOR INTEL 8080
; VERSION 2.0
; BY LI-CHEN WANG
; MODIFIED AND TRANSLATED
; TO INTEL MNEMONICS
; BY ROGER RAUSKOLB
; 10 OCTOBER, 1976
; @COPYLEFT
; ALL WRONGS RESERVED )
;***************************";
我想在我正在开发的语言中使用这个奇妙的功能。
那么,我如何定义一个合适的标记化器和语法分析器来实现结果呢?
提前感谢您的回答!
答案 0 :(得分:2)
您可以在词法分析阶段对文字进行处理,并将其转换为元令牌。
Input:
int a;
char *b = R"....";
Preprocessed:
int a;
char *b = R*literal[0]*;
Tokenized:
INT symbol[0] DELIM
CHAR OP_ASTR symbol[1] OP_EQ symbol[2] *literal[0]* DELIM
Symbol table contents { "a", "b", "R" }
Literal table contents { "...." }
literal [0] 是指向原始文字文本的指针。