我正在解析 C 程序中的数学表达式。我使用flex(没有bison或yacc)
除了负数或显式正数之外,一切正常。这是我当前的整数和运算符规则
integer -?([0-9]+)
.........
"-" {some action}
{integer} {some action}
等等。对于“1+2+3”这样的表达式没问题,但对于“1-2-3”则失败,因为它将其视为负数,而不是单个减法运算符。所以我必须用括号“1-(2)-(3)”或空格来转义数字。但看起来很丑。
我尝试了“[+-]+[]*-([0-9]+)”仅用于负数,但不起作用,因为它在结果中包含以前的运算符。当然,我可以预处理字符串以计算“-”和“+”的数量,但也许可以在flex中使用正则表达式?
最佳答案
您需要将数字读取为正整数,将前导的 '-'
视为一个单独的标记,根据上下文在语法上(通过 bison/yacc)将其解释为否定或减法。
因此,-1234
将是两个标记:'-'
和 1234
。
与'+'
类似。
关于c - 负数的 GNU Flex 正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24333993/