编译程序的工作过程一般可以划分为五个阶段:词法分析、语法分析、语义分析、中间代码的产生、优化、目标代码的生成。
1.语法三个基本概念:
(1)字母表:有限字符集(类比组成单词的字母、组成词语的汉字)。
(2)单词符号:是语言中具有独立意义的最基本结构(类比单词、词语)。
(3)语法单位:由单词符号构成的更大的结构(类比句子、段落,程序语言中则是表达式、语句等)。
2.语法、语义、文法含义:
(1)语法:一组规则,用这组规则可以产生形式上正确的程序。
(2)语义:语义是指这样的一组规则,使用它可以定义一个程序的意义。
以上copy的定义,能看懂但看起来费劲对吧,举个例子,我们定义一种简单的语言,它由4个字符(△○=1-)组成,4个字符合起来就是字母表;然后定义“△”含义为“女”、“○”为“男”、“=”为“看到”、“1△”“1○”分别为“女孩”“男孩”,这些就是一个或多个字符组成的单词符号;如果我说“○=1△”是一个完整的句子,可以表达完整的意思,那么它含义是什么,“男孩看到女”?
不通顺,因为还有语法规则(文法)没加进去——句子由主谓宾组成,“1○”“1△”做谓语时可省略“1”,“男孩看到女孩”应该对了吧,不,正确答案是男孩遇到女孩,“boy meets girl”,这就是的语义,语句的内在含义。
上述文法形式是这样的:
<句子>→<主语><谓语><宾语>
<主语>→<名词>
<谓语>→<动词>
<宾语>→<名词>
<名词>→1○
<名词>→1△
<动词>→=
→表示左由右定义,可以推导:
<句子>→<主语><谓语><宾语>→<名词><动词><名词>→<1○><=><1△>
这一句子无视上下文,其文法即上下文无关文法,归纳起来,一个上下文无关文法G包括四个组成部分:一组终结符号VT,一组非终结符VN,一个开始符号S,以及一组产生式P。
形式上定义一个上下文无关文法G是一个四元式(VT,VN,S,P)。
关于产生式的推导,学完高数的应该没问题。
乔姆斯基把文法分为四种类型:0型,1型,2型,3型。
0型文法:
G=(VT ,VN ,S ,P) 是一个0型文法,如果它的每个产生式是这样的结构 α→β
α∈(VN∪VT)* 且至少有一个非终结符,而β∈(VN∪VT)* 。
0型文法也称短语文法
0型文法的描述能力相当于图灵机
该文法所描述的语言称为0型语言,或者称递归可枚举语言
1型文法:
产生式的形式为α→β
其中|β|>=|α|, S∈ε 除外,但S不得出现于任何产生式的右部
1型文法又称为上下文无关文法
另一种定义形式:α1Aα2→α1βα2
该文法所描述的语言又称上下文有关语言
2型文法:
该文法的产生式满足:A→α
A为非终结符,α为终结符和非终结符组成的符号串,可以是空串
该文法又称为上下文无关文法
该文法所描述的语言又称为上下文无关语言
3型文法:
该文法的产生式满足:
A→αB 或 A→Bα
A为非终结符, α为终结符组成的符号串,可以是空串
该文法又称为右线性文法,或左线性文法,通称正规文法
该文法所描述的语言又称为正规语言(用来描述词法规则)
学习小结:
刚开始学习,语法分析、文法翻译和语义分析都在后面,现在只能说是基本了解语法,尝试推导文法。