【问题标题】:Make flex handle escaped newlines automatically使 flex 句柄自动转义换行符
【发布时间】:2018-09-12 00:49:49
【问题描述】:

我正在寻找 flex 中的规则来处理转义的换行符并给我一个忽略该换行符的标记。

例如:

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

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

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

Printf("This is literal")

但如果代码如下,它不会给我正确的令牌:

printf("This is \
   literal.")

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

【问题讨论】:

标签: lex lexer lexical-analysis


【解决方案1】:

(F)lex 只识别标记。解释其内容由您决定。

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

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

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

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

有关更详细的示例,请参阅 Flex / Lex Encoding Strings with Escaped CharactersOptimizing flex string literal parsing(可能还有更多)。

【讨论】:

    猜你喜欢
    • 2010-09-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多