Riz*_*izo 5 string programming-languages language-design c++11
如何定义词法分析器和解析器(例如: 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 )
;***************************";
Run Code Online (Sandbox Code Playgroud)
我想用我正在开发的语言中使用这个奇妙的功能.
那么,我如何定义一个合适的标记器和语法分析器来实现结果呢?
提前感谢您的回答!
您可以在词法分析阶段对文字进行处理,并将其转换为元标记之类的东西。
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 { "...." }
Run Code Online (Sandbox Code Playgroud)
literal[0]是指向原始文字的指针。