# C-like-Compiler
类C语言编译器demo。<br/>
定义的类C语言支持基本数据类型、类型定义、I/O、if语句、while循环、for循环、结构体、函数、注释等多种元素。<br/>
编译器实现了词法分析器、递归下降法语法分析器、LL(1)语法分析器、语义分析等功能。<br/><br/>
## 输入输出
输入文件:F:\mySource.bxc<br/>
输出文件:F:\LineList.txt 和 F:\TokenList.txt<br/>
## 编译器识别语言
### 总述
<p style="margin: 8px 0px 13.33px 24px; text-indent: 18pt;"><span style="margin: 0px; font-family: " 微软雅黑",sans-serif;"=""><font color="#595959" size="2">实验采用的<span lang="EN-US" style="margin: 0px;">BXC</span>语言为自行定义的模型语言,它是一种类<span lang="EN-US" style="margin: 0px;">C</span>的高级程序设计语言。<span lang="EN-US" style="margin: 0px;">BXC</span>语言的数据结构比较丰富,除了整型、字符型等简单数据类型外,还有数组、结构体等结构数据类型,函数不支持嵌套定义,但允许递归调用。事实上,<span lang="EN-US" style="margin: 0px;">BXC</span>语言基本上包含了高级程序设计语言的所有常用的成分。</font><span lang="EN-US" style="margin: 0px;"></span></span></p>
<p style="margin: 8px 0px 13.33px 24px; text-indent: 18pt;"><font size="2"><font color="#595959"><span lang="EN-US" style="margin: 0px; font-family: " 微软雅黑",sans-serif;"="">BXC</span><span style="margin: 0px; font-family: " 微软雅黑",sans-serif;"="">语言的一个特点为主函数必须是程序的最后一个函数,并且不能缺省。可以改进的方向有函数不必带返回值,检测<span lang="EN-US" style="margin: 0px;">return</span>语句使用的正确性,等等。<span lang="EN-US" style="margin: 0px;"></span></span></font></font></p>
### 举例
<p style="margin: 8px 0px 13.33px 24px; text-indent: 18pt;"><span style="margin: 0px; font-family: " 微软雅黑",sans-serif;"=""><font size="2"><font color="#595959">类型声明:<span lang="EN-US" style="margin: 0px;">typedef<span style="margin: 0px;"> </span>TypeName <span style="margin: 0px;"> </span>int ;</span></font></font></span></p>
<p style="margin: 8px 0px 13.33px 24px; text-indent: 18pt;"><span style="margin: 0px; font-family: " 微软雅黑",sans-serif;"=""><font size="2"><font color="#595959">数组声明:<span lang="EN-US" style="margin: 0px;">int[10]<span style="margin: 0px;"> </span>VarName ;</span></font></font></span></p>
<p style="margin: 8px 0px 13.33px 24px; text-indent: 18pt;"><span style="margin: 0px; font-family: " 微软雅黑",sans-serif;"=""><font size="2"><font color="#595959">结构体声明:<span lang="EN-US" style="margin: 0px;">struct<span style="margin: 0px;"> </span>StructName {</span></font></font></span></p>
<p style="margin: 8px 0px 13.33px 24px; text-indent: 18pt;"><font size="2"><font color="#595959"><span lang="EN-US" style="margin: 0px; font-family: " 微软雅黑",sans-serif;"=""><span style="margin: 0px;"> </span>int<span style="margin: 0px;">
</span>VarName1 ;<span style="margin: 0px;"> </span>/*</span><span style="margin: 0px; font-family: " 微软雅黑",sans-serif;"="">注释:变量声明<span lang="EN-US" style="margin: 0px;">*/</span></span></font></font></p>
<p style="margin: 8px 0px 13.33px 24px; text-indent: 18pt;"><span lang="EN-US" style="margin: 0px; font-family: " 微软雅黑",sans-serif;"=""><font size="2"><font color="#595959"><span style="margin: 0px;"> </span>char VarName2 ;</font></font></span></p>
<p style="margin: 8px 0px 13.33px 24px; text-indent: 18pt;"><span lang="EN-US" style="margin: 0px; font-family: " 微软雅黑",sans-serif;"=""><font size="2"><font color="#595959"><span style="margin: 0px;"> </span><span style="margin: 0px;">
</span>}<span style="margin: 0px;"> </span>StructVarName ;</font></font></span></p>
<p style="margin: 8px 0px 13.33px 24px; text-indent: 18pt;"><span style="margin: 0px; font-family: " 微软雅黑",sans-serif;"=""><font size="2"><font color="#595959">函数声明:<span lang="EN-US" style="margin: 0px;">int<span style="margin: 0px;"> </span>main () { return 0 ; }<span style="margin: 0px;"> </span>/* </span>返回语句<span lang="EN-US" style="margin: 0px;"> */</span></font></font></span></p>
<p style="margin: 8px 0px 13.33px 24px; text-indent: 18pt;"><font size="2"><font color="#595959"><span style="margin: 0px; font-family: " 微软雅黑",sans-serif;"="">输出语句:<span lang="EN-US" style="margin: 0px;">cout </span></span><span lang="EN-US" style="margin: 0px;"><font face="Constantia"><< </font></span><span lang="EN-US" style="margin: 0px; font-family: " 微软雅黑",sans-serif;"="">Expression
;<span style="margin: 0px;"> </span></span><span style="margin: 0px; font-family: " 微软雅黑",sans-serif;"="">输入语句:<span lang="EN-US" style="margin: 0px;">cin </span></span><span lang="EN-US" style="margin: 0px;"><font face="Constantia">>></font></span><span lang="EN-US" style="margin: 0px; font-family: " 微软雅黑",sans-serif;"="">
VarName ;</span></font></font></p>
## 语言的词法
### 字符表
<p style="margin: 8px 0px 13.33px 24px; text-indent: 18pt;"><font size="2"><font color="#595959"><span style="margin: 0px; font-family: 华文新魏;">字符表</span><font face="Constantia">
<span lang="EN-US" style="margin: 0px;"><span style="margin: 0px;"> </span></span></font><span lang="EN-US" style="margin: 0px; font-family: 宋体;"><span style="margin: 0px;"> </span>a|b|c|d|e|f|g|h|i|j|k|l|m|n|o|p|q|r|s|t|u|v|w|x|y|z|</span></font></font></p>
<p style="margin: 8px 0px 13.33px 24px;"><span lang="EN-US" style="margin: 0px;"><font size="2"><font color="#595959"><font face="Constantia"><span style="margin: 0px;"> </span><span style="margin: 0px;"> </span>A|B|C|D|E|F|G|H|I|J|K|L|M|N|O|P|Q|R|S|T|U|V|W|X|Y|Z|</font></font></font></span></p>
<p style="margin: 8px 0px 13.33px 24px;"><span lang="EN-US" style="margin: 0px; font-family: 宋体;"><span style="margin: 0px;"> </span><font size="2"><font color="#595959"><span style="margin: 0px;"> </span><span style="margin: 0px;"> </span>0|1|2|3|4|5|6|7|8|9|</font></font></span></p>
<p style="margin: 8px 0px 13.33px 24px;"><font size="2"><font color="#595959"><span lang="EN-US" style="margin: 0px; font-family: 宋体;"><span style="margin: 0px;"> </span><span style="margin: 0px;"> </span><span style="margin: 0px;"> </span>+|-|*|/|<|>|=|(|)|[|]|{|}|.|,|;|'|EOF|</span><span style="margin: 0px; font-family: 宋体;">空白<span lang="EN-US" style="margin: 0px;"></span></span></font></font></p>
<p style="margin: 8px 0px 13.33px 24px; text-indent: 18pt;"><span style="margin: 0px; font-family: 宋体;"><font color="#595959" size="2">注:符号<span lang="EN-US" style="margin: 0px;">EOF</span>在程序中由符号<span lang="EN-US" style="margin: 0px;">#</span>实现;英文字母区分大小写;保留字只能由小写字母组成。</font><span lang="EN-US" style="margin: 0px;"></span></span></p>
## 语言的语法
### 文法符号
<div style="margin: 8px 0px 13.33px 48px; text-indent: 0cm;"><span style="margin: 0px; font-family: " 微软雅黑",sans-serif;"=""><font color="#595959" size="2"><span lang="EN-US" style="margin: 0px;">BXC</span>语言的<span lang="EN-US" style="margin: 0px;">LL</span>(<span lang="EN-US" style="margin: 0px;">1</span>)文法共有<span lang="EN-US" style="margin: 0px;">60</span>个非终极符。</font></span></div>
<p style="margin: 8px 0px 13.33px 48px;"><span style="margin: 0px;
没有合适的资源?快使用搜索试试~ 我知道了~
C-like-Compiler:类C语言编译器demo,支持基本数据类型、类型定义、IO、if语句、while循环、for循环、...
共45个文件
class:35个
java:5个
txt:2个
1星 需积分: 34 3 下载量 7 浏览量
2021-04-30
17:13:21
上传
评论
收藏 121KB ZIP 举报
温馨提示
C-like-Compiler 类C语言编译器demo。 定义的类C语言支持基本数据类型、类型定义、I/O、if语句、while循环、for循环、结构体、函数、注释等多种元素。 编译器实现了词法分析器、递归下降法语法分析器、LL(1)语法分析器、语义分析等功能。 输入输出 输入文件:F:\mySource.bxc 输出文件:F:\LineList.txt 和 F:\TokenList.txt 编译器识别语言 总述 实验采用的BXC语言为自行定义的模型语言,它是一种类C的高级程序设计语言。BXC语言的数据结构比较丰富,除了整型、字符型等简单数据类型外,还有数组、结构体等结构数据类型,函数不支持嵌套定义,但允许递归调用。事实上,BXC语言基本上包含了高级程序设计语言的所有常用的成分。 BXC语言的一个特点为主函数必须是程序的最后一个函数,并且不能缺省。可以改进的方向有函数不必带返回值,检测re
资源详情
资源评论
资源推荐
收起资源包目录
C-like-Compiler-master.zip (45个子文件)
C-like-Compiler-master
bin
WSL
Analyze$AttributeIR.class 731B
Analyze$AttributeIR$Attr.class 830B
Analyze$AttributeIR$Attr$VarAttr.class 597B
Analyze$ArrayAttr.class 519B
Analyze$SymbTable.class 597B
Analyze$TypeKind.class 1KB
Analyze$TypeIR$Attr.class 884B
Analyze$AttributeIR$Attr$FuncAttr.class 830B
Analyze.class 21KB
Analyze$IdKind.class 1KB
Analyze$ParamTable.class 493B
Analyze$FieldChain.class 539B
Analyze$TypeIR.class 745B
BXC
Global$treeNode$Attr.class 976B
Global$treeNode$Attr$ExpAttr.class 820B
Global$NodeKind.class 1KB
Global$treeNode.class 1KB
Global$reservedWord.class 614B
Global$treeNode$Attr$ArrayAttr.class 644B
Token.class 426B
Global$treeNode$Kind.class 701B
Global$DecKind.class 1KB
Global$ExpKind.class 1KB
Global$NLexType.class 4KB
Scanner.class 8KB
Global$treeNode$Attr$FuncAttr.class 623B
ParseLL1.class 25KB
Global$LexType.class 3KB
Global$StmtKind.class 1KB
Global$StateType.class 2KB
Parse.class 25KB
Global$ExpType.class 1KB
Global$VarKind.class 1KB
Global.class 23KB
ParseLL1$StackNode.class 611B
TokenList.txt 4KB
mySource.bxc 804B
LL1分析矩阵.xlsx 16KB
src
WSL
Analyze.java 33KB
BXC
Global.java 43KB
ParseLL1.java 31KB
Parse.java 34KB
Scanner.java 19KB
README.md 31KB
LineList.txt 8KB
共 45 条
- 1
观察社
- 粉丝: 25
- 资源: 4689
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 技术资料分享TF卡资料很好的技术资料.zip
- 技术资料分享TF介绍很好的技术资料.zip
- 10、安徽省大学生学科和技能竞赛A、B类项目列表(2019年版).xlsx
- 9、教育主管部门公布学科竞赛(2015版)-方喻飞
- C语言-leetcode题解之83-remove-duplicates-from-sorted-list.c
- C语言-leetcode题解之79-word-search.c
- C语言-leetcode题解之78-subsets.c
- C语言-leetcode题解之75-sort-colors.c
- C语言-leetcode题解之74-search-a-2d-matrix.c
- C语言-leetcode题解之73-set-matrix-zeroes.c
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论1