Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C GNU Flex regexp用于负数_C_Regex_Flex Lexer - Fatal编程技术网

C GNU Flex regexp用于负数

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”则失败,因为它将其视为负数,而不是单个减法运算符。所以我必须用

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


同样地,对于
'+'

试试这个:
/(\d)([\+-])?/g
@Amir,
([\+-])
应该是
([+-])
或者
(\+-])
@Sam是的,我的错误,我用方括号替换了括号,但没有删除管道符号:
/([\+-])?/g
,非常感谢。这比我想的要简单。我使用堆栈机进行求值,所以一元负号和加号在一秒钟内就实现了。谢谢