C GNU Flex regexp用于负数
我正在解析C程序中的数学表达式。我使用flex(没有bison或yacc)C GNU Flex regexp用于负数,c,regex,flex-lexer,C,Regex,Flex Lexer,我正在解析C程序中的数学表达式。我使用flex(没有bison或yacc) 除了负数或显式正数外,其他一切都正常。这是我目前关于整数和运算符的规则 integer -?([0-9]+) ......... "-" {some action} {integer} {some action} 等等。对于“1+2+3”这样的表达式是可以的,但对于“1-2-3”则失败,因为它将其视为负数,而不是单个减法运算符。所以我必须用
除了负数或显式正数外,其他一切都正常。这是我目前关于整数和运算符的规则
integer -?([0-9]+)
.........
"-" {some action}
{integer} {some action}
等等。对于“1+2+3”这样的表达式是可以的,但对于“1-2-3”则失败,因为它将其视为负数,而不是单个减法运算符。所以我必须用括号“1-(2)-(3)”或空格来转义数字。但它看起来很丑
我尝试了“[+-]+[]*-([0-9]+)”只用于负片,但不起作用,因为它在结果中包含了前面的运算符。当然,我可以预处理字符串以计数“-”和“+”,但在flex中使用正则表达式是否可能 您需要将数字读取为正整数,将前导的
'-'
视为一个单独的标记,该标记在语法上(由bison/yacc)解释为否定或减法,具体取决于上下文
所以-1234
将是两个标记:'-'
,和1234
同样地,对于
'+'
试试这个:/(\d)([\+-])?/g
@Amir,([\+-])
应该是([+-])
或者(\+-])
@Sam是的,我的错误,我用方括号替换了括号,但没有删除管道符号:/([\+-])?/g
,非常感谢。这比我想的要简单。我使用堆栈机进行求值,所以一元负号和加号在一秒钟内就实现了。谢谢