littlec递归下降的语法分析及词法分析

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Little c 递归下降的语法分析实验报

一.语法分析对应little c文法

<小c程序>::= <主函数>#|<外部定义><主函数>#

注:其中‘#’为语法分析时分析结束的标志,无实际意义

<主函数>::=main()<函数体>

<外部定义>::=<变量声明><外部函数定义>

<变量声明>::=null|<类型区分符><标识符>{;<类型区分符><标识符>}

注:大括号内为一个循环体,表示可出现多次,下同。

<外部函数定义>::=<类型区分符><函数说明符><函数体>

<类型区分符>::=int|char

<函数说明符>::=<函数名>()

<函数名>::=<标识符>

<函数体>::={<变量声明><语句表>}

<语句表>::=<语句>{;<语句>}

<语句>::=<赋值语句>|<条件语句> |<循环语句>|<函数调用语句>|;

<赋值语句>::= <左部>=<右部>

<左部>::= <变量名>

<右部>::= <算术表达式>

<算术表达式>::=<项>{+<项> | -<项>}

<项>::=<因子>{*<因子> | /<因子>

<因子>::=ID | NUM | (<算术表达式>)

<条件语句>::=if(<关系表达式>)<语句>|if(<关系表达式>)<语句>else<语句>

<关系表达式> →〈算术表达式〉〈关系运算符〉〈算术表达式〉

<变量名>::=<标识符>

<关系运算符>::= <|>|!=|==|>=|<=

<加运算符>::= +|-

<乘运算符>::= *|/

<循环语句>::=while(<关系表达式>)<语句>

二.实验简介

本实验采用递归子程序法完成了上述语言文法的语法分析,正确的程序经过分析显示“分析完毕,正确”,错误的程序经过分析,对其进行报错,虽不能准确定位错误,但是大致可以确定错误类型。因上次词法分析被误删,所以本程序结合词法分析与语法分析于一体,同时对源程序进行词法与语法分析。但由于个人能力有限,故没有生成语法树,也没有错误恢复处理。本程序只是完成了对含有外部数据定义,外部函数,main函数的c程序的语法分析,并且对if语句,while

语句,函数调用语句,空语句(;),表达式进行了相应的分析。三.函数功能及全局变量简介

Syn:经词法分析后,每个单词对应的标识

Kk:出错的标识,有错置一

mainfunc(); main函数处理程序。

funcbody();函数体处理程序。

outdef();外部定义处理函数

vardef();变量声明处理函数

outfunc();外部函数处理函数

yjc();语句串处理函数

statement();语句处理函数

assignstmt();赋值语句处理函数

funcall();函数调用处理语句

conditstmt();条件语句处理函数

loopstmt();循环语句处理函数

relexp();关系表达式处理函数

expression();算术表达式处理函数

factor();因子处理函数

term();项处理函数

parser();语法分析

scaner();读取下一个单词

四.符号表

五.结果测试:正确结果测试:1.只含main函数:main(){

int y;

int x;

x=3;

y=1;

if(x>y)

x=x-y;

else x=y-x;

while(x>y) x=x-y;

;

}#

2.含外部函数int cal(){ int a;

int b;

int c;

a=0;

b=3;

c=a+b;

}

main(){

int y;

int x;

x=3;

y=1;

if(x>y)

x=x-y;

else x=y-x; while(x>y) x=x-y;

cal();

;

}#

3.含外部数据说明以及外部函数int m;

int n;

int cal(){

int a;

int b;

int c;

a=0;

b=3;

c=a+b;

}

main(){

int y;

int x;

x=3;

y=1;

if(x>y)

x=x-y;

else x=y-x; while(x>y) x=x-y;

cal();

;

}#

错误结果测试:1.main后缺‘{’:main()

int y;

int x;

x=3;

y=1;

if(x>y)

x=x-y;

else x=y-x; while (x>y)

x=x-y;

;

}#

2.声明变量缺少“int”main(){

y;

int x;

x=3;

y=1;

if(x>y)

x=x-y;

else x=y-x;

while (x>y)

x=x-y;

;

}#

相关文档
最新文档