文法解读示例

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

文法解读
1.<程序> ::= <分程序>.
范例:
const a=4; .
分析:程序的主体是分程序,“.”相当于结束符号,告诉编译器需要编译的程序到此为止;
2.<分程序> ::= [<常量说明部分>][<变量说明部分>]{[<过程说明部分>]| [<函数说
明部分>]}<复合语句>
<常量说明部分> ::= const<常量定义>{,<常量定义>};
<常量定义> ::= <标识符>=<常量>
<变量说明部分> ::= var <变量说明> ; {<变量说明>;}
<变量说明> ::= <标识符>{, <标识符>} : <类型>
<过程说明部分> ::= <过程首部><分程序>{; <过程说明部分>};
<过程首部> ::= procedure<标识符>[<形式参数表>];
<函数说明部分> ::= <函数首部><分程序>{; <函数说明部分>};
<函数首部> ::= function <标识符>[<形式参数表>]: <基本类型>;
<复合语句> ::= begin<语句>{; <语句>}end
范例:
const a=6,b=2,c=7.5; //常量说明部分
var x,y,m :integer; //变量说明部分
procedure test;//过程声明部分
test分程序(略);过程中的分程序具体分程序略;
function add :integer ;
add分程序(略);
begin /*复语句
x:=a;
for y:=1 to 5
do
x:=x+1;
end */
分析1:根据分程序的文法可知,分程序各个组成成分的声明顺序已经被限定好了,不能随便更改声明顺序,如“var a,b:integer; const x=10;”此种顺序是不允许的;另外“const a=10; const b=12;”也是不正确的。

分析2:每一个分程序按顺序由常量说明部分,变量说明部分,过程说明及函数说明部分,以及复合语句组成
其中常量,变量,过程及函数说明说明,复合语句之间有严格的先后顺序,不能打乱而相连的函数说明和过程说明部分则可以随意改变顺序
变量说明,常量说明,过程及函数说明对于一个分程序来说均为可有可无的部分,只有
最后的复合语句是必须存在的
3.<语句> ::= <赋值语句>|<条件语句>|<当循环语句>|<过程调用语句>|<复语
句>|<读语句>|<写语句>|<for循环语句>|<空>
<赋值语句> ::= <标识符> := <表达式>| <函数标识符> := <表达式> | <标识符>'['<表达式>']':= <表达式>
<条件语句> ::= if<条件>then<语句> | if<条件>then<语句>else<语句>
<当循环语句> ::= while<条件>do<语句>
<过程调用语句> ::= <标识符>[<实在参数表>]
<读语句> ::= read'('<标识符>{,<标识符>}')'
<写语句> ::= write '(' <字符串>,<表达式> ')'|write'(' <字符串> ')'|write'('<表达式>')'
<for循环语句> ::= for <标识符> := <表达式> (downto | to)<表达式> do <语句> //步长为1
范例:
var x,y,m :integer; t:array[10] of integer ;
t[4] :=5*4 ; /*赋值语句的另两种形式
function test ;
//函数体略
test=5; */
x :=5 ; //赋值语句
if x>3 x :=x-1 ; /*条件语句
else x :=3 ; * /
while(x>3) /*while语句
do write(3) ; write语句*/
begin /*复语句
for y:=1 to 5 for语句
do
x:=x+1; 赋值语句
end */
read(x); //读语句
; //空语句
分析:此部分主要说明了各种类型语句的结构组成,更进一步说就是说明了能够接受的语句语法格式;某些语句会有多种形式,在进行分析时应考虑全面;
4.<表达式> ::= [+|-]<项>{<加法运算符><项>}
<加法运算符> ::= +|-
范例:
var x,y,z:integer;
x:=4;
y:=5;
z:=x+y; /*表达式的多种形式
z:=x-y; *
z:=+5+x; *
z:=-5+x; */
分析:此处表述了表达式由项组成的具体方式,包含多种情况,值得注意;第一个项前面的+、-是表示如果第一个项需要是负数或正数,在数字前加上符号;后面的+、-基本上为运算符的+、-;
5.<无符号整数> ::= <数字>{<数字>}
范例:
var x:integer;
x:=234; //234即为无符号整数;
分析:此处说明了无符号整数的组成方法,即数字的重复;值得注意的是011(以0打头)的也为无符号整数,是可接受的;
6.<实在参数> ::= <表达式>| <标识符>|<函数调用语句>
范例:
var a:integer;f:real;
function add;
//具体函数体略
function test(var x:integer; y:real;) //函数声明
//test具体函数体略
test(3*a,f); //函数调用3*a为表达式实在参数,f为标识符实在参数
test(add,f); //add 为函数语句调用实在参数;
分析:此处说明了实在参数的三种组成方式。

相关文档
最新文档