Posted on 2006-04-24 22:32
形式系统 阅读(1020)
评论(0) 编辑 收藏 引用 网摘 所属分类:
编译原理
实验二 自顶向下语法分析
1、 目的
在词法分析的基础上,熟悉自顶向下的语法分析方法。培养软件设计及编程能力。
2、 内容
(1) 定义文法
<PR>→<DSS><ESS>
<DSS>→var <ID><IDS>;<DSS>|ε '数据定义语句
<IDS>→,<ID><IDS>|ε
<ESS>→<ES>;<ESS>|ε
<ES>→<WS>|<IFS>|<AS>|<OS>|<IS>
<WS>→while "(" <RE> ")" { <ESS> }
<IFS>→if "(" <RE> ")" { <ESS> } else { <ESS> }
<AS>→<ID>=<E>;
<RE>→<E><ROp><E>
<ROp>→<|>|==|<=|>=|!=
<E>→<T><E1>
<E1>→<Op1><T><E1>|ε
<T>→<F><T1>
<T1>→<Op2><F><T1>|ε
<F>→(E)|<ID>|<Digits>
<OS>→cout<< <E>; //输出的是表达式
<IS>→cin>> <ID>; //输入的一定是变量
非终结符说明:
符号
|
定义
|
符号
|
定义
|
符号
|
定义
|
<PR>
|
程序
|
<DSS>
|
定义语句集
|
<ESS>
|
可执行语句集
|
<DS>
|
定义语句
|
<IDS>
|
变量列表
|
<ID>
|
标识示符(变量)
|
<ES>
|
可执行语句
|
<WS>
|
While 语句
|
<IFS>
|
If 语句
|
<AS>
|
赋值语句
|
<Cout>
|
输出设备
|
<Cin>
|
输入设备
|
<RE>
|
关系表达式
|
<Digits>
|
数字 ( 实数 )
|
<E>
|
算术表达式
|
<T1>
|
优先级为 1 的数据项
|
<T2>
|
优先级为 2 的数据项
|
<F>
|
优先级为 3 的数据项
|
(2) 根据上述文法,编程访问词法分析程序所生成得中间文件,按下列所定义的文法,构造递归下降子程序。其流程如下:
说明:具体实现时也可先一次性读到缓冲区,每次需要单词时次从缓冲区中读。
(1) 测试,分别构造正确与非正确的源程序进行测试。
列出测试用例,如:
正确实例: while(ip<>0) {}
错误实例: while(ip<>=){}
实验报告要求内容:
(1)文法定义说明
(2)部分代码
(3)流程图
(3)测试用例