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

标签 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 (附)。

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

那么,我怎样才能定义一个合适的标记器和语法分析器来获得结果呢?

提前感谢您的回答!

最佳答案

您可以在词法分析阶段对文字进行预处理,并将它们转换为元标记之类的东西。

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/

相关文章:

php - 如何在服务器上连续执行程序?使用哪种语言?

java - 将字符串转换为日期格式

java - 如何在一个语句中写多个 equalsIgnoreCase()?

c++ - 是否有没有 C 陷阱的 C++ 风格的语言?

programming-languages - 学习多种语言

php - 为什么 PHP 变量前有 $ 符号?

programming-languages - 你编程是为了盈利吗?

c# - 使用正则表达式替换引号外的空格

java - 支持/整合语言测量单位的策略是什么?

language-design - 为什么在主体之后重复模块和过程名称?