Parsing 如何在Flex工具中结束序列的标记化?

Parsing 如何在Flex工具中结束序列的标记化?,parsing,flex-lexer,lexer,Parsing,Flex Lexer,Lexer,我正在使用Flex(快速词汇分析器生成器)工具。我已将我的注册表定义为: value [0-9]|[1-9][0-9]* id [a-zA-Z][a-zA-Z0-9]* plus "+" ... 我还有一些像这样定义的关键字和操作符。以下是一个示例输出,可帮助您了解我的问题: > 123 VALUE: 123 (123) > name IDENTIFIER: name > 1230

我正在使用Flex(快速词汇分析器生成器)工具。我已将我的注册表定义为:

  value             [0-9]|[1-9][0-9]*
  id                [a-zA-Z][a-zA-Z0-9]*
  plus              "+"
  ...
我还有一些像这样定义的关键字和操作符。以下是一个示例输出,可帮助您了解我的问题:

> 123
VALUE: 123 (123)
> name
IDENTIFIER: name
> 1230
VALUE: 1230 (1230)
> 0123
VALUE: 0 (0)
VALUE: 123 (123)
> 123x
VALUE: 123 (123)
IDENTIFIER: x
> x+
IDENTIFIER: x
OP_PLUS: +
只要它将一个令牌适合于一个适当的类,它就会完成并再次进入DFA的开始状态。做它应该做的事。但我不知道如何在Flex中处理这个问题。 我相信带前导零的数字正则表达式工作得很好,但它崩溃的原因也是一样的。我正在等待的正确输出:

> (+ x 3)
OPEN_P: (
PLUS: +
IDENTIFIER: x
VALUE: 3 (3)
CLOSE_P: )
> 0123
SYNTAX ERROR
> 123X
SYNTAX ERROR
> 123+
SYNTAX ERROR
我不希望此序列
123x
显示如下:

VALUE: 123
ID: x

相反,我想得到一个语法错误。因为
123x
对我来说不是有效的序列。或者
0123
,或者
123+
等等。

您能更清楚地说明您所期望的和代码所做的之间的区别吗?老实说,我不知道你在问什么问题。我想我已经添加了一个更清晰的描述。这里有一个可能类似的问题和答案:。还有一个,在回答中提到:语法错误在解析过程中被识别。123+56应为有效表达式,lex不应在词法分析123+中将其声明为无效标记。