跪求原理实验源码 !!!!!!!!!!用LEX 、bison实现词法分析、语法分析以及生成中间代码

J5175 2011-06-17 01:15:09
词法分析
一、实验目的
设计、编制并调试一个C语言子集的LEX源程序,采用自动生成工具LEX生成该C语言子集的词法分析程序——C源代码文件,编译产生可执行程序,并运行、调试。
二、实验要求
待分析的C语言子集的词法
A、 关键字
main
if
else
int
return
void
while
B、 专用符号
= + - * /
< <= > >= ==
!= ; : , (
) [ ] { }

C、 其他标记ID和NUM
通过以下正规式定义其他标记:
IDENT ->letter (letter|digit)*
NUMBER ->digit digit*
Letter->a | … | z | A | … | Z
Digit -> 0 | … | 9
D、 空格由空白、制表符和换行符组成
空格一般用来分隔ID、NUM、专用符号和关键字,词法分析阶段通常被忽略。



C子集 文法
1 概述
本项目的目的是生成一个用于教学的示例性质的C语言编译器,标准的C文法比较复杂,而本编译器采用的是经过裁剪的C子集文法,具有基本运算、循环、分支和输入、输出功能。
2 文法
<加法运算符>::= +|-
<乘法运算符>::= * |/
<关系运算符>::= <|<=|>|>=|!=|==
<字符>::= _|a|...|z|A|...|Z
<数字>::= 0|<非零数字>
<非零数字>::= 1|...|9
<字符串>::= "{<合法字符> }" //字符串中可以出现所有合法的可打印字符集中的字符
<程序>::= [<常量说明部分>][<变量说明部分>]{<子函数定义部分>}<主函数>
<常量说明部分>::= const<常量定义>{,<常量定义>};
<常量定义>::= <标识符>=<整数>
<整数>::= [+|-]<非零数字>{<数字>}|0
<标识符>::= <字符>{<字符>|<数字>}
<声明头部>::= int <标识符>
<变量说明部分>::= <声明头部>{,<标识符>};
<子函数定义部分>::= (<声明头部>|void <标识符>)<参数><复合语句>
<复合语句>::= ‘{’[<常量说明部分>][<变量说明部分>]<语句序列>‘}’
<参数>::= ‘(‘<参数表>‘)’
<参数表>::=int<标识符>{,int<标识符>} | <空>
<主函数>::=void main’(‘‘)’<复合语句>
<表达式>::=[+|-]<项>{<加法运算符><项>}
<项>::=<因子>{<乘法运算符><因子>}
<因子>::=<标识符>|’(‘<表达式>‘)’|<整数>|<子函数调用语句>
<语句>::=<条件语句>|<循环语句>|’{‘<语句序列>‘}’|<子函数调用语句>;|
<赋值语句>; | <返回语句>;|<读语句>;|<写语句>;|;
<赋值语句>::= <标识符>=<表达式>
<条件语句>::= if’(‘<条件>‘)’<语句>[else<语句>]
<条件>::= <表达式><关系运算符><表达式>|<表达式>
<循环语句>::= while’(‘<条件>‘)’<语句>
<子函数调用语句>::= <标识符>‘(‘<值参数表>‘)’
<值参数表>::= <表达式>{,<表达式>}|<空>
<语句序列>::= <语句>{<语句>}
<读语句>::= scanf’(‘<标识符>‘)’
<写语句>::= printf’(‘<字符串>,<表达式 >|<字符串>|<表达式 >‘)’
<返回语句>::= return [ ‘(‘<表达式>‘)’]
...全文
664 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2013-05-24
  • 打赏
  • 举报
回复
想当年,偶做编译原理上机题的时候,还帮辅导老师纠正了一处隐藏很深的错误呢。
wr1992z 2013-05-24
  • 打赏
  • 举报
回复
有答案了吗?求帮忙呀。帮我发一份吧529991657@qq.com
hugett 2013-05-24
  • 打赏
  • 举报
回复
网上大把。。自己搜一下吧。。
qingcairousi 2011-07-18
  • 打赏
  • 举报
回复
我艹,这个题目基本上最困难的部分都给你写好了,连把题目转换为代码都不会么?你编译原理怎么学的?还是自己做作业吧,学好编译原理很重要的。
naturemickey 2011-06-30
  • 打赏
  • 举报
回复
我正在学习编译,不过没打算用flex和bison,打算一切都自己写。
现在刚刚写完词法分析。

http://naturemickey.blog.chinaunix.net
恨天低 2011-06-17
  • 打赏
  • 举报
回复
编译原理作业帖!
网上搜索下一些例子代码!看看,改改他们的就可以了!
华中科技大学 编译原理 面向过程的C语言的编译器设计 功能包括:词法分析语法分析、语义分析、中间代码生成源码 题目:c--语言编译器设计与实现(请为自己的编译器命名) 源语言定义:或采用教材中Decaf语言,或采用C语言(或C++语言或C#语言或JAVA语言)部分关键语法规则。源语言要求至少包含的语言成分如下: 数据类型至少包括char类型、int类型和float类型 基本运算至少包括算术运算、比较运算、自增自减运算和复合赋值运算 控制语句至少包括if语句和while语句 实验内容:完整可运行的自定义语言编译器 实验一:词法语法分析器的设计与实现:建议使用词法语法生成工具如:LEX/FLEX ,YACC/BISON等专业工具完成。 实验二:符号表的设计与属性计算:设计符号表数据结构和关键管理功能。动态展现符号表变化过程。无论语法分析使用工具还是自己设计,都必须对符号表进行设计和管理,属性计算可以语义子程序实现实验三:语义分析和中间代码生成生成抽象语法树,进行语义分析,实现类型检查和控制语句目标地址计算,生成中间代码中间代码的形式可以采用不同形式,但实验中要求定义自己的中间形式。 实验四:目标代码生成:在前三个实验的基础上实现目标代码生成。也可以使用工具如LLVM来生成目标代码。

3,882

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 其它技术问题
社区管理员
  • 其它技术问题社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧