Skip to content

Latest commit

 

History

17 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 

Repository files navigation

前言

(💡 点击展开)

四个实验参考这位前辈 PLUS-WAVE 做的,先模了%%%

不过 实验四 的话我目前是没在 公共仓库 找到能完整通过的代码,所以自己写了一下,icoding 是能通过的

以 本仓库 来分享 大二 的 编译原理实验 相关代码

本仓库是 public 的,你可以直接根据下面的 每个实验分支 的描述来提交代码,但最好还是先自己做一做,然后发现什么 corner case 实在过不了的情况下再来参考代码

我就是这样的qwq,因为 icoding 的题目太模糊了,基本都不说清楚,不去看前人代码基本都找不到是哪个样例出了问题

具体的代码解析和原理的话,由于我不想篇幅太长就不说了,想了解原理的话可以适当使用 大模型()

四个代码我都写有 Makefile,想在本地运行的话推荐在 Linux 环境下使用 make 命令(当然 Windows 下也是可以用 Makefile 的,不过要配置一下,具体怎么配置可以自行搜索。不过这样的话可能像 flexbison 这些工具会找不到而报错,所以我还是推荐在 Linux 下进行)

即可以在对应目录(比如 实验1 就是 lab1 目录)下:

  • 编译:make
  • 运行:./xxx

具体的实验会有所不同,下面的 每个实验分支 中会具体说 每个实验 怎么运行和测试


各实验详情

包含 要提交的文件如何进行本地测试

:如果 icoding 出现类似于 undefined%,说明有可能是 icoding 的问题,目前我只能想到等一段时间再交,才有可能解决问题

📚 lab1
  • 提交的文件

    • lex_main.c
    • lex.l
    • token.h
    • 你的文档
  • 本地测试

    • 编译:make

      生成的 lexer 就是 可执行文件

    • 运行测试:

      • 测试样例是题目的:

        • int main(){
              return 3;
          }
      • 命令

        • echo 'int main(){ return 3;}' | ./lexer
📚 lab2
  • 提交的文件

    • rd.c:这个直接复制里面的代码到 代码框,当然我这里除了复制到 代码框,也在提交文件那里交了

    • rdlab2.h

    • 你的文档

  • 本地测试

    • 编译:make

      生成的 parser 就是 可执行文件

    • 运行测试:

      • 测试样例:

        • {
              a = 5;
          }
        • 这里的话目前写的 rd.c 中不支持 int 之类的,所以例子其实就是这么简单

      • 命令

        • ./parser < test.c
📚 lab3
  • 提交的文件

    • ast.c

    • ast.h

    • lrlex.l

    • lrparser.y

    • 你的文档

  • 本地测试

    • 编译:make

      生成的 ast 就是 可执行文件

    • 运行测试:

      • 测试样例是题目的:

        • int main(){
              return 3;
          }
      • 命令

        • ./ast < test.c
📚 lab4
  • 提交的文件

    • ast.c

    • ast.h

    • lrlex.l

    • lrparser.y

    • genllvm.c

    • genllvm.h

    • main.c

    • 你的文档

  • 本地测试

    • 编译:make

      生成的 calc 就是 可执行文件

    • 运行测试:

      • 自动测试
        • 实验四 中其实老师有给 测试样例 的(放在 lab4-test_examplelab4-example),所以我写了一个 check.py 脚本 来测试样例,如果后续要改样例的话可以改 lab4-exampleanswer.lltest.c 的内容,这两个文件是所有样例的整合
        • 运行
          • python check.py
      • 手动测试
        • 也可以利用 calc 来测试:
          • ./calc < test.c

          • 其中 test.c 就是要测试的代码,可以自己写或用 lab4-examplelab4-test_example 里的样例来测试,如 ./calc < lab4-example/00.c

About

电子科技大学编译原理实验

Resources

Stars

18 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages