识别mian函数错误。直接定位错误到了Btype
和FuncType
的重复定义,存在规约规约冲突。
推断依据:
发现原因:
存在移进规约问题,需要解决,这里主要是变量定义和函数定义的问题,但是根据我自己的理解,FuncDef
是不会产生冲突的,毕竟follw集都不一样。
VarDecl : Btype VarDefGroup ";"
;
Btype : INTTK {cout<<"\033[1;32mBtype\033[0m\t\tint\n"<<endl;}
| FLOATTK {cout<<"\033[1;32mBtype\033[0m\t\tfloat\n"<<endl;}
;
FuncDef : FuncType ID "(" ")" Block
| FuncType ID "(" FuncFParams ")" Block
;
FuncType : VOIDTK {cout<<"\033[1;32mFunction Type\033[0m\t\tvoid\n"<<endl;}
| Btype {cout<<"\033[1;32mFunction Type\033[0m\t\tint or float\n"<<endl;}
;
从Btype
往下找,发现了错误,作出修改:
还是有错误,重新检查语法分析部分,从头开始查找到错误:
修改了很多,现在其余的错误都消除了,剩下了无法识别返回值不是void
类型的函数,也就是说Btype
和FuncType
冲突了。尝试解决中,先存档。
git idb856edd25cf6ef1af120a04e306cf6fe4b910324
重大进展,当我把FuncType全部展开时,前面的问题消失了,函数体的识别都正常了,但是文件读取似乎还不能正常的退出需要再修改一下,测试如下:
对了,我换KUbuntu了,所以中终端也换成了Kconsole,所以不再是用之前的终端了,不过还是有些想ta的。hh
代码的修改主要如下:
但是还是存在一个冲突:
warning: 1 shift/reduce conflict [-Wconflicts-sr]
不过好在离成功更近了一步。暂时没有发现这个冲突,于是先修改读入文件会出错的问题。
问题非常简单,很快就修好了。现在是一个未被我发现的移进规约冲突,在后续测试中应该会出现的,暂时先不处理。
又发现了一个文法错误,这个错误是自己在写文法的时候写错了。错误解决如下:
项目中加入了头歌的文法测试程序,全部通过。