没有合适的资源?快使用搜索试试~ 我知道了~
编译原理课程设计报告(各大类都有)
4星 · 超过85%的资源 需积分: 10 37 下载量 167 浏览量
2009-01-13
11:35:36
上传
评论 2
收藏 3.97MB DOC 举报
温馨提示
试读
22页
编译原理课程设计报告,中间代码生成,词法分析,LL1语法判断,算符优先文法,LR分析程序设计
资源推荐
资源详情
资源评论
编译原理课程设计报告
软件学院
05
级
学号: 20054451
姓名:辛华
时间: 2007
年
7
月
25
日
一、词法分析
1、实验目的
编程实现词法分析程序,加深理解对词法分析原理。
2、实验要求
a、识别出特殊符号(用顿号隔开),如 = 、+ 、- 、* 、/ 、< 、>、<= 、 >= 、== 、!
= 、;、 :、 , 、{ 、}、 [、 ]、 ( 、)等
b、识别出关键字,如 if;then;while;do;end;for 等
c、识别其它标记 ID 和 NUM,并通过以下正规式定义其他标记:
ID -> letter ( letter | digit )
letter -> a | b ... | z | A |B ... | Z
NUM -> digit digit*
digit -> 0 | 1 ... | 9
3、算法思路:
本程序每次判断均连续输入几个的词,不同的词之间用“空格”隔开,因为所输入的字
符串中含有“空格”,故在输入的时候启用文本监视器,利用字符串解析器扫描所输入的字
符串,以逗号,空格,分号分开,以 java.util 包中的 模式匹配生成文法和保留字
对每个 token 进行分析,测试其匹配的模式,把它们区分开来
4、程序流程图
主程序流程图
N
Y
出错
是否输入结束字
符?
输出判断结果
子程序扫描
置 初 值
开 始
扫描程序流程图
N
Y
Y
N
Y
N
Y
N
Y
N
5.运行环境 JDK6.0
实验二:LL1 语法判断
一、 实验目要求:
开 始
往下个字符扫描
输出判断结果
是否关键字?
是否是结束字
符?
把 产 生 式 右
部反序进栈
结 束
把 ’ #’
和 文 法
开始符压入分
是否数字?
是否空格?
自定义一个文法集,输入文法产生式,计算文法的 FIRST,FOLLOW 和 SELECT
集合,
利用 SELECT 集合构造预测分析表,接着用预测分析程序,栈 和预测分析表对输入串进行
分析,给出分析过程。
二、设计思想:
设计算法实现:
(1)求 FIRST 集(用关系图法)
(a)每个文法符号对应图中一个结点。
(b)如果文法中有产生式 A®αXβ,且 α =>* ε,则从对应 A 的结点到对应 X 的结点
连一条箭弧。
(c)凡是从 FIRST(A)的结点有路径可到达的终结符结点所标记的终结符都为
FIRST(A 的成员。
(d)判定 ε 是否为某非终结符 FIRST 集的成员,若是则将加入该非终结符的 FIRST
集中。
(2)求 FOLLOW 集
对于 G 中的每一 A∈VN,为构造 FOLLOW(A),可反复使用如下的规则,直到
每个 FOLLOW 集不再增大为止。
(a) 对于文法的开始符号 S,令#∈FOLLOW(S)。
(b) 对于每一 A→αBβ∈P,令 FIRST(β)-{ε} = FOLLOW(B)。
(c) 对 于 每 一 A→αB∈P 或 A→αBβ∈P , 且 ε∈FIRST ( β ) , 则 令
FOLLOW(A) FOLLOW(B)。
(3)求 SELECT 集
若 α≠>*ε,则
SELECT(A→α)=FIRST(α)
若 α=>*ε,则
SELECT(A→α)=(FIRST(α)-{ε})∪FOLLOW(A)
三、程序的详细分析过程及相应说明
预测分析程序工作过程:
上托栈顶符放入X
N
Y
Y
N
N
N
N
Y
Y
把 ’ #’ 和 文 法 开 始 符 压 入 分 析
栈; 当前输入符送 a
把 产 生 式 右 部
反序进栈
X∈V
T
?
X=’#’ ?
X=a ?
X=a?
读下一输入
符到a
M[X,a] 有 产 生
式?
出错
结束
出错
Y
四、程序结构
(一)程序中的主要变量和存储结构说明
(1)主要变量
char nontermina[FZJ_NUM]={'E','D','T','S','F'} /* 文法的非终结符集*/;
char termina[ZJF_NUM]={'i','+','*','(',')','#','$'}; /* 文法的终结符集*/;
char vocab[ALL_NUM]={'E','D','T','S','F','i','+','*','(',')','#','$'} /* 文法的单词表*/
production *expression[20]; /* 存储产生式 */
firfol fstfow[10]; /* 存储非终结符的 FIRST 集, FOLLOW 集*/
char nonrecycle;
int recyclenum; /* 用来控制不出现重复计算同一个字符的 FOLLOW 集*/
(2)存储结构
/*---------------------------单链表--------------------------------*/
typedef struct firstnode
{
char value;
struct firstnode *next;
}firstset;
/*---------------------------产生式,存有 SELECT--------------------------------*/
typedef struct
{
char source;
char result[10];
firstset *selects;
}production;
上托栈顶符放入X
N
Y
Y
N
N
N
N
Y
Y
把 ’ #’ 和 文 法 开 始 符 压 入 分 析
栈; 当前输入符送 a
把 产 生 式 右 部
反序进栈
X∈V
T
?
X=’#’ ?
X=a ?
X=a?
读下一输入
符到a
M[X,a] 有 产 生
式?
出错
结束
出错
预测分析程序工作过程
Y
剩余21页未读,继续阅读
chenlongjom
- 粉丝: 1
- 资源: 7
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
- 1
- 2
前往页