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