实验二语法分析201110405137

2019-08-03 13:17

昆明理工大学信息工程与自动化学院学生实验报告

( 2013 — 2014 学年 第 1 学期 )

课程名称:编译原理 开课实验室:信自楼 442 2013年 12 月27日 年级、专业、班 实验项目名称 教师评语 学号 201110405137 姓名 成绩 语法分析器 指导教师 冯松 该同学是否了解实验原理: 该同学的实验能力: 该同学的实验是否达到要求: 实验报告是否规范: 实验过程是否详细记录: A.了解□ A.强 □ A.达到□ A.规范□ A.详细□ B.基本了解□ B.中等 □ B.基本达到□ B.基本规范□ B.一般 □ C.不了解□ C.差 □ C.未达到□ C.不规范□ C.没有 □ 教师签名: 年 月 日

一、 实验目的及内容

实验目的:编制一个语法分析程序,实现对词法分析程序所提供的单词序列进行语法检查和结构分析。

实验内容:在上机(一)词法分析的基础上,采用递归子程序法或其他适合的语法分析方法,实现其语法分析程序。要求编译后能检查出语法错误。

已知待分析的C语言子集的语法,用EBNF表示如下:

<程序>→PROGRAM<标识符>;<分程序> <程序>→<变量说明>BEGIN<语言表>END. <变量表>→VAR<变量说明表>

<变量说明表>→<变量表>:<类型>| <变量表>:<类型>;<变量说明表> <类型>→INTEGER|REAL

<变量表>→<变量>|<变量>,<变量表> <语句表>→<语句>|<语句>;<语句表>

-1-

<语句>→<赋值语句>|<条件语句>||<复合语句> <赋值语句>→<变量>:=<算术表达式>

<条件语句>→IF<关系表达式>THEN<语句>ELSE<语句> →WHILE<关系表达式>DO<语句> <复合语句>→BEGIN<语句表>END

<算术表达式>→<项>|<算术表达式>+<项>|<算术表达式>-<项> <项>→<因式>|<项>*<因式>|<项>/<因式>

<因式>→<变量>|<常数>|(<算术表达式>)

<关系表达式>→<算术表达式><关系符><算术表达式> <变量>→<标识符>

<标识符>→<标识符><字母>|<标识符><数字>|<字母> <常数>→<整数>|<浮点数> <整数>→<数字>|<数字><整数> <浮点数>→.<整数>|<整数>.<整数> <关系符>→=|<|〈=|=|>|>=|<> <字母>→A|B|C|…|X|Y|Z <数字>→0|1|2|…|9

二、实验原理及基本技术路线图(程序流程图) 语法分析程序的算法思想

(1)主程序示意图如图1所示。

-2-

置初值 调用scaner读下一个单词符号 调用lrparser 结束 图1 语法分析主程序示意图

(2)递归下降分析程序示意图如图2所示。 (3)语句串分析过程示意图如图3所示。

是否

调用scaner

调用语句串分析程序

是否end?

否 调用scaner

syn=0&&kk=0? 打印分析成功 出错处理

(4)statement语句分析程序流程如图4、5所示。

调用term函数 否 是否标识符?

否 是否+ , -? 调用scaner 否 是 调用scaner 是否:=?

调用term函数 调用scaner 出错处理 出错处理 调用expression函数 图4 statement语句分析函数示意图 图5 expression表达式分析函数示意图

三、所用仪器、材料(设备名称、型号、规格等或使用软件) 1台PC以及VISUAL C++6.0软件

-3-

四、实验方法、步骤(或:程序代码或操作过程)

#include \#include \

char prog[100],token[8],ch;

char *rwtab[6]={\int syn,p,m,n,sum; int kk; factor(); expression(); yucu(); term(); statement(); lrparser(); scaner(); main() {

p=kk=0;

printf(\do

{ scanf(\ prog[p++]=ch; }while(ch!='#'); p=0; scaner(); lrparser(); getch(); }

lrparser() {

if(syn==1) {

scaner(); /*读下一个单词符号*/ yucu(); /*调用yucu()函数;*/ if (syn==6) { scaner();

if ((syn==0)&&(kk==0)) printf(\}

else { if(kk!=1) printf(\ kk=1; } }

else { printf(\kk=1; }

-4-

return; }

yucu() {

statement(); /*调用函数statement();*/ while(syn==26) {

scaner(); /*读下一个单词符号*/ if(syn!=6)

statement(); /*调用函数statement();*/ } return; }

statement() { if(syn==10) {

scaner(); /*读下一个单词符号*/ if(syn==18)

{ scaner(); /*读下一个单词符号*/

expression(); /*调用函数statement();*/ }

else { printf(\ kk=1; } }

else { printf(\ kk=1; }

return; }

expression() { term();

while((syn==13)||(syn==14))

{ scaner(); /*读下一个单词符号*/ term(); /*调用函数term();*/ }

return; }

term() { factor();

while((syn==15)||(syn==16))

{ scaner(); /*读下一个单词符号*/ factor(); /*调用函数factor(); */ }

return; }

-5-


实验二语法分析201110405137.doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:2018年4月河南省高考适应性考试数学(理)试题含答案

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: