C# 算术表达式的LR解析
我有LR语法和LR表,用于(1+1),1+(a+1)等表达式 0:E'->E 1:E->E+T 2:E->T 3:T->T*F 4:T->F 5:F->(E) 6:F->idC# 算术表达式的LR解析,c#,lr,C#,Lr,我有LR语法和LR表,用于(1+1),1+(a+1)等表达式 0:E'->E 1:E->E+T 2:E->T 3:T->T*F 4:T->F 5:F->(E) 6:F->id string[,] ActionTable = //+ * ( ) id end E T F { {"" ,"" ,"S4" ,"" ,"S5" ,"" ,"1" ,"2"
string[,] ActionTable =
//+ * ( ) id end E T F
{
{"" ,"" ,"S4" ,"" ,"S5" ,"" ,"1" ,"2" ,"3"}, // 0
{"S6" ,"" ,"" ,"" ,"" ,"AC" ,"" ,"" ,"" }, // 1
{"R2" ,"S7" ,"" ,"R2" ,"" ,"R2" ,"" ,"" ,""},//2
{"R4" ,"R4" ,"" ,"R4" ,"" ,"R4" ,"" ,"" ,""}, // 3
{"" ,"" ,"S4" ,"" ,"S5" ,"" ,"8" ,"2" ,"3"}, // 4
{"R6" ,"R6" ,"" ,"R6" ,"" ,"R6" ,"" ,"" ,""}, // 5
{"" ,"" ,"S4" ,"" ,"S5" ,"" ,"" ,"9" ,"3"}, // 6
{"" ,"" ,"S4" ,"" ,"S5" ,"" ,"" ,"" ,"10"},// 7
{"S6" ,"" ,"" ,"S11" ,"" ,"" ,"" ,"" ,""}, // 8
{"R1" ,"S7" ,"" ,"R1" ,"R1" ,"" ,"" ,"" ,""}, // 9
{"R3" ,"R3" ,"" ,"R3" ,"R3" ,"" ,"" ,"" ,""}, //10
{"R5" ,"R5" ,"" ,"R5" ,"R5" ,"" ,"" ,"" ,""} //11
};
我试图检查像1+1或1+(1*a)+1这样的表达式,但解析器说这个表达式不正确
我能用我的语法做些什么来修复它呢?你没有数字的产生式规则。关于E->E+t,t->F,F->id呢?这是一个很好的观点。假设
id
只映射到变量。也许我应该更改语法?