《编译原理——表达式分析》由会员分享,可在线阅读,更多相关《编译原理——表达式分析(4页珍藏版)》请在金锄头文库上搜索。
1、一、实验目的: 熟悉并设计一个表达式的语法分析器二、相关知识: 1、 形式语言基础及其文法运算2、 语法分析原理及 4 种常用的语法分析方法其中: 四种算法为(1)设计算术表达式的递归下降子程序分析算法三、实验内容:1设计表达式的语法语法分析器算法2编写代码并上机调试运行通过要求: 输入- 表达式输出- 表达式语法是否正确四、概要设计1. 算术表达式的递归下降子程序分析算法(1)算术表达式文法G(E): E E 0 T | TT T 1 F | FF i | (E)(2)文法变换:G(E) E T 0 TT F 1 FF i | (E)(3) 递归下降子程序框图:E: 入口 T: 入口T Fn
2、 0? n 1?y y出口 出口 read(w) read(w) T FF: 入口 主程序:Z E ( ? n i ? n errread(w) read(w)EE err n # ?err n ) ? y y 开始 read(w)出口(4)数据结构char exp50; /算术表达式区int i=0;int err=0 ; /err 输出指示char w; /当前单词(5)源程序清单:#include #include void E();void T();void F();int Print();char exp50;/算术表达式区int i=0;int err=0;char w;/当前单词
3、int Print()printf(err) ;err=1;return err;void F()if(w=a&w=0&w=9)w=expi+;/read(w)else if(w=()w=expi+;E();if(w!=)结束 if(!err)Print();elsew=expi+;/read(w)elseif(!err)Print();void T()F();while(w=*|w=/)w=expi+;/read(w)F();void E()T();while(w=+|w=-)w=expi+;/read(w)T();int main()printf(please input your expression:);/输入表达式scanf(%s,exp);w=expi+;/read(w)E();if(!err) if(w=#)printf(OK!);elseprintf(err);return 0;(6)运行结果