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