编译原理实践 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.语句类型 2.数据类型 只有整数类型 3.说明部分类型 1)赋值语句 2)语句串,begin…end 3)条件语句,即if语句 4)循环语句,即while语句 5)过程调用语句,即call语句 2.数据类型 只有整数类型 3.说明部分类型 1)常量说明 2)变量说明 3)过程说明 4)在一个过程内说明常量、变量和过程 PL/0允许递归调用,既可以间接递归也可以直接递归
1.2PL/0语言实例 var i; begin i:=0; while i < 12 do i := i + 2; end. var a, b; begin a:=10; if a < 12 then b := a/2; end.
CONST A=10; (. 常量说明部分. ) VAR B,C; (. 变量说明部分. ) PROCEDURE P; (. 过程说明部分 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; END; 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 "=" number { "," 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 "then" 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 A conditional 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)文法。