编译原理顾名思义就是处理高级语言,使之成为计算机能够识别的语言(低级语言)的原理。而文法呢?就是用来描述程序设计语言的方法。编译原理中的文法相当于语言学(人类语言)中的语义分析,即分析一个句所表示的含义。它是产生中间代码或目标代码的依据。
以下是对软考视频中的编译原理的简单理解:
著名语言学家NoamChomsky(乔姆斯基)根据对产生式所施加的限制的不同,把文法分成四种类型,即0型、1型、2型和3型。
文法G 定义为四元组(VN ,VT ,P,S)
¨VN :非终结符集
¨VT :终结符集
¨P :产生式集合(规则集合)
¨S :开始符号(识别符号)
注:一般以大写字母表示非终结符,以小写字母表示终结符。
限制最少,每个产生式α→β中,α中至少含有一个非终结符(大写字母表示)
对于每个产生式α→β中,都有|β|>=|α|。这里的|β|表示的是β的长度
举例:如有A->Ba则|β|=2,|α|=1符合1型文法要求。反之,如aA->a,则不符合1型文法。
注意:虽然要求|β|>=|α|,但有一特例:α→ε也满足1型文法。
每一个α→β都有α是非终结符。如A->Ba,符合2型文法要求。
举例:Ab->Bab虽然符合1型文法要求,但不符合2型文法要求,因为其α=Ab,而Ab不是一个非终结符。
它是在2型文法的基础上满足:A→α|αB(右线性)或A→α|Bα(左线性)。
解释:如有:A->a,A->aB,B->a,B->cB,则符合3型文法的要求。但如果推导为:A->ab,A->aB,B->a,B->cB或推导为:A->a,A->Ba,B->a,B->cB则不符合3型方法的要求了。具体的说,例子A->ab,A->aB,B->a,B->cB中的A->ab不符合3型文法的定义,如果把后面的ab,改成“一个非终结符+一个终结符”的形式(即为aB)就对了。例子A->a,A->Ba,B->a,B->cB中如果把B->cB改为B->Bc的形式就对了,因为A→α|αB(右线性)和A→α|Bα(左线性)两套规则不能同时出现在一个语法中,只能完全满足其中的一个,才能算3型文法。
关系:
举例:
已知文法G=({a,b},{S,A},S,P),其中:S->aAS|a;A->SbA|SS|ba.
请构造句型aabAa的推导树。
|
文法产生式 |
正规式 |
规则1 |
A→xB,B→y |
A=xy |
规则2 |
A→xA|y |
A=x*y |
规则3 |
A→x,A→y |
A=x|y |
规则1:由A→xB,B→y,可知:A→xB→xy
规则2:由A→xA|y,可知:A→xA,A→y,依次往下推A→xA→x2A→x3A……→x*A→x*y
规则3:A→x,A→y简写成A=x|y
算符优先级的计算
firstvt积:以终结符开始,或以一个“非终结符+终结符”开始
lastvt积:以终结符结尾,或以“一个终结符+非终结符”结尾
对于算符的优先级计算,只需要使用上图的公式,逐步推导即可!
有限自动机是具有离散输入和输出的系统的一种数学模型。它拥有有限数量的状态,每个状态可以迁移到零个或多个状态,输入字串决定执行哪个状态的迁移。有限状态自动机可以表示为一个有向图
有限自动机分为:NFA不确定的有限自动机,DFA(deterministicfinite automaton)确定的有限自动机
定义
对于编译原理的简单理解,文法只是简单的语法规则,只有转化为表达式才会有实际的计算意义即正规式,而对于有限自动机要想顺利工作,都必须有一个正则式和一个文本串,也就是根据正规式来判断串是否匹配,然后输出!
对于编译原理这方面知识的学习理解还不是很深刻,如有异议,欢迎交流指导!