版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
刚刚学软件设计师中的编译原理,对文法分类比较晕,查看了一些资料,进行了如下整理:
0型文法:又称为短语文法,对应于图灵机
(1):式子左边可以有多个字符,而且至少含有一个非终结符
(2):式子右边可以有多个字符,可以是终结符,也可以是非终结符,但必须是有限个字符
1型文法:又称为上下文有关文法,对应于线性有界自动机
(1):式子左边可以有多个字符,而且至少含有一个非终结符
(2):式子右边可以有多个字符,可以是终结符,也可以是非终结符,但字符个数必须大于等于左边字符个数
2型文法:又称为上下文无关文法,对应于下推自动机
(1):式子左边只能有一个字符,而且必须是非终结符
(2):式子右边可以有多个字符,可以是终结符,也可以是非终结符,但必须是有限个字符
3型文法:又称为正规文法(正规文法又包括左线性文法和右线性文法),对应于有限状态自动机
(1):式子左边只能有一个字符,而且必须是非终结符
(2):式子右边最多有二个字符,而且如果有二个字符必须是一个终结符和一个非终结符,如果只有一个字符,那么必须是终结符
(3):式子右边的格式一定要一致,也就是说,如果有一个是(终结符+非终结符)那么所有的式子都必须是(终结符+非终结符), 如果有一个是(非终结符+终结符),那么所有的式子都必须是(非终结符+终结符)
正规文法——左线性文法:
(1):必须是三型文法
(2):式子右边的产生是(非终结符+终结符)的格式
正规文法——右线型文法:
(1):必须是三型文法
(2):式子右边的产生式是(终结符+非终结符)的格式