使Flex句柄自动转义换行符

时间:2018-09-12 00:49:50

标签: lex lexer lexical-analysis

我正在寻找flex中的规则,该规则处理转义的换行符,并为我提供忽略该换行符的令牌。

例如:

我的lex规范中有一条规则,例如:

\"(\.|[^\"])*\"

捕获所有字符串文字。确实会从以下代码中捕获字符串:

Printf("This is literal")

但是,如果代码像这样,它并不能给我正确的令牌

printf("This is \
   literal.")

我可以对我的lex规范进行哪些修改以应对这种情况?

1 个答案:

答案 0 :(得分:2)

(F)lex仅识别令牌。解释它们的内容取决于您。

如果您只是识别字符串文字,则可以使用正则表达式,例如

["]([^"\n]|\\.)*["]

但是,如果要根据您的语言正确解释字符串文字,则需要具有适当操作的开始条件。

通常的方法是在看到开头"时初始化类似StringBuffer的对象,并更改为字符串开始条件。非特殊字符仅附加在StringBuffer后面。像\n这样的转义序列会在StringBuffer后面附加一个适当的字符,而\\\n则什么也不做。当右引号出现时,实际上会连同累积的文本一起发送令牌。