c - 负数的 GNU Flex 正则表达式

标签 c regex flex-lexer

我正在解析 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/

相关文章:

c - 使用 Bison 实现语法。语法控制流意外

C 没有得到正确的结果

c - 查看随机序列中的下四个数字(使用 srand 和 rand)

php - 北美编号计划正则表达式

regex - Groovy 正则表达式 : Capture group in Switch Statement

c++ - 访问 flex scanner 的内部缓冲区、长度和 token 匹配位置

c - 在 C 中通过 TCP 发送和接收整数值

c - 扩展装配中 cmpxchg16b 的不可能约束

regex - 基于分隔符的字符串分割

c++ - 如何排除部分输入被解析?