Skip to content

针对可视化实验平台实现小型编译器

Notifications You must be signed in to change notification settings

nicahead/compiler

Repository files navigation

compiler

针对可视化实验平台实现小型编译器

about:

  • 老师提供了一个基于OpenGL的可视化实验平台,是一个可以画图的点阵,可通过在命令行中输入该平台定义的指令进行操作

  • 准备工作:设计语法规则(包括四则运算,while循环,if-else,平台基本命令),根据规则编写源程序。

  • 编译器处理源程序:

    • 使用flex进行词法分析,在flex的描述文件中使用正则表达式定义每一类词法单元的规则,生成一个lex.yy.c的c文件,lex.yy.c中包含一个核心函数yylex(),它是一个扫描子程序,读入源程序的字符流,识别并返回下一个单词符号。
    • 使用bison进行语法分析和语义计算。bison读入用户编写的描述文件(在描述文件中,描述了一个基于S-翻译模式的自底向上语义计算)读取用户提供的语法的产生式,生成一个 C 语言格式的LALR(1) 动作表,并将其包含进一个名为 yyparse 的 C 函数,这个函数的作用就是利用这个动作表来解析 token stream ,而这个 token stream 是由flex生成的词法分析器扫描源程序得到, 在语法分析的同时进行语义翻译,执行扩展函数,在内存中构造一棵可递归的语法树。在归并到stmt时,进行遍历处理,对语法树解释分析。使用一个递归函数exeNode,首先分树结点类型,再根据操作符一一判定动作生成中间代码。
  • 生成的中间代码是一些该平台的基本指令,将这些指令存到目标文件。

  • 平台读取目标文件,在该平台上运行,能看到源程序想要实现的效果,绘制图案和一些平移旋转缩放等效果

运行方法:

将dll-lib中的文件拷贝到C:\Windows\SysWOW64 (win10 64位),双击运行run.bat,输入指令:file 即可运行编译source_code.txt中的源代码,生成中间代码写入paint.txt,并在该平台执行

About

针对可视化实验平台实现小型编译器

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages