首页 > 解决方案 > 如何在 Flex 工具中结束序列的标记化?

问题描述

我正在使用 Flex(快速词法分析器生成器)工具。我已经这样定义了我的reges:

  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+等。

标签: parsingflex-lexerlexer

解决方案


推荐阅读