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

时间:2010-06-24 20:37:50

标签: programming-languages string 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      )
  ;***************************";

可以找到更多信息here(维基百科)和here(att)。

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

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

提前感谢您的回答!

1 个答案:

答案 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] 是指向原始文字文本的指针。