没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
(附录)
《编译技术》课程设
计文 档
学号:______ ______
1
姓名:_______ _______
年 月 日
一.需求说明
1.文法说明
原文法:
<程序> ::= <分程序>.
<分程序> ::= [<常量说明部分>][<变量说明部分>]{[<过程说明部分>]|[<函数说明部分>]}<
复合语句>
<常量说明部分> ::= const<常量定义>{,<常量定义>};
<常量定义> ::= <标识符>=<常量>
<常量> ::= [+|-](<无符号整数>|<无符号实数>)|<字符>
<字符> ::= '<字母>'|'<数字>'
<字符串> ::= "{十进制编码为 32,33,35-126 的 ASCII 字符}"
<无符号整数> ::= <数字>{<数字>}
<无符号实数> ::= <无符号整数>.<无符号整数>
<标识符> ::= <字母>{<字母>|<数字>}
<变量说明部分> ::= var<变量说明>;{<变量说明>;}
<变量说明> ::= <标识符>{,<标识符>}:<类型>
<类型> ::= <基本类型>|array'['<无符号整数>']'of<基本类型>
<基本类型> ::= integer|real|char
<过程说明部分> ::= <过程首部><分程序>{;<过程首部><分程序>};
<函数说明部分> ::= <函数首部><分程序>{;<函数首部><分程序>};
<过程首部> ::= procedure<标识符>'('[<形式参数表>]')';
<函数首部> ::= function<标识符>'('[<形式参数表>]')':<基本类型>;
2
<形式参数表> ::= [var]<标识符>{,<标识符>}:<基本类型>{;<形式参数表>}
<语句> ::= <赋值语句>|<条件语句>|<当循环语句>|<过程调用语句>|<复合语句>|<读语句>|<
写语句>|<for 循环语句>|<空>
<赋值语句> ::= <标识符> := <表达式>|<函数标识符> := <表达式>|<标识符>'['<表达式>']' :=
<表达式>
<函数标识符> ::= <标识符>
<表达式> ::= [+|-]<项>{<加法运算符><项>}
<项> ::= <因子>{<乘法运算符><因子>}
<因子> ::= <标识符>|<标识符>'['<表达式>']'|<无符号整数>|<无符号实数>|'('<表达式>')'|<函
数调用语句>
<函数调用语句> ::= <标识符>'('[<实在参数表>]')'
<实在参数表> ::= <实在参数>{,<实在参数>}
<实在参数> ::= <表达式>
<加法运算符> ::= +|-
<乘法运算符> ::= *|/
<条件> ::= <表达式><关系运算符><表达式>
<关系运算符> ::= <|<=|>|>=|=|<>
<条件语句> ::= if<条件>then<语句>[else<语句>]
<当循环语句> ::= while<条件>do<语句>
<for 循环语句> ::= for<标识符> := <表达式>to<表达式>by[+|-]<无符号整数>do<语句>
<过程调用语句> ::= <标识符>'('[<实在参数表>]')'
<复合语句> ::= begin<语句>{;<语句>}end
<读语句> ::= read'('<标识符>{,<标识符>}')'
<写语句> ::= write'('<字符串>,<表达式>')'|write'('<字符串>')'|write'('<表达式>')'
<字母> ::= a|b|c|d…x|y|z|A|B…|Z
<数字> ::= 0|1|2|3…8|9
文法解读:
(1) <程序> ::= <分程序>.
语法图为:
分析:
程序的主体是分程序,“.”相当于结束符号,告诉编译器需要编译的程序到此为止。
范例:
const pi = 3.14; .
(2) <分程序> ::= [<常量说明部分>][<变量说明部分>]{[<过程说明部分>]|[<函数说明部分>]}
<复合语句>
<常量说明部分> ::= const<常量定义>{,<常量定义>};
3
<常量定义> ::= <标识符>=<常量>
<变量说明部分> ::= var<变量说明>;{<变量说明>;}
<变量说明> ::= <标识符>{,<标识符>}:<类型>
<过程说明部分> ::= <过程首部><分程序>{;<过程首部><分程序>};
<过程首部> ::= procedure<标识符>'('[<形式参数表>]')';
<函数说明部分> ::= <函数首部><分程序>{;<函数首部><分程序>};
<函数首部> ::= function<标识符>'('[<形式参数表>]')':<基本类型>;
<复合语句> ::= begin<语句>{;<语句>}end
等价为:
<分程序> ::=
[const<标识符>=<常量>{,<标识符>=<常量>};]
[var<标识符>{,<标识符>}:<类型>;{<标识符>{,<标识符>}:<类型>;}]
{[procedure<标识符>'('[<形式参数表>]')';<分程序>{;procedure<标识符>'('[<形式参数表
>]')';<分程序>};]|
[function<标识符>'('[<形式参数表>]')':<基本类型>;<分程序>{;function<标识符>'('[<形式
参数表>]')':<基本类型>;<分程序>};]}
begin<语句>{;<语句>}end
语法图为:
分析:
每一个分程序按顺序由常量说明部分,变量说明部分,过程说明及函数说明部分,以及
复合语句组成;
其中常量,变量,过程及函数说明说明,复合语句之间有严格的先后顺序,不能打乱;
4
而相连的函数说明和过程说明部分则可以随意改变顺序;
变量说明,常量说明,过程及函数说明对于一个分程序来说均为可有可无的部分,只有
最后的复合语句是必须存在的。
范例:
const a=6, b=2, c=7.5; //常量说明部分
var x, y, m :integer; //变量说明部分
procedure test(a, b :integer); //过程说明部分
begin a=3; b=4 end
function add(a, b, c :integer) :integer; //函数说明部分
begin c = a + b end
begin a=3; b=4 end //复合语句
(3) <常量> ::= [+|-](<无符号整数>|<无符号实数>)|<字符>
<字符> ::= '<字母>'|'<数字>'
<无符号整数> ::= <数字>{<数字>}
<无符号实数> ::= <无符号整数>.<无符号整数>
等价为:
<常量> ::= [+|-](<无符号整数>|<无符号实数>)|'<字母>'|'<数字>'
<无符号整数> ::= <数字>{<数字>}
<无符号实数> ::= <数字>{<数字>}.<数字>{<数字>}
语法图为:
分析:
常量由字母、数字或符号加无符号整数或实数组成;
无符号整数为数字串;
无符号实数为在数字串中添加小数点。
范例:
5
剩余24页未读,继续阅读
资源评论
往事_随风
- 粉丝: 2
- 资源: 4
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功