Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/66.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 野牛解析_C_Yacc_Bison - Fatal编程技术网

C 野牛解析

C 野牛解析,c,yacc,bison,C,Yacc,Bison,我从O'Reilly那里购买了Flex&Bison,但是我在实现解析器时遇到了一些问题(将事物分解成标记并不是什么大问题) 假设我有一个巨大的二进制字符串,我需要做的是将这些位相加-每一位都是一个令牌: [0-1] { return NUMBER;} 110101011111 或者是一个没有“操作”的令牌集合 这样的语法正确吗 calclist : | calclist expr EOL {eval($2)} expr: NUMBER |expr NUMBER

我从O'Reilly那里购买了Flex&Bison,但是我在实现解析器时遇到了一些问题(将事物分解成标记并不是什么大问题)

假设我有一个巨大的二进制字符串,我需要做的是将这些位相加-每一位都是一个令牌:

 [0-1] { return NUMBER;}
110101011111

或者是一个没有“操作”的令牌集合

这样的语法正确吗

calclist :
         | calclist expr EOL {eval($2)}
expr: NUMBER
      |expr NUMBER { $$=$1+$2 }
或者有更好的方法吗?

您的示例lex规则“[0-1]{return NUMBER;}”没有设置yylval,因此如果您在语法中使用该值(就像您在规则“expr NUMBER{$$=$1+$2;}”中所做的那样),您将得到垃圾


总的来说,你所做的是正确的,尽管你选择的任务很琐碎,lex/bison是严重的滥杀。

这不是任务,我只是更容易这么说:)@codenewbie-他是对的,尽管如此。请仔细注意他的第一段,注意你可能想要“
$$=$1*2+$2
将位累积为二进制数。+1用于编写左递归规则