1、6.程序设计语言PL/0,编译原理实践,PL/0语言概述 EBNF定义的PL/0语法 PL/0语法图 判断是否符合2条限制规则,1.PL/0语言概述,由著名计算机科学家、PASCAL语言的创始人N.Wirth教授选择提供的 在其专著Algorithms + Data Structures = Programs一书(译著书名:算法数据结构程序)中给出,1.1PL/0语言的功能,1.语句类型 1)赋值语句 2)语句串,beginend 3)条件语句,即if语句 4)循环语句,即while语句 5)过程调用语句,即call语句 2.数据类型只有整数类型 3.说明部分类型 1)常量说明 2)变量说明
2、3)过程说明 4)在一个过程内说明常量、变量和过程 PL/0允许递归调用,既可以间接递归也可以直接递归,1.2PL/0语言实例,var i; begini:=0;while i 12 do i := i + 2; end.,var a, b; begina:=10;if a 12 then b := a/2; end.,CONST A=10; (* 常量说明部分 *) VAR B,C; (* 变量说明部分 *)PROCEDURE P; (* 过程说明部分 *)VAR D; PROCEDURE Q; VAR X; BEGIN READ(X);D:=X;WHILE X#0 DO CALL P; E
3、ND; BEGIN WRITE(D); CALL Q; END; BEGIN CALL P; END.,Q的过程体,p的过程体,主程序体,保留字: begin, call, const, do, end, if, odd, procedure, then, var, while 符号: . , ; := + - * / ( ) 标识符:以字母开头的,任意字母和数字组成的序列 数:阿拉伯数字的序列 关系运算符: = # =,2.EBNF定义的PL/0语法,program = block “.“. A program is a block. block = “const“ ident “=“ nu
4、mber “,“ ident “=“ number “;“ “var“ ident “,“ ident “;“ “procedure“ ident “;“ block “;“ statement. A block is a sequence of constant, variable and procedure declarations followed by a statement.,statement = ident “:=“ expression| “call“ ident| “begin“ statement “;“ statement “end“| “if“ condition “t
5、hen“ statement| “while“ condition “do“ statement. A statement is an assignment statement, a procedure call, a compound statement, an if statement, a while statement, or empty. Both if and while statements have conditionals,condition = “odd“ expression| expression (“=“|“#“|“|“=“)expression. A conditi
6、onal is a relational expression or an “odd“ test.,expression = “+“|“-“ term (“+“ | “-“) term . term = factor (“*“|“/“) factor . factor = ident| number | “(“ expression “)“. ident = letter (digit | letter) number = digit digit,3. PL/0语法图,部分非终结符的含义,block分程序 statement语句 condition-条件 expression-表达式 term-项 factor-因子,4.判别是否符合两条限制规则,方法: 1)找出图中每一个分支点,考察每一个分支点的各个分支的头符号是否相异 2)找出图中每一个透明结构,考察每个透明结构,考察每个透明结构的头符号集合与其跟随符号集合是否相异 结论:PL/0语言文法符合两条限制规则,可以应用简单辨认算法的LL(1)文法。,