云题海 - 专业文章范例文档资料分享平台

当前位置:首页 > 实验三 语法分析的C语言实现(DOC)

实验三 语法分析的C语言实现(DOC)

  • 62 次阅读
  • 3 次下载
  • 2025/6/5 20:47:59

实验三 语法分析的C语言实现

一、 实验目的

加深对语法分析器工作过程的理解;能够采用一种编程语言实现简单的语法分析程序;能够使用自己编写的分析程序对简单的程序段进行语法分析。

二、实验要求

1、 在实验一(用C语言实现词法分析的程序)的基础上,实现编写语法分析程序,语法

分析程序的实现可以采用任何一种编程工具。 2、对语法规则有明确的定义;

3、编写的分析程序能够对实验一的结果进行正确的语法分析;

4、对于遇到的语法错误,能够做出简单的错误处理,给出简单的错误提示,保证顺利完成语法分析过程;

三、实验分工

个人完成

四、程序说明

有文法G[E]:E->TG T->FS G->+TG|ε S->*FS|=E|ε F->(E)|i 1.1 判断LL(1)文法

当我们需选用自顶向下分析技术时,首先必须判别所给文法是否是LL(1)文法,分析所给文法可知文法中不含左公因子,也不存在左递归,因而再对给定文法计算First集、Follow集以及Select集,对于求出的每个产生式的Select集,看对于同一个左部非终结符是否存在交集,如果它们的交为空则表示所给文法是LL(1)文法,否则不是L(1)文法。若所给文法是LL(1)文法,再根据求得的Select集合构造预测分析表,对于一个输入串,根据已知的预测分析表分析它是否是文法的句子。各非终结符的First集以及Follow集如下表所示:

表1-1

VN 集合 E T G F S First集 {(,i} {(,i} {+,ε} {(,i} {*,=,ε} Follow集 {#,)} {+,#,)} {#,)} {*,+,=,#} {+,#,)} 各产生式的Select集: Select(E->TG)={(,i}

Select(T->FS)={(,i}

Select(G->+TG)={+} Select(G->ε)={#,)}

Select(S->*FS)={*} Select(S->ε)={+,#,)} Select(S->=E)={=} Select(F->(E))={(} Select(F->i)={i} 由各产生式的Select集可以看出,每个非终结符的Select集交集为空,则可以确定该文法是LL(1)文法。 1.2 构造预测分析表

表1-2 VT VN i ->TG ->FS ->i + ->+TG ->ε * ->*FS ( ->TG ->FS ->(E) ) ->ε ->ε # ->ε ->ε = ->TG ->FS ->=E E T G F S

程序流程图 开始 结构体赋值 F F 提示错误 产生式 F 逆序入栈 预测分析表构造 读入分析串 有非法字符 F 为终结符 T T 为空 不入栈 T 提示错误 T 匹配 F 提示错误 T 出栈 T 分析成功 F T F 匹配 提示错误 分析结束 主要函数介绍:

1、void print();输出分析栈 2、void print1();输出剩余串 3、int main();程序主函数,在其中调用自定义函数,完成文法产生式的赋值,预测分析表的构建,以及对输入串的分析等主要功能。 程序主要代码:

1、初始化程序即分析栈、剩余串、非终结符与终结符的初始化

char A[20];/*分析栈*/ char B[20];/*剩余串*/

char v1[20]={'i','+','*','(',')','#',';','='};/*终结符 */ char v2[20]={'E','G','T','S','F'};/*非终结符 */ int j=0,b=0,top=0,l;/*L为输入串长度 */ 2、结构体的定义及结构体变量定义

typedef struct type/*产生式类型定义 */ {

char origin;/*大写字符 */

char array[5];/*产生式右边字符 */ int length;/*字符个数 */ }type;

type c,e,t,g,g1,s,s1,f,f1,s2;/*结构体变量 */ type C[10][10];/*预测分析表 */ 3、输出分析栈函数定义 void print() {

int a;

for(a=0;a<=top+1;a++) printf(\ printf(\}

4、输出剩余串函数定义 void print1() {

int j;

for(j=0;j

for(j=b;j<=l;j++) printf(\ printf(\}

5、在main函数中定义结构体,把文法产生式赋值给结构体 /*把文法产生式赋值结构体*/ e.origin='E';

strcpy(e.array,\ e.length=2; t.origin='T';

strcpy(t.array,\ t.length=2; g.origin='G';

strcpy(g.array,\ g.length=3; g1.origin='G';

搜索更多关于: 实验三 语法分析的C语言实现(DOC) 的文档
  • 收藏
  • 违规举报
  • 版权认领
下载文档10.00 元 加入VIP免费下载
推荐下载
本文作者:...

共分享92篇相关文档

文档简介:

实验三 语法分析的C语言实现 一、 实验目的 加深对语法分析器工作过程的理解;能够采用一种编程语言实现简单的语法分析程序;能够使用自己编写的分析程序对简单的程序段进行语法分析。 二、实验要求 1、 在实验一(用C语言实现词法分析的程序)的基础上,实现编写语法分析程序,语法分析程序的实现可以采用任何一种编程工具。 2、对语法规则有明确的定义; 3、编写的分析程序能够对实验一的结果进行正确的语法分析; 4、对于遇到的语法错误,能够做出简单的错误处理,给出简单的错误提示,保证顺利完成语法分析过程; 三、实验分工 个人完成 四、程序说明 有文法G[E]:E->TG T->FS

× 游客快捷下载通道(下载后可以自由复制和排版)
单篇付费下载
限时特价:10 元/份 原价:20元
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信:fanwen365 QQ:370150219
Copyright © 云题海 All Rights Reserved. 苏ICP备16052595号-3 网站地图 客服QQ:370150219 邮箱:370150219@qq.com