JavaCC

Mnc-javacc

简单语法器

功能要求

用流的形式读入要分析的MiniC源程序。

能够根据单词的构词规则,完成MiniC语言中的单词的解析(词法分析),如果不符合单词的构词规则,请给出错误信息。如果源语言符合单词的词法规则,请输出二元式。(注:利用JavaCC实现)

在词法分析的基础上,构造MiniC的递归下降分析文法,利用JavaCC实现递归下降分析文法。判断源语言是否符合MiniC的语法,如果符合,输出语法树;否则,请给出语法错误信息。

在语法分析的基础上,根据属性文法制导翻译,进行语义分析,输出四元式。如果源语言不符合MiniC的语义,请指出错误信息。

在平时实习课的基础上,整个编译系统要能够翻译声明语句、数组(二维,多维)翻译,数学表达式、关系表达式、布尔表达式,if-else, for, while,do-while,switch-case,赋值等语句嵌套的分析与翻译。

实现符号表,并能够检查变量重复声明、使用时未定义错误。

实现扩展内容:

扩展内容:可以考虑多个函数及函数调用翻译。

扩展内容:可以添加功能,如break、continue、return语句、一维指针。

扩展内容:可以检查赋值精度错误、函数参数类型不匹配错误、静态数组元素下标越界错误、break错误、continue错误等。

扩展内容:为编译器添加界面。

实现的功能

(1) 采用流的形式读入要分析的MiniC源程序。

(2) 编写一个简单的编译器界面来对成果进行展示。

(3) 实现词法分析和语法分析,并将其结果输出到文件。

(4) 实现语义分析,主要有:声明语句、数学表达式、关系表达式。

(5) 实现if-else, for, while,do-while,switch-case,赋值等语句嵌套的分析与翻译。

(6) 实现符号表,能检查变量的重复声明,使用时未定义错误。

界面展示

设计思路

文法设计

命名:

程序:Program

语句块:StateBlock

语句:Statement

条件语句:ifStatement

switch语句:SwtichStatement

while语句:whileStatement

dowhile语句:dowhileStatement

for语句:forStatement

自增自减语句:Auto

声明语句:declearStatement

赋值语句:assignStatement

类型:Type

表达式:Expression

非运算:NoBoolExpression

或运算:orStatement

与运算:andStatement

运算符:Operator

关系符:relExpresion

###文法:

::= main_fun "(" ( ID)* ")"

::= | { }

::= | | | |||

::= ID (0,ID)*

-> int | void | double | float | char|string

-> ID =

-> break

::=” if ( ” ” ) ” ” { ”” } ” [ “ else ” ]

::=” while ( ” ” ) ” ” { ”” } ”

::=” do { ” ” } ” “ while ”

::=” for ( ” ” ) ” ” { ”” } ”

::= |

::= { ”||” }

::= { ”&&” }

::= “ ! ”

::= [ (“ > ”| “ < ”| “ >=” | “ <=” | “ == ” | “ != ” ) ]

测试文件

test1

int main(){

int grade=0,flag=0;

int num1=0,num2=0;

if(grade>60)

flag=1;

else

flag=0;

switch(flag){

case 1:num1=num1+1;break;

default:

num2=num2+1;

}

}

test2

int main(){

int n=10;

int m=0;

int a=1,b=2;

for(int i=0;i

if(b

while(b

Java制导软件_GitHub - yaoceyi/JavaCC: JavaCC实现简易编译器相关推荐

  1. java培训教程分享:Java编写软件代码自动提示功能

    本期的java培训教程分享主要是介绍的java编写软件代码的一个自动提示功能,很多零基础和初学java的同学们对这一块还不是很了解,Eclipse for android 实现代码自动提示智能提示功能 ...

  2. 学Java的软件哪些比较好用

    很多java程序猿在工作的时候都会用一些辅助工具,辅助工具可以很好的帮助程序猿高效率的完成工作,那么具体学Java的软件哪些比较好用呢?来看看下面的详细介绍. 学Java的软件哪些比较好用? 1. E ...

  3. Java Enterprise软件与应有的软件

    许多开发人员在其职业生涯的某个阶段最终进入了Java"企业"世界. 我知道这个词会引起各种React,这是正确的. 通常,存在许多有趣的技术挑战的环境最终会成为那些没人愿意从事的环 ...

  4. Java Enterprise软件与应有的内容

    许多开发人员在其职业生涯的某个阶段最终进入了Java"企业"世界. 我知道,仅此一个词就能引起各种反应,这是正确的. 通常,存在许多有趣的技术挑战的环境最终会成为那些没人愿意从事的 ...

  5. 针对教育和软件行业的多平台Java勒索软件分析

    0x01 基本信息 Tycoon是针对Windows®和Linux®的多平台Java勒索软件,至少从2019年12月起就在野外活动,它以木马Java运行时环境(JRE)的形式部署,并利用晦涩的Java ...

  6. Java学习软件安装详解

    Java学习软件安装详解 一直对Java的学习马马虎虎,新换的电脑,在重装java软件时遇到很多问题,安装了半天,想着以后自己也可能用到,所以写下来,以供大家参考. 1.准备工作 我的电脑:windo ...

  7. java高级软件工程师面试_高级软件工程师的新面试问题

    java高级软件工程师面试 I'm putting together some practice interview questions for a friend who lost his job. ...

  8. java哪个软件编程好学吗_java是什么软件好学吗(java编程用哪个软件)

    "工欲善其事必先利其器",想要学好Java编程开发,除了要有好的学习资源之外,还要有一套适合自己的Java编程软件,好的编程软件能极大提高你的学习和工作效率. 那么,Java编程软 ...

  9. Java培训学习之Java开源软件的汇总

    Java开源软件的汇总: EcSplorer [Java开源 Eclipse插件] EcSplorer(Eclipse Simplified Explorer)是一个类似于 Windows Explo ...

最新文章

  1. 谷歌开放语音命令数据集,助力初学者利用深度学习解决音频识别问题
  2. 使用直流稳压电源时的注意事项!
  3. 35张非常精美的爱情桌面壁纸资源(下篇)
  4. 科大星云诗社动态20210309
  5. Django从理论到实战(part34)--聚合函数
  6. 【短语学习】盈余量分析(earned value analysis)
  7. 协议转换器安全使用须知
  8. python类与对象 封装继承与多态 0308
  9. 循环序列模型 —— 1.6 语言模型和序列生成
  10. 捆网包裹行业调研报告 - 市场现状分析与发展前景预测
  11. iot行业的流量规律
  12. How to choose the number oftopics/partitions in a Kafka cluster?
  13. 【TJOI2019】唱、跳、rap和篮球(DP)(容斥)
  14. 海外代理ip池购买推荐,易路s5海外ip代理如何提取使用?
  15. [转载] 白酒基础知识
  16. 20190408每周精品之理财
  17. java实现pdf文件下载
  18. 阿里巴巴客户体验事业群智能客服调度最佳实践
  19. 接电路要用计算机测试嘛,ZY6502-PC型消防接口、水枪水压性能试验机
  20. 川大计算机学院夏之畅,菌菌帮推|后生可畏II-01:多才多艺小门神——廖乘枫

热门文章

  1. 怎么批量创建文件夹并命名?
  2. abb机器人指令手册_ABB机器人的程序结构与模块属性
  3. 【VMware vSAN 7.0】5.5 配置 vSAN 集群的许可证设置
  4. opencv 基本算子,LOG算子-墨西哥草帽算子,canny算子
  5. 3.1 有界线性算子与有界线性算子空间
  6. html网页设计作品教材制作,《网页设计与制作》网页-教材-制作.pdf
  7. 卫星定位与导航相关知识的整理
  8. JAVAWEB使用JSP+Servlet实现商品管理功能,后台为数据库,功能包括商品信息浏览、商品信息详情、商品信息删除及修改。
  9. java 实现逆波兰表达式_逆波兰表达式java实现
  10. 在 Spring Boot 中使用 HikariCP 连接池