指称语义简介
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
例3 一个计算器的语法与语义(续)
语义方程:
计算:
exec[E=]= eval E
(6.9)
eval[N]= valu N
(6.10a)
eval[E1+E2]= sum(eval E1, eval E2) (6.10b)
eval[E1-E2]= diff (eval E1, eval E2) (6.10c)
语法与语义的关系: • 语义是依附于语法的; • 语义是独立于语法的,反映语言的真实含意; • 语法、语义是多对多的映射。
回顾属性文法: • 属性(如.type、.val等) • 语义规则
3
例1 语法与语义的关系
考虑二进制数,如"110"和"10101"。 • 数字"110"欲表示数值6, • 而数字"10101"欲表示数值21。 数字是一个语法实体,而数值是一个语义实体。数值是一个抽象概念,它不 依赖于任何特别的语法表示。 • 数字"110":数值:6、110等 • 数值6: 数字:"110"、"6"、"Ⅵ"、"六"、"陆"等 • 数值110: 数字:"110"、"6E"、"壹佰壹拾"等
4
例2 二进制数的语法与语义
语法: 域: 语义函数: 语义方程:
计算:
Numeral ::= 0 | 1 | N0 | N1 Natural = { 0, 1, 2, 3, ... } valuation : N → Natural valu[0]= 0 valu[1]= 1 valu[N0]= 2×valu N+0 = 2×valu N valu[N1]= 2×valu N+1
eval[E1*E2]= prod(eval E1, eval E2) (6.10d)
执行命令“40-3*9=” ,其中减法优先级高于乘法:
exec[40-3*9=]
= eval[40-3*9]
by(6.9)
= prod(eval[40-3],eval[9])
by(6.10c)
= prod(diff(eval[40], eval[3]), eval[9]) by(6.10d)
= prod(diff(valu[40], valu[3]), valu[9]) by(6.10a)
= prod(diff(40,3), 9)= 333
7
定义1.1
• 每个短语p的意义被规定为一个在某域中的值d。称d是短语p的指称。或者说短
语p由d来指称;
• 规定域D作为短语类P的指称,并且引入一个语义函数f,它把P中的每个短语映
形式化语义(动态语义)
1. 语义的形式化描述(形式化语义)对程序设计语言的设计与实现均具有 重要意义;
2. 形式化语义从数学的角度(用数学的方法)研究程序设计语言的语义(最初 也被称为数学语义),使得: • 全面、准确了解(规定)程序设计语言的语义 • 预测程序的行为 • 对程序进行推理(如一程序与另一程序是否相等)
■
换句话说,每个短语的指称(仅)由它们子短语的指称定义,从而使得整个程序 的意义自下而上得以完整定义。
8
1.2 函数定义的符号表示
1. 使用符号“let ... in ...” 引入新的(数学意义的)变量或函数,其含意可 以非形式地解释为:“将…引入…”或“将…代入…”。
(i=0, 1, 2... base-1)
5
valu[Ni]= base×valu[N]+i
例3 一个计算器的语法与语义
文法: Command ::= Expr =
(6.4)
E
::= Numeral
(6.5a)
|E+E
(6.5b)
|E-E
(6.5c)
|E*E
(6.5d)
域: int = { ..., -3, -2, -1, 0, 1, 2, 3, ... }
valu[110] = 2×valu[11] = 2×(2×valu[1]+1) = 2×(2×1+1) =6
valu[110] = 10×valu[11] = 10×(10×valu[1]+1) = 10×(10×1+1) N::==i|1N1i0(i=0, 1, 2... base-1)
base进制:valu[i]= i
语义方程:exec[E=]= eval E
Βιβλιοθήκη Baidu
(6.9)
eval[N]= valu N
(6.10a)
eval[E1+E2]= sum(eval E1, eval E2) (6.10b)
eval[E1-E2]= diff(eval E1, eval E2) (6.10c)
6
eval[E1*E2]= prod(eval E1, eval E2) (6.10d)
射到它在D中的域。记为:
f : P → D;
• 通过若干语义方程来定义语义函数,每个函数对应P中的一个可区分的短语。如
果P中的一个短语有子短语Q和R,则相应的语义方程式就类似如下表示:
f[...Q ...R ...]= ... f' Q ... f'' R ...
此处f'和f''分别是Q和R的语义函数。
语义函数: execute : Command → int
(6.6)
evaluate : E
→ int
(6.7)
valuation : Numeral → Natural (6.8)
辅助函数:sum : int×int→ int
diff : int×int→ int
prod : int×int→ int
3. 形式化语义的应用 • 语义设计 • 程序验证 • 程序自动生成(编译器自动构造)
4. 形式化描述语义的方法 • 操作语义 • 公理语义 • 指称语义
1
指称语义
1. 赋予程序的每个短语(如每个表达式、命令、声明等)意义 ,即将语言的语 义结构强加给对应的语法结构;
2. 每个短语的意义由它的子短语来定义; 3. 每个短语的意义被称为指称,从而发展出指称语义 。
本章内容 1. 指称语义的基本概念; 2. 指称语义的基本技术:如何用指称语义描述程序设计语言的特性,如存贮、
环境、抽象与参数、原子类型与组合类型、以及失败等。
本节内容 指称语义的基本概念:短语、指称、域、语义函数、函数定义的符号表示等。
2
1.1 语义函数
语义函数: 1. 用适当的数学实体表示每个短语的意义。 2. 实体被称为短语的指称(denotation)。 3. 通过将短语映射到其指称的函数,来规定程序设计语言的语义。 4. 这些函数被称为语义函数(semantic functions)。 语义函数:短语→指称