如何实现C++ 0x原始字符串文字?

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)

更多信息可以在这里(维基百科)和这里(att)找到.

我想用我正在开发的语言中使用这个奇妙的功能.

那么,我如何定义一个合适的标记器和语法分析器来实现结果呢?

提前感谢您的回答!

9da*_*dan 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 { "...." }  
Run Code Online (Sandbox Code Playgroud)

literal[0]是指向原始文字的指针。