【发布时间】:2015-06-23 21:03:31
【问题描述】:
我有兴趣使用lex 标记我的输入字符串,但我不希望它可能“失败”。相反,我想要某种类型的 DEFAULT 或 TEXT 令牌,其中包含已识别令牌之间的所有不匹配字符。
有人有类似的经验吗?
【问题讨论】:
我有兴趣使用lex 标记我的输入字符串,但我不希望它可能“失败”。相反,我想要某种类型的 DEFAULT 或 TEXT 令牌,其中包含已识别令牌之间的所有不匹配字符。
有人有类似的经验吗?
【问题讨论】:
在所有 lex 规则的末尾使用模式 . 来匹配任何其他规则不匹配的任何字符。您可能还需要 \n 规则来匹配换行符(换行符是 . 不匹配的唯一字符)
如果你想将相邻的不匹配字符组合成一个标记,这更难,并且在解析器中更容易完成。
【讨论】:
为了扩展@Chris Dodd 的回答,任何 lex 脚本中的最终规则应该是:
. return yytext[0];
并且不要编写像"+" return PLUS; 这样的单字符规则。只需使用您在语法中直接识别的特殊字符,例如term: term '+' factor;.
这种做法:
【讨论】: