如何实现 C++0x 原始字符串文字?
如何定义词法分析器和解析器的工作集(例如:flex 和 bison)以支持 C++0x 风格的原始字符串文字?
您可能已经知道,C++0x 中的新字符串文字可以以非常灵活的方式表达。
R"
- 在此代码中,
几乎可以是所有内容,也不需要转义字符。
任何类型的括号都可以用来分隔字符串的结尾:
R"(我喜欢那些渴望不可能的人。(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 )
;***************************";
可以在此处找到更多信息(维基百科)和此处( att)。
我想在我现在正在开发的语言中使用这个奇妙的功能。
那么,如何定义合适的分词器和语法分析器来获得结果呢?
预先感谢您的回答!
How to define a working set of lexer and parser (exempli gratia: flex and bison) to support the C++0x styled raw string literals?
As you may already know, new string literals in C++0x can be expressed in a very flexible way.
R"<delim>...<delim>";
- in this code the <delim>
can be pretty much everything and also no escape characters are needed.
Any kind of parentheses can be used to delimit the end of string:
R"(I love those who yearn for the impossible. (Von Goethe, "Faust"))";
Blocks of text can be simply defined using equal occurrences of same characters:
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 )
;***************************";
More information can be found here(wikipedia) and here(att).
I would like to use this fantastic feature in a language I am developing now.
So, how can I define a proper tokenizer and syntax analyzer to achive the result?
Thanks in advance for your answers!
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
您可以在词法分析阶段对文字进行处理,并将其转换为元标记之类的东西。
literal[0] 是指向原始文字的指针。
You could proprocess literals in lexical analysis stage and transform them into something like meta token.
literal[0] is the pointer to the original literal text.