SPIR-V 研究:编译器基本原理(三) - Chomsky文法分类
SPIR-V 研究:编译器基本原理(三) - Chomsky文法分类
标签(空格分隔): SPIR-V Vulkan Grammar
上一篇说过语法分为四类;这一篇来介绍Chomsky Hierarchy。首先,我们简单看看type-0和type-1的语法。
Type-0 - Unrestricted grammar
这是一种没有任何限制的语法,理论上可以描述任何图林机可以接受的语言。它的一般形式如下图:
这是一个从u生成v的过程;其中u,v是任意字符组合(包括最终字符和中间符号,或空字符),当然u至少包含一个中间符号。数学表达式为:(Σ ⋃ N)* N (Σ ⋃ N)* --> (Σ ⋃ N)*
虽然,type-0很强大,但是用它来检验语句是否符合语法规则,也就是写一个一般性通用的Parser,是非常困难的事。这也就引出了后面几种语法;其想法是通过加强限制条件,我们可以得到更简单更容易使用的语法。
Type-1- Context-sensitive grammar (CSG)
这是一种上下文有关的语法规则;左侧和右侧被替换的字符前后都有可能有别的字符,也就是有上下文的;只有在这一组字符一起出现才能应用这个规则。并且,左侧的字符数要小于等于右侧。如下图
其一般形式:
其中α,β可以是空字符,也就是没有;γ是任意字符。
这里A被替换为γ 有个前提条件,就是当且仅当A被α,β包裹;这也就是上下文相关。
CSG的生成过程可以用一张图来表示,比如:
这种CSG的生成图比较复杂,可能会含有某种环;而我们后面将要看到的CFG和正则语法图就简单的多了。
Kleene star
这里有几个描述符号我们会经常碰到:*,+,?,|;它们也广泛用于正则表达式。
* Kleene star/克莱尼星号(或者克莱尼闭包)是一个针对集合或字符的单目运算符。一个集合的克莱尼闭包定义为:L* = {ε} ∪ L ∪ LL ∪ LLL ∪ ...,
即L的0到正无穷次幂的并集。对于语言L*= {'a'},我们有:L*={ε, 'a', 'aa', 'aaa', ...}。
加号运算符+:L+ = LL* = L*L,对L = {'a'},我们有:L+={'a', 'aa', 'aaa', ...}。
? : 0个或一个元素。
| : 或运算。U : 集合的并集。
Type-2 Context Free Grammar
CFG是这样一种语法规则,左边(LHS)只有一个中间字符,而右边(RHS)是任意字符。
α --> (N U Σ)* ; α属于N
这样的规则替换的时候是和上下文无关的;只是简单的把某个中间表示替换成一组字符,然后继续。这样的过程可以用一颗生成树来表示,比如:
Type-3 Regular grammar
CFG的一个问题是右边有可能有多于一个的中间表示;这样当某个中间表示被替换时,我们必须记住旁边还有另一个中间表示也要被替换;也就是说CFG可能需要在生成树上往上回溯。我们希望有个更简单的规则,它可以一路向下不断替换最终结束,而不用回溯。这就是Regular Grammar。
Regular Grammar: 限制右边只能是一组最终字符或一组最终字符加一个中间表示。
1. B → a - where B is a non-terminal in N and a is a terminal in Σ
2. B → aC - where B and C are non-terminals in N and a is in Σ
3. B → ε - where B is in N and ε denotes the empty string, i.e. the string of length 0.
这样,生成树变成了一个链条。
下表是四种类型语法描述汇总表格;其中:
T or ∑ = set of alphabet/Character/terminals = ( a, b,c,…., +,-,*, …. )
V = Set of non-terminals or variables =( A,B,C, …., )
(∑ U V) = combination of variables and terminals
CLASS | GRAMMAR | LANGUAGE | AUTOMATION | DEFINITION |
---|---|---|---|---|
Type 0 => | Unrestricted or Phase Structural Grammar | Recursive and Recursive Enumerable | Turing Machine | (∑ U V)* → (∑ U V)* At least one variable in LHS |
Type 1 => | Context Sensitive grammar (CSG) | Context Sensitive language (CSL) | Linear bounded Automaton (LBA) | (∑ U V)* → (∑ U V)* Size of LHS ≤ RHS i.e. if x→y then│x│≤ │y│ and αAβ → αBβ where, α = left context, β = right context, A = a Variable, B = anything (∑UV)* |
Type 2 => | Context- free (CFG) | Context- free language(CFL) | Push Down Automaton( PDA) | A → (∑ U V)* |
Type 3 => | Regular Grammer | Regular language | Finite Automation (FA) | A → a , A → aB or A → a , A → Ba) |
SPIR-V 研究:编译器基本原理(三) - Chomsky文法分类相关推荐
- Chomsky文法分类
Chomsky文法分类体系 文章目录 Chomsky文法分类体系 0型文法(Type-0 Grammar) 1型文法(Type-1 Grammar) 2型文法(Type-2 Grammar) 3型文法 ...
- SPIR-V 研究:编译器基本原理
http://blog.csdn.net/qwertyu1234/article/details/50163847 前面转过两篇关于SPIR-V 中间语言的介绍:接下来笔者准备深入学习一下SPIR-V ...
- c语言标识符的文法表示,第三章文法和语法[lly]3.ppt
第三章文法和语法[lly]3 第3章文法和语言;1.语言;研究程序设计语言及研究的三个方面: 每个程序构成的规律(语法 Syntax)每个程序的含义(语义 Semantics)每个程序和使用者的关系( ...
- 编译原理之形式语言文法分类
高级程序设计语言的三个基本因素: 语法:描述语言成分的构成规则(包括词法规则和语法规则) 语义:描述语法成分的含义 语用:描述语法成分的使用方法 形式语言理论(formal language theo ...
- [Python人工智能] 三.theano实现分类神经网络及机器学习基础
从本篇文章开始,作者正式开始研究Python深度学习.神经网络及人工智能相关知识.前两篇文章讲解了神经网络基础概念.Theano库的安装过程及基础用法.theano实现回归神经网络,这篇文章主要讲解机 ...
- 第二篇第三章建筑分类与耐火等级
2019/1/4 [录播]2018一消精华班-实务-一级消防工程师-环球网校 http://v.edu24ol.com/?type=lesson&id=178932&gid=16157 ...
- 科目三考试项目分类评判标准
三.科目三考试项目分类评判标准 (一)上车准备 1.不绕车一周检查车辆外观及安全状况,不合格: 2.打开车门前不观察后方交通情况,不合格. (二)起步 1.制动气压不足起步,不合格: 2.车门未关闭起 ...
- RBA认证咨询,认证三个等级分类只针对VAP审核
RBA分为VAP和NOVAP,VAP必须经过RBA官网注册,由RBA派出人员进行审核,国内主要有TUV/BSI/SGS/UL等共计9家RBA授权审核机构,而且审核员也必须经过RBA培训和授权.VAP ...
- 英国伯明翰大学首席教授姚新:人工智能研究应从三个问题重新考虑
5月20日,由中国电子学会主办,ZD至顶网协办的第八届中国云计算大会进入了最后一个日程,在最后一日的全体大会上,英国伯明翰大学首席教授姚新做出了以"三个被遗忘的脑启发计算问题"为题 ...
- 如何出色的研究 RGSS3 (三) 形式的调整的细节
在一个我们研究了添加到窗体方法的选择,这个问题来研究窗体类的细节. 所有形式的父类的 Window_Base 四个参数需要初始化. #--------------------------------- ...
最新文章
- cx_Oracle.DatabaseError: ORA-12514
- Python数据类型之列表操作方法
- 人工智能筑起网络安全“铜墙铁壁”
- 决策树算法实现(train+test,matlab) 转
- 深度学习在情感分析中的应用
- Java8排序–性能陷阱
- 数据分析方法-聚类算法
- Truncated SVD for faster dection
- spring:使用会话和请求作用域
- TensorFlow 实现深度神经网络 —— Denoising Autoencoder
- pythonchallenge之C++学习篇-01
- 【eclipse插件开发实战】Eclipse插件开发2——SWT
- 谷歌火狐等浏览器Flash安装失败,安装后进入网站仍提示未安装Flash
- 高速公路上边有没有人脸识别摄像头_人脸识别特征介绍以及难题概括
- 软件开发工作量的估算方法
- 夏商周秦西东汉 三国两晋南北朝 隋唐五代和十国 辽宋夏金元明清
- jbpm 历史查询笔记
- EXCEL如何设置固定表头
- 用于威胁情报分析的虚拟机
- ios底部栏设计规范_设计干货:底部导航栏规范设计总结