GNU Flex正则表达式为负数

时间:2014-06-20 19:01:09

标签: c regex flex-lexer

我在我的C程序中解析数学表达式。我使用flex(没有野牛或yacc)
除了消极或显性正数之外,一切正常。这是我目前的整数和运算符规则

integer           -?([0-9]+)
.........
"-"                   {some action}
{integer}             {some action}

等等。对于像" 1 + 2 + 3"这样的表达式来说,这没关系。但是失败了" 1-2-3"因为它将其视为负数,而不是单个减法运算符。所以我必须用括号和#34; 1-(2) - (3)"或空格。但它看起来很难看。

我试过" [+ - ] + [] * - ([0-9] +)"仅用于否定但不起作用,因为它包含结果中的先前运算符。当然,我可以预先处理一个字符串,以便计算" - "和" +"但是可以在flex中使用正则表达式吗?

1 个答案:

答案 0 :(得分:3)

你需要将数字读作正整数,将前导'-'视为一个单独的标记,在语法上(由bison / yacc)解释为取反或减法,取决于上下文。

因此-1234将是两个令牌:'-'1234

同样适用于'+'