这个switch语句正在使用一个Case如何使它成为多个案例Bison

时间:2014-01-12 11:16:28

标签: bison

此switch语句正在使用一个Case如何使其成为多个案例

S: Statement {printf("ACCEPTED");}

声明:SWITCH BRO ID BRC CBO E CBC

E: A 
 | A C




A: A B 
 | CASE DIGIT D 


B:  BREAK SEMI


C : DEFAULT D B



D : COLON ID SEMI

 ;

这是一个我希望在多个案例中接受语法的问题 enter image description here

2 个答案:

答案 0 :(得分:1)

你的语法很糟糕,并没有考虑CASE的重复。您需要了解如何表达事物列表。一般模式如下:

item: ....
items: item
       | item ';' items

所以我们有:

case: CASE DIGIT ':' stmts
default: DEFAULT ':' stmts
cases: case | default | case ';' cases

您还应该了解如何跟踪解析器以进行调试。使用yacc,您可以设置环境变量YYDEBUG,它将打印相当详细的所有解析器状态。

答案 1 :(得分:0)

正确切换语法 不需要在A E空间之间使用分号。

声明:SWITCH BRO ID BRC CBO E CBC

E:A    |一个C.    | A E

答:A  | CASE DIGIT D

B:BREAK SEMI

C:DEFAULT D B

D:COLON ID SEMI