我在我的C程序中解析数学表达式。我使用flex(没有野牛或yacc)
除了消极或显性正数之外,一切正常。这是我目前的整数和运算符规则
integer -?([0-9]+)
.........
"-" {some action}
{integer} {some action}
等等。对于像" 1 + 2 + 3"这样的表达式来说,这没关系。但是失败了" 1-2-3"因为它将其视为负数,而不是单个减法运算符。所以我必须用括号和#34; 1-(2) - (3)"或空格。但它看起来很难看。
我试过" [+ - ] + [] * - ([0-9] +)"仅用于否定但不起作用,因为它包含结果中的先前运算符。当然,我可以预先处理一个字符串,以便计算" - "和" +"但是可以在flex中使用正则表达式吗?
答案 0 :(得分:3)
你需要将数字读作正整数,将前导'-'
视为一个单独的标记,在语法上(由bison / yacc)解释为取反或减法,取决于上下文。
因此-1234
将是两个令牌:'-'
和1234
。
同样适用于'+'
。