似乎可以直接从一般的语言来考虑编译器。
- 调整公理(Adaptation Axiom)
定义:设源语言为S,目标语言为T,存在关系 R 是 S×T 的子集,满足:
∀s∈S, ∃t∈T 使得 (s,t)∈R
含义:源语言能够翻译为目标语言
必要性:如果不存在R,则有一些源语言无法翻译为目标语言
充分性:如果存在R,则任何源语言翻译为目标语言至少存在一种翻译方式 - 映射公理(Mapping Axiom)
定义:设符号集合为V,存储位置集合为L,存在单射函数 f: V→L,满足:
f⊆V×L ^ V⊆Domain(f)
含义:符号一定具有无歧义的存储位置
必要性:如果不存在单射f,则一些符号不能无歧义地对应内存的位置,这不可能
充分性:如果存在单射f,对符号的操作则可以对应到内存的位置 - 赋值公理(Assignment Axiom)
定义:设符号集合为V,存储位置集合为L,f为符号到存储位置的单射函数,满足:
∀v∈V,f(v)=l ^ Type(v) ≤ Type(l)
含义:符号所对应的存储位置的存储的信息不少于符号的类型所确定的信息
必要性:若Type(v)>Type(l),则符号的信息丢失
充分性:Type(v) ≤ Type(l) 则保证了存储的信息不少于符号的信息
反例:① 源语言和目标语言不能完全互相翻译,则不满足调整公理,② 符号的含义为开集,不能表示为单一的有限的来源,则不满足映射公理,③ 允许符号的信息丢失,则可能不满足赋值公理
非确定编译器:① 一种源语言可能翻译成多种目标语言,则需要非确定编译器的支持;② 一个符号可能对应多个存储地址,则需要非确定编译器的支持;③ 一个符号的类型可能为多个,则为非确定编译器;从对继承、多重继承、类型转换的支持来看,一些语言可以看成需要非确定编译器的支持。
发表回复