我在flex中寻找一个处理转义换行符的规则,并给我一个忽略该换行符的令牌。
例如:
我的lex规范中有一个规则,如:
\"(\.|[^\"])*\"
捕获所有字符串文字。这确实从代码中捕获字符串,如:
Printf("This is literal")
但如果代码如下,它不会给我正确的令牌:
printf("This is \
literal.")
我可以对我的lex规范进行哪些修改来处理这种情况?
(F)lex仅识别令牌。解释他们的内容取决于你。
如果您只是识别字符串文字,则可以使用正则表达式
["]([^"\n]|\\.)*["]
但是如果你想要正确解释字符串文字 - 根据你的语言 - 你需要一个具有适当行动的开始条件。
通常的方法是在看到开头的"
时初始化一个类似StringBuffer的对象,然后更改为字符串开始条件。非特殊字符只是附加到StringBuffer;像\n
这样的转义序列会在StringBuffer中附加一个合适的字符,而\\\n
什么都不做。当关闭引用为iseen时,tje标记实际上与累积的文本一起发送。