在 lex 中,如何区分“-”(减法)运算符和整数“-3”?

ron*_*725 5 lex lexical-analysis flex-lexer

我正在为特定语言编写 lex,其中操作以前缀表示法进行:

(+ a b) --> (a + b)

一个整数的定义如下:一个整数可以具有负号( - ),但没有正号。符号和数字之间可以有或没有空格。如果值为 0,则只允许单个数字 0。否则,它与常见的整数定义相同(没有前导 0)。

lex 中的表达式顺序如下(第一个匹配规则):

  • 整数的正则表达式:[\-]?[ ]*((0)|([1-9][0-9]*))
  • 减法运算符的正则表达式: "-"

有了这些定义,我想解析字符串- 5 3 即。(5-3)

电流输出

Integer : - 5, 

Integer : 3
Run Code Online (Sandbox Code Playgroud)

期望的输出:

Operator : '-'

Integer : 5

Integer : 3
Run Code Online (Sandbox Code Playgroud)

use*_*421 6

你没有。您将-和 INTEGER 分别返回给解析器,并让解析器处理一元减号。