Java制导软件_GitHub - yaoceyi/JavaCC: JavaCC实现简易编译器
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实现简易编译器相关推荐
- java培训教程分享:Java编写软件代码自动提示功能
本期的java培训教程分享主要是介绍的java编写软件代码的一个自动提示功能,很多零基础和初学java的同学们对这一块还不是很了解,Eclipse for android 实现代码自动提示智能提示功能 ...
- 学Java的软件哪些比较好用
很多java程序猿在工作的时候都会用一些辅助工具,辅助工具可以很好的帮助程序猿高效率的完成工作,那么具体学Java的软件哪些比较好用呢?来看看下面的详细介绍. 学Java的软件哪些比较好用? 1. E ...
- Java Enterprise软件与应有的软件
许多开发人员在其职业生涯的某个阶段最终进入了Java"企业"世界. 我知道这个词会引起各种React,这是正确的. 通常,存在许多有趣的技术挑战的环境最终会成为那些没人愿意从事的环 ...
- Java Enterprise软件与应有的内容
许多开发人员在其职业生涯的某个阶段最终进入了Java"企业"世界. 我知道,仅此一个词就能引起各种反应,这是正确的. 通常,存在许多有趣的技术挑战的环境最终会成为那些没人愿意从事的 ...
- 针对教育和软件行业的多平台Java勒索软件分析
0x01 基本信息 Tycoon是针对Windows®和Linux®的多平台Java勒索软件,至少从2019年12月起就在野外活动,它以木马Java运行时环境(JRE)的形式部署,并利用晦涩的Java ...
- Java学习软件安装详解
Java学习软件安装详解 一直对Java的学习马马虎虎,新换的电脑,在重装java软件时遇到很多问题,安装了半天,想着以后自己也可能用到,所以写下来,以供大家参考. 1.准备工作 我的电脑:windo ...
- java高级软件工程师面试_高级软件工程师的新面试问题
java高级软件工程师面试 I'm putting together some practice interview questions for a friend who lost his job. ...
- java哪个软件编程好学吗_java是什么软件好学吗(java编程用哪个软件)
"工欲善其事必先利其器",想要学好Java编程开发,除了要有好的学习资源之外,还要有一套适合自己的Java编程软件,好的编程软件能极大提高你的学习和工作效率. 那么,Java编程软 ...
- Java培训学习之Java开源软件的汇总
Java开源软件的汇总: EcSplorer [Java开源 Eclipse插件] EcSplorer(Eclipse Simplified Explorer)是一个类似于 Windows Explo ...
最新文章
- 谷歌开放语音命令数据集,助力初学者利用深度学习解决音频识别问题
- 使用直流稳压电源时的注意事项!
- 35张非常精美的爱情桌面壁纸资源(下篇)
- 科大星云诗社动态20210309
- Django从理论到实战(part34)--聚合函数
- 【短语学习】盈余量分析(earned value analysis)
- 协议转换器安全使用须知
- python类与对象 封装继承与多态 0308
- 循环序列模型 —— 1.6 语言模型和序列生成
- 捆网包裹行业调研报告 - 市场现状分析与发展前景预测
- iot行业的流量规律
- How to choose the number oftopics/partitions in a Kafka cluster?
- 【TJOI2019】唱、跳、rap和篮球(DP)(容斥)
- 海外代理ip池购买推荐,易路s5海外ip代理如何提取使用?
- [转载] 白酒基础知识
- 20190408每周精品之理财
- java实现pdf文件下载
- 阿里巴巴客户体验事业群智能客服调度最佳实践
- 接电路要用计算机测试嘛,ZY6502-PC型消防接口、水枪水压性能试验机
- 川大计算机学院夏之畅,菌菌帮推|后生可畏II-01:多才多艺小门神——廖乘枫
热门文章
- 怎么批量创建文件夹并命名?
- abb机器人指令手册_ABB机器人的程序结构与模块属性
- 【VMware vSAN 7.0】5.5 配置 vSAN 集群的许可证设置
- opencv 基本算子,LOG算子-墨西哥草帽算子,canny算子
- 3.1 有界线性算子与有界线性算子空间
- html网页设计作品教材制作,《网页设计与制作》网页-教材-制作.pdf
- 卫星定位与导航相关知识的整理
- JAVAWEB使用JSP+Servlet实现商品管理功能,后台为数据库,功能包括商品信息浏览、商品信息详情、商品信息删除及修改。
- java 实现逆波兰表达式_逆波兰表达式java实现
- 在 Spring Boot 中使用 HikariCP 连接池