语法分析-递归下降分析法.doc

  1. 1、本文档共12页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
语法分析-递归下降分析法

实验2-1 语法分析—递归下降法 一、实验目的 通过本实验,掌握自上而下语法分析的要求和特点,以及递归下降分析的原理和过程。调试一个递归下降分析程序,实现对词法分析程序所提供的单词序列的语法检查和结构分析。 二、实验内容 利用C语言完善递归下降分析程序,并对简单语言进行语法分析。 1、要点回顾 标识符ID=letter(letter| digit)* 整型常数NUM=digit digit * 单词符号及其种别码: 单词符号 种别码 单词符号 种别码 begin 1 : 17 if 2 := 18 then 3 20 while 4 21 do 5 = 22 end 6 23 letter(letter| digit)* 10 = 24 digit digit * 11 = 25 - 13 ; 26 + 14 ) 27 * 15 ( 28 / 16 # 0 2、待分析的简单语言的语法 用扩充的BNF表示如下: (1)程序::=begin语句串end (2)语句串::=语句{;语句} (3)语句::=赋值语句 (4)赋值语句::=ID:=表达式 (5)表达式::=项{+项|-项} (6)项::=因子{*因子|/因子} (7)因子::=ID| NUM|(表达式) 3、实验要求说明 输入单词串,以“#”结束,如果是文法正确的句子,则输出成功信息,打印“success”,否则输出“error”。 三、完整源程序代码 #includestdio.h #includestring #includeiostream using namespace std; char prog[80];//缓冲区 int p=0;//缓冲区prog的指针 char token[8];//单词 int m=0;//单词token的指针 char ch;//需要分析的字符 int syn=0;//单词的种别码 int sum=0;//计算整数 int n=0;//计数器 int kk=0; char *rwtab[6]={begin,if,then,while,do,end};//关键字 void scaner();//扫描函数 void factor();//因子 void term();//项 void expression();//表达式 void statement();//语句 void yucu();//语句串 void lrparser();//语法分析 //扫描函数 void scaner() { for(n=0;n8;n++) { token[n]=0;//初始化单词 } ch=prog[p++]; while(ch== ) { ch=prog[p++];//过滤空格。(也可用do……while) } if((ch=Ach=Z)||(ch=ach=z)) { m=0; while ((ch=Ach=Z)||(ch=ach=z)||(ch=0ch=9)) { token[m++]=ch;//将当前字符存入单词 ch=prog[p++];//取下一个 } token[m++]=\0;//结束符 p--;//指针归位 syn=10;//假定是变量 for (n=0;n6;n++) { if (strcmp(token,rwtab[n])==0) { syn=n+1;//关键字! break; } } } else if(ch=0ch=9) { sum=0; while (ch=0ch=9) { sum=sum*10+ch-0;//计算数字 ch=prog[p++]; } p--;//指针归位 syn=11;//是数字! } else switch (ch) { case : m=0; token[m++]=ch; ch=prog[p++]; if (ch===) { syn=24;//是= token[m++]=ch;//将=存入单词 } else { syn=23;//是 p--;//指针归位 } break; case: m=0; token[m++]=ch; ch=prog[p++]; if (ch==) { sy

文档评论(0)

haihang2017 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档