Code Monkey home page Code Monkey logo

compiler-work's Introduction

编译原理实验项目

限制

本项目仅限山东大学软件学院高老师的编译原理课,其他老师出的实验可能并不一样。本项目基于PL/0的部分语法开发,并没有支持if...else语句,支持的全部产生式见所有产生式

设计方案

词法分析实验利用DFA完成对词法的匹配,然后利用字典树为关键字和运算符附上SymbolId,最终输出TerminalSymbol数组以及两个没用的NUM数组和ID数组(实验要求)。

语法制导翻译实验利用LL1预测器进行语法分析,并结合回填技术完成一次扫描翻译。LL1预测器由一套类似yacc的模块构建,模块接收一组符合LL1文法的产生式(Production),产生式的构建依赖提前定义好的一套抽象终结符和非终结符(LiteralTerminalSymbolLiteralNonTerminalSymbol)。抽象非终结符类允许覆盖匹配失败时返回错误信息的方法getMismatchMessage,对于带有综合属性的非终结符,允许覆盖返回继承NonTerminalSymbol的类实例的方法toNonTerminalSymbol。产生式可以附加一套语法规则,语法规则在预测器规约过程被调用,语法规则函数可以得到产生式左侧、右侧的符号对象,从而操作产生是左侧非终结符的综合属性,还能操作ParsingEnv中的符号表、代码表和标识符暂存区,在预测的同时完成翻译过程。

解释器实验需要完成一个仅通过栈分配空间、利用栈完成计算的笨蛋虚拟机,呃……好像没什么好介绍的,整个包里也就四个类,也就封装了下,没用什么奇怪的东西。

项目结构

src
├── org
│   └── wzhqwq
│       ├── enums (存放所有的枚举类型以及一个无处安放的Symbol类)
│       ├── exception (存放所有的处理异常,写得不是很完善)
│       ├── lexical (文法分析)
│       │   ├── dfa (所有基于DFA的匹配器)
│       │   ├── symbol (所有的终结符类)
│       │   └── trie (所有基于字典树的匹配器,会返回对应的终结符类)
│       ├── syntax (语法制导翻译)
│       │   ├── parser (所有与语法制导翻译过程相关的类)
│       │   ├── production (产生式及其相关的类)
│       │   │   └── literal (支持抽象符号的类)
│       │   └── symbol (所有的非终结符类)
│       ├── util (里面只有一个代码读入模拟类,里面还提供了有bug的错误打印功能)
│       └── vm (解释器部分,不复杂)
└── resources (可以存点待读入的代码,但这功能我没写)

怎么跑

运行后,输入PL/0代码,然后敲一个$表示代码结束,如果没有语法错误,程序会开始执行,输入读入的数据,程序运行完成会自动退出。

compiler-work's People

Contributors

wzhqwq avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.