【Dongle】【程序语言】文法——乔姆斯基分类法
来源:互联网 发布:算法导论 中文版 pdf 编辑:程序博客网 时间:2024/05/01 18:22
前言
讲文法前,我们首先需要了解终结符、非终结符以及产生式的含义:
终结符:语言的组成成分,是最后的内容
非终结符:不是语言的组成成分,而是在推到过程中的占位符,最终要替换终结符。产生式:用终结符替代非终结符的规则。
0型文法
0型文法也称短语文法,此文法对应于图灵机。设G=(VN,VT,P,S),如果它的每个产生式α→β是这样一种结构:α∈(VN∪VT)*且至少含有一个非终结符,而β∈(VN∪VT)*,则G是一个0型文法。简而言之,左边不能是单独的终结符,至少有一个非终结符。例如:
a→Bb,a→B,a→b都不是符合0型文法
A→a,Aa→B,Aa→Bb符合0型文法
1型文法
1型文法也叫上下文有关文法,此文法对应于线性界限自动机。它是在0型文法的基础上每一个α→β,都有|β|>=|α|。这里的|β|表示的是β的长度。简而言之,在0型的基础之上,右侧长度大于或等于左侧长度。但是有一个特例,即α→ε也满足1型文法。
2型文法
2型文法也叫上下文无关文法,它对应于非确定的下推自动机。2型文法是在1型文法的基础上,再满足:每一个α→β都有α是非终结符。如A->Ba,符合2型文法要求。简而言之,在1型文法基础之上,左侧都是非终结符,即不存在终结符。例如:
A→a,BA→a,A→aB,A→Ba等都符合2型文法
Aa→B,Ab→a只符合1型文法,而不符合2型文法
扩展:在左部如果有多个非终结符也算成一个非终结符。
3型文法
3型文法也叫正规文法,它对应于有限状态自动机。它是在2型文法的基础上满足:A→α|αB(右线性)或A→α|Bα(左线性)。简而言之,在2型文法基础之上,两个产生式右侧的结构要相同,要么是右线性(即终结符+非终结符),要么是左线性(即非终结符+终结符)。例如:
A→aB,B→cD符合3型文法。
A→aB,B→Dc不符合3型文法。因为A→aB的右侧是:终结符+非终结符;而B→Dc的右侧是:非终结符+终结符,两者的右侧结构不相同,故而不符合3型文法。
扩展一下,如何判断是否属于3型文法:
第一点:左边必须只有一个字符,且必须是非终结符;第二点:其右边最多只能有两个字符,且当有两个字符时必须有一个为终结符而另一个为非终结符。当右边只有一个字符时,此字符必须为终结符。第三点:对于3型文法中的所有产生式,其右边有两个字符的产生式,这些产生式右边两个字符中终结符和非终结符的相对位置一定要固定,也就是说如果一个产生式右边的两个字符的排列是:终结符+非终结符,那么所有产生式右边只要有两个字符的,都必须前面是终结符而后面是非终结符。反之亦然,要么,就全是:非终结符+终结符。
总结
对于文法对应的自动机类型,暂未理解清楚,待下次总结……
- 【Dongle】【程序语言】文法——乔姆斯基分类法
- 【Dongle】【软考】程序语言之中间代码表示
- 【Dongle】【软考】程序语言之语言(一)
- 文法和语言——文法的分类
- 机器学习算法系列——k近邻分类法
- 乔姆斯基文法
- 乔姆斯基文法
- 微软的新程序语言——M
- 【程序语言】并行编程——openMP初探
- 【程序语言】并行编程——openMP初探
- 编译原理———文法
- 词法分析——使用正则文法
- 编译原理——文法类别
- 软考之路——文法
- 形式语言——四类文法
- 程序语言
- 乔姆斯基的文法分类
- 文法
- 文章标题
- 迷宫问题
- |洛谷|NOIP2004|搜索|P1092 虫食算
- mini2440移植linux3.14.72内核笔记(1)
- 【JZOJ 4812】string
- 【Dongle】【程序语言】文法——乔姆斯基分类法
- 理解RESTful架构
- {模板}快速幂
- 【JZOJ 4812】【NOIP2016提高组 五校联考2】string
- UVA 12706 Zero-Knowledge Protocol 乱搞
- 资深嵌入式er对嵌入式行业的总结
- JZOJ4806. 打工
- 第60篇Chrome扩展USB开发(三) 及PHP研究
- C++递归函数之谈