PL0编译程序的实现
{ } :花括号表示其内的语法成分可以重复。在不
加上下界时可重复0到任意次数,有上下界时为可
重复次数的限制。
6
如:{*}表示*重复任意次,{*}38表示*重复3-8次。 [ ] :方括号表示其内的成分为任选项。 ( ) :表示圆括号内的成分优先。
例:用EBNF描述<整数>文法的定义 : <整数>∷=[+|-]<数字>{<数字>} <数字>∷=0|1|2|3|4|5|6|7|8|9 或更好的写法 <整数>∷=[+|-]<非零数字>{<数字>} <非零数字>∷=1|2|3|4|5|6|7|8|9 <数字>∷=0|<非零数字>
识符〉}; 〈标识符〉∷=〈字母〉{〈字母〉|〈数字〉} 〈过程说明部分〉∷=〈过程首部〉〈分程序〉
{;〈过程说明部分〉};
8
〈过程首部〉∷=PROCEDURE〈标识符〉
〈语句〉∷=〈赋值语句〉 |〈条件语句〉|
〈当型循环语句〉|〈过程调用语句〉|〈读语句〉|
〈写语句〉|〈复合语句〉|〈空〉
〈赋值语句〉∷=〈标识符〉∶=〈表达式〉
语言(pascal) 这3个语言之间的关系和作用。 ◇ 掌握用语法图和扩充的巴科斯-瑙尔范式
(EBNF)对一个高级程序设计语言的语法形式描述。 1
本节讲3个内容。 一、对PL/0语言编译程序的功能用“T”型图表 示,从而弄清源语言(PL/0)、目标语言(类 pcode)和 实现语言(pascal) 这3个语言之间的关系和作 用。 。
11
汉语句子可以是由主语后随谓语而成,构成谓 语的是动词和直接宾语,我们采用EBNF来表示汉 语句子的构成规则
〈句子〉∷=〈主语〉〈谓语〉 〈主语〉∷=〈代词〉|〈名词〉 〈代词〉∷= 我 | 你 | 他 〈名词〉∷= 王明 | 大学生 | 工人 | 英语 〈谓语〉∷=〈动词〉〈直接宾语〉 〈动词〉∷= 是 | 学习 〈直接宾语〉∷=〈代词〉|〈名词〉
〈读语句〉∷=READ'('〈标识符〉{,〈标识 符〉}')'
〈写语句〉∷=WRITE'('〈表达式〉{,〈表达 式〉}')'
〈字母〉∷=a|b|…|X|Y|Z 〈数字〉∷=0|1|2|…|8|9
10
三、3种方法的比较与总结:
1、用语法图描述语言的语法与EBNF描述相比较: 语法图描述: 直观,易读,易写。 EBNF表示:形式化强,易机器识别。
作业:P31第6题的2,3小题。 13
第二章 简单的一遍编译器
A Simple One Pass Compiler
14
本章主要内容
❖ 用C语言开发一个把中缀表达式转换为后缀 表达式的翻译程序,展示基本的编译技术
2、语法图或EBNF作为描述程序设计语言语法的工 具,那么,问题是能不能让机器掌握这些工具,从 而让机器自动检查哪些符号序列是所给语言的合理 程序。答案是: EBNF 方法的最大好处就是容易在 机器上实现。
3、下面我们用EBNF给出自然语言汉语的构成规则, 并且用这些规则检查一句话是不是正确的汉语:
【学习目标】 本章目的:以PL/0语言编译程序为实例,学习编
译程序实现的基本步骤和相关技术,对编译程序的 构造和实现得到一些感性认识和建立起整体概念, 为后面的原理学习打下基础。
◇ 了解并掌握用语法图和扩充的巴科斯-瑙尔 范式(EBNF)对计算机语言的形式描述。
【难 重 点】 重点: ◇ 弄清源语言(PL/0)目标语言(类 pcode)实现
〈复合语句〉∷=BEGIN〈语句〉{;〈语
句〉}END
〈条件〉∷=〈表达式〉 〈关系运算符〉
〈表达式〉|ODD〈表达式〉
〈表达式〉∷=[+|-]〈项〉{〈加法运算符〉
〈项〉}
〈项〉∷=〈因子〉{〈乘法运算符〉〈因子〉}
〈因子〉∷=〈标识符〉|〈无符号整数〉|'('
〈表达式〉')'
9
〈加法运算符〉∷=+|〈乘法运算符〉∷=*|/ 〈关系运算符〉∷=#|=|<|<=|>|>= 〈条件语句〉∷=IF〈条件〉THEN〈语句〉 〈过程调用语句〉∷=CALL〈标识符〉 〈当型循环语句〉∷=WHILE〈条件〉DO〈语 句〉
7
PL/0语言文法的EBNF表示为: 〈程序〉∷=〈分程序〉. 〈分程序〉∷=[〈常量说明部分〉][〈变量说
明部分〉][〈过程说明部分〉]〈语句〉 〈常量说明部分〉∷=CONST〈常量定义〉 {,
〈常量定义〉}; 〈常量定义〉∷=〈标识符〉=〈无符号整数〉 〈无符号整数〉∷=〈数字〉{〈数字〉} 〈变量说明部分〉∷=VAR〈标识符〉{,〈标
麦的Peter Naur命名的。EBNF表示扩充的巴科斯-
瑙尔范式。
(EBNF) 给出程序设计语言的语法描述用了6个符
号,它们是:
〈 〉:用左右尖括号括起来的中文字表示语法构
造成分,或称语法单位,是非终结符。
∷= :该符号的左部由右部定义,可读作'定义为'。
| :表示'或',为左部可由多个右部定义。
2
二、程序设计语言的语法规则(词法和语法) 的描述方法有3种。
1、是用自然语言描述;
2、是用语法图描述;用语法图描述首先把语法 符号分为二种,终结符和非终结符。
所谓终结符,是构成语言的语法成分的最小单位, 终结符不能由其它文法符号定义。在语法图中用椭 圆和圆圈中的英文字表示终结符。
所谓非终结符,是可由其它文法符号定义语法成 分。在语法图中用长方形内的中文字表示非终结符。 箭头表示该语法成分由旦有了一组规则以后,我们可以按照如下方 式用它们去推导或产生句子。我们开始去找∷=左端 的带有〈句子〉的规则并把它表示成∷=右端的符号 串,重复做下去。例如我们导出句子“我是大学生” 是一句正确的汉语的过程是:
〈句子〉=》〈主语〉〈谓语〉 =》〈代词〉〈谓语〉 =》我〈谓语〉 =》 我〈动词〉〈直接宾语〉 =》我 是〈直接宾语〉 =》 我 是〈名词〉 =》我 是 大学生
3
用语法图描述语法规则的优点是直观、易读。
例如在 PL/0语言中程序是由非终结符‘分程序’ 和终结符“.”组成的串定义的。所以程序的语法图 可以用下图表示:
4
分程序的语法图如下:
5
3、 用扩充的巴科斯-瑙尔范式 (EBNF) 给出程序设
计语言的语法描述。巴科斯-瑙尔范式(BACKUS-
NAUR FORM)是根据美国的John W.Backus与丹