如何定义词法分析器和解析器的工作集(示例: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 )
;***************************";
更多信息可咨询here (维基百科)和 here (附)。
我想在我现在正在开发的语言中使用这个奇妙的功能。
那么,我怎样才能定义一个合适的标记器和语法分析器来获得结果呢?
提前感谢您的回答!
最佳答案
您可以在词法分析阶段对文字进行预处理,并将它们转换为元标记之类的东西。
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] 是指向原始文字文本的指针。
关于programming-languages - 如何实现 C++0x 原始字符串文字?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3113677/