编译原理实验错误排查指南
……持续更新中
0. 显示找不到make
可能的原因1: 没有装上make, 在msys2 x64中重新安装对应环境的make。重装后要重启vs, 否则没有更新到
可能的原因2: 排除问题1后, 确认在cmd环境下可以打开make, 如果不行, 可能是没有加环境变量, 也可能是
可能的原因3: (来自21网安1班周家锋同学的回答) 因为make不叫make, 改了叫mingw-make64之类的名字。
对于原因2,3, 可以通过everything查找make*.exe, 再筛选和msys64有关的路径, 从而判定到底有没有make, 以及是否因为环境变量缺乏对应的地址导致的。
来自"墲⃠穹芜烬"同学的吐槽: 不嫌慢也能让网站的工作流编译
来自老师对这条吐槽的吐槽: 确实, 但这个环境其实是我故意的让我大家去配的, 原因是更加贴近基本的编译环境. 如果全都一键就能搞好, 这个实验要填的又只有那么一两句代码, 对你们的锻炼根本为零. 下面一个例子正好是讲调试过程对人思路的锻炼
1.项目1在自己电脑上能有90或100分, 但在系统上总是60分, 能make, 但第一个case显示第一个符号识别出为ERROR.
问题核心: 输入文件中的\n被各种原因替换成\r\n了, 而源代码的逻辑中没有识别\r的部分, 因此出错.
解决方案: 1. 在scan.c中增加相应处理; 2. 把readfile中的\r全部去掉.
发现的思路: 既然读到ERROR, 那就是读到奇怪的字符, 然后我就想办法在服务器端输出他到底读到了什么字符. 找到了之后, 就只要加一个额外处理就行. 服务器显示对应的符号十六进制是d, 因此就是13号ascii码, 也就是\r.
2.项目2 (LEX) 出现如下错误:
错误原因:因为gcc路径不对找不到 libfl.a。
解决思路:根据gcc的帮助文件,它会去检索库的路径,但比较繁杂。特别地,它会在一个名为LIBRARY_PATH的环境变量中找库的路径。win下面一般没有,因此要手动添加。
解决办法:在系统变量中,增加名为LIBRARY_PATH的变量,值为你装msys64的路径下的usr\lib文件夹,比如我的是默认地址:“C:\msys64\usr\lib”。
错误原因:应该是没有装好flex
解决思路:估计是没有按照我的官方配置方法来做, 需要手动安装flex pacman -S flex. 之后别忘了修改Path变量
3. 显示找不到comtool
故障原因: 由于Path变量没设置好, 让msys的内置python路径比外部python的要优先, 进而导致找不到comtool这个脚本
解决方法: 编辑Path, 让自己装的python的路径位置比msys64的要前。
4.项目5
错误原因:应该是没有装好bison, 或者bison的路径不正确
解决思路:需要手动安装bison pacman -S bison, 之后别忘了修改Path变量
5. VSCode内调试出现莫名其妙的情况
这是我上课时候翻车遇到的。检查后发现我在Watch中添加了一个函数getToken(), 估计vs为了计算这个函数, 反复去读取缓冲区, 导致后面的都拿不到正确的值了。
修正方法: 把watch中监视的函数删掉。
4. bj平台提示领取任务失败
联系我,然后我会把你移出班级再重新加进来。注意保存已有数据。
(已彻底消灭的问题)
1. 找不到colorama模块
注意: 这个问题已被我通过注释掉test.py中所有用到这个库的语句解决, 所以后面的同学基本上不会遇到。下文仅作留档使用
首先要吐槽的是,这个模块其实根本没有太大作用,只是因为这个平台提供的test脚本为了好看,非要引入这坨东西。
错误原因:有很多可能,这里列举最常见的几个。1.python版本建议在3.8以下,因为理论上这个模块只支持到这个版本。(但事实上有些超出3.8的版本一样可以运行。)2.装了msys之后,里面的python和自己装的冲突了。msys里面的python没有pip,导致一直找不到相关模块。(具体原理有待进一步研究)3.系统装了好几个python,然后script路径也有好几个,也是互相冲突。
解决方案:(一一对应)1.换python。2.移到msys64装python的目录下面,把python移走。3.利用where命令找到当前的默认python路径,然后在它的目录下找到script目录,打开cmd切到这个目录下,再运行pip安装colorama模块。
……持续更新中