编译原理课程设计报告Word文档下载推荐.docx

上传人:b****2 文档编号:14869668 上传时间:2022-10-25 格式:DOCX 页数:23 大小:377.82KB
下载 相关 举报
编译原理课程设计报告Word文档下载推荐.docx_第1页
第1页 / 共23页
编译原理课程设计报告Word文档下载推荐.docx_第2页
第2页 / 共23页
编译原理课程设计报告Word文档下载推荐.docx_第3页
第3页 / 共23页
编译原理课程设计报告Word文档下载推荐.docx_第4页
第4页 / 共23页
编译原理课程设计报告Word文档下载推荐.docx_第5页
第5页 / 共23页
点击查看更多>>
下载资源
资源描述

编译原理课程设计报告Word文档下载推荐.docx

《编译原理课程设计报告Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《编译原理课程设计报告Word文档下载推荐.docx(23页珍藏版)》请在冰豆网上搜索。

编译原理课程设计报告Word文档下载推荐.docx

then;

while;

do;

end;

for等

c、识别其它标记ID和NUM,并通过以下正规式定义其他标记:

ID->

letter(letter|digit)

letter->

a|b...|z|A|B...|Z

NUM->

digitdigit*

digit->

0|1...|9

3、算法思路:

本程序每次判断均连续输入几个的词,不同的词之间用“空格”隔开,因为所输入的字符串中含有“空格”,故在输入的时候启用文本监视器,利用字符串解析器扫描所输入的字符串,以逗号,空格,分号分开,以java.util包中的模式匹配生成文法和保留字

对每个token进行分析,测试其匹配的模式,把它们区分开来

4、程序流程图

主程序流程图

N

Y

扫描程序流程图

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)

三、程序的详细分析过程及相应说明

预测分析程序工作过程:

四、程序结构

(一)程序中的主要变量和存储结构说明

(1)主要变量

charnontermina[FZJ_NUM]={'

E'

'

D'

T'

S'

F'

}/*文法的非终结符集*/;

chartermina[ZJF_NUM]={'

i'

+'

*'

('

)'

#'

$'

};

/*文法的终结符集*/;

charvocab[ALL_NUM]={'

}/*文法的单词表*/

production*expression[20];

/*存储产生式*/

firfolfstfow[10];

/*存储非终结符的FIRST集,FOLLOW集*/

charnonrecycle;

intrecyclenum;

/*用来控制不出现重复计算同一个字符的FOLLOW集*/

(2)存储结构

/*---------------------------单链表--------------------------------*/

typedefstructfirstnode

{

charvalue;

structfirstnode*next;

}firstset;

/*---------------------------产生式,存有SELECT--------------------------------*/

typedefstruct

charsource;

charresult[10];

firstset*selects;

}production;

/*---------------------------存放FIRST,FOLLOW--------------------------------*/

firstset*firsts;

firstset*follows;

intsuccess;

}firfol;

/*---------------------------边表结点--------------------------------*/

typedefstructnode{

intadjvex;

structnode*next;

}EdgeNode;

/*---------------------------顶点表结点--------------------------------*/

typedefstructvnode{

charvertex;

EdgeNode*firstedge;

}VertexNode;

typedefVertexNodeAdjList[20];

/*---------------------------邻接表--------------------------------*/

typedefstruct{

AdjListadjlist;

intn,e;

}ALGraph;

ALGraph*T;

/*---------------------------栈--------------------------------*/

typedefstructStack

{

charstack[MAX_STACK];

intindex;

}STACK,*pSTACK;

(二)函数功能介绍

ALGraph*CreateALGraph(ALGraph*G)

建立有向图的邻接表存储

DFSAL(ALGraph*G,inti)

深度优先搜索

intsearch_position(charc,chara[])

查找字符在数组的位置

intisnontermina(charx)

判断是否为非终结符

intistermina(charx)

判断是否为终结符

intisunempty(charc)

判断是否能推出空

insert_first(firstset*L,charc)

将某个字符插入到单链表中去

intsearch_first(firstset*L,charc)

判断某个字符是否在单链表中

firstset*union_set(firstset*L,firstset*T)

合并两个单链表

follow(charc)

求FollowSet

firstsetselect()

求SelectSet

first(charc)

求FirstSet

isLL1()

判断某文法是否为LL1

intisparalla(firstset*L,firstset*T)

判断两个单链表是否有交集

voidprintstack(pSTACKstack)

voidinitialization()

voidprinttable()

intisfull(pSTACKstack)

voidpush(pSTACKstack,chars)

voidpop(pSTACKstack)

voidanalyse()

voidsearchtable_anddo(charAc,charIc)

打印预测分析过程的堆栈的知识

实验3算符优先

1.实验目的:

了解算符优先分析法、算符优先文法、优先关系表构造、可归约串的刻画与寻找方法、算符优先分析算法等内容。

能够采用一种编程语言(C语言)实现简单的表达式求值程序;

能够使用自己编写的分析程序对简单的表达式进行分析并得出正确结果。

2.实验内容:

用高级编程语言编制表达式求值程序并进行相应的错误处理。

3.实验要求:

1.对运算符的优先关系有明确的定义;

2.编写的分析程序能够正确识别源程序中的数据和操作符;

3.对于源程序中的词法错误,给出简单的错误提示,保证顺利完成整个表达式的分析;

4.实验报告要求做出详细说明,说明词法分析程序的工作过程,说明错误处理的实现。

4.实验内容:

本次程序选择8个显式操作符和一个隐式操作符’#’,下面是本程序能处理的各个操作符的优先级列表,空出的部分为没有优先关系:

!

*

/

+

-

==

#

<

=

>

本程序已基本涉及了所有类型的运算,并且能处理输入的正负数的情况,错误处理主要在表达式分析部分,而求值部分没有细分各种错误,下面是对各种错误的处理宏定义:

预定义

预定义值

说明

ProcessSuccessful

处理正常结束

NumberFormatError

1

数字格式错误

UnidentifiableCharIncluded

2

包含不可识别的字符

UnsupportedOperatorIncluded

3

包含不可识别的操作符

UnmatchableExpression

4

表达式不匹配

对于分析出的终结符,本程序用一个终结符节点表示,下面是其定义:

structTerminalNode{

intcategory;

floatval;

其中category是终结符的类型,通过ValMask来判断是否为常量,如果为常量,则可以通过判断与ValLong或ValFloat是否相等来确定常量的类型,本来想通过联合体来存储常量的值,但后来考虑到程序会变得复杂,并降低可读性,因此最后不管是什么类型,一律当成float型常量进行运算,以降低复杂性,但是这样就不能检查到除零错误。

上面是程序的预定义部分的说明,下面是程序的结构。

本次程序编制与上一个词法分析程序有一定的相似性,主函数负责各个部分的协调工作,不直

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 人文社科 > 设计艺术

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1