【发布时间】:2016-11-17 20:40:25
【问题描述】:
我定义了以下别名:
WS [ \t\n]
WSS {WS}*
NEWSS {WS}+
NAME [A-Za-z_][A-Za-z0-9_-]*
WORD [^;]+
VAR_USE ${WSS}{NAME}{WSS}:
VAR_DEF ${VAR_USE}{WSS}{WORD}{WSS};
还有两条简单的规则:
{VAR_DEF} cout << "VAR DEF";
{VAR_USE} cout << "VAR USE";
当我运行程序并开始写单词时,每当我写出应该被第二条规则检测到的单词时,它才会做出反应,直到我写出被第一条规则检测到的单词。 (它不会回显也不会检测到)
例如,这是一个短期运行的屏幕截图:
第一个输入被回显,第二个输入被第二个规则检测到,第三个输入应该被第一个规则检测到但它没有。可能是什么问题?
【问题讨论】:
-
我看不出该 lex 规范如何产生该输出。
VAR_DEF需要两个连续的冒号,而您的输入只有一个。 -
糟糕,我复制错了。虽然它仍然没有解释它没有被回应。
标签: flex-lexer lex