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文法分类相关推荐

  1. Chomsky文法分类

    Chomsky文法分类体系 文章目录 Chomsky文法分类体系 0型文法(Type-0 Grammar) 1型文法(Type-1 Grammar) 2型文法(Type-2 Grammar) 3型文法 ...

  2. SPIR-V 研究:编译器基本原理

    http://blog.csdn.net/qwertyu1234/article/details/50163847 前面转过两篇关于SPIR-V 中间语言的介绍:接下来笔者准备深入学习一下SPIR-V ...

  3. c语言标识符的文法表示,第三章文法和语法[lly]3.ppt

    第三章文法和语法[lly]3 第3章文法和语言;1.语言;研究程序设计语言及研究的三个方面: 每个程序构成的规律(语法 Syntax)每个程序的含义(语义 Semantics)每个程序和使用者的关系( ...

  4. 编译原理之形式语言文法分类

    高级程序设计语言的三个基本因素: 语法:描述语言成分的构成规则(包括词法规则和语法规则) 语义:描述语法成分的含义 语用:描述语法成分的使用方法 形式语言理论(formal language theo ...

  5. [Python人工智能] 三.theano实现分类神经网络及机器学习基础

    从本篇文章开始,作者正式开始研究Python深度学习.神经网络及人工智能相关知识.前两篇文章讲解了神经网络基础概念.Theano库的安装过程及基础用法.theano实现回归神经网络,这篇文章主要讲解机 ...

  6. 第二篇第三章建筑分类与耐火等级

    2019/1/4 [录播]2018一消精华班-实务-一级消防工程师-环球网校 http://v.edu24ol.com/?type=lesson&id=178932&gid=16157 ...

  7. 科目三考试项目分类评判标准

    三.科目三考试项目分类评判标准 (一)上车准备 1.不绕车一周检查车辆外观及安全状况,不合格: 2.打开车门前不观察后方交通情况,不合格. (二)起步 1.制动气压不足起步,不合格: 2.车门未关闭起 ...

  8. RBA认证咨询,认证三个等级分类只针对VAP审核

    RBA分为VAP和NOVAP,VAP必须经过RBA官网注册,由RBA派出人员进行审核,国内主要有TUV/BSI/SGS/UL等共计9家RBA授权审核机构,而且审核员也必须经过RBA培训和授权.VAP ...

  9. 英国伯明翰大学首席教授姚新:人工智能研究应从三个问题重新考虑

    5月20日,由中国电子学会主办,ZD至顶网协办的第八届中国云计算大会进入了最后一个日程,在最后一日的全体大会上,英国伯明翰大学首席教授姚新做出了以"三个被遗忘的脑启发计算问题"为题 ...

  10. 如何出色的研究 RGSS3 (三) 形式的调整的细节

    在一个我们研究了添加到窗体方法的选择,这个问题来研究窗体类的细节. 所有形式的父类的 Window_Base 四个参数需要初始化. #--------------------------------- ...

最新文章

  1. cx_Oracle.DatabaseError: ORA-12514
  2. Python数据类型之列表操作方法
  3. 人工智能筑起网络安全“铜墙铁壁”
  4. 决策树算法实现(train+test,matlab) 转
  5. 深度学习在情感分析中的应用
  6. Java8排序–性能陷阱
  7. 数据分析方法-聚类算法
  8. Truncated SVD for faster dection
  9. spring:使用会话和请求作用域
  10. TensorFlow 实现深度神经网络 —— Denoising Autoencoder
  11. pythonchallenge之C++学习篇-01
  12. 【eclipse插件开发实战】Eclipse插件开发2——SWT
  13. 谷歌火狐等浏览器Flash安装失败,安装后进入网站仍提示未安装Flash
  14. 高速公路上边有没有人脸识别摄像头_人脸识别特征介绍以及难题概括
  15. 软件开发工作量的估算方法
  16. 夏商周秦西东汉 三国两晋南北朝 隋唐五代和十国 辽宋夏金元明清
  17. jbpm 历史查询笔记
  18. EXCEL如何设置固定表头
  19. 用于威胁情报分析的虚拟机
  20. ios底部栏设计规范_设计干货:底部导航栏规范设计总结

热门文章

  1. win10开始菜单卡住没反应,其他都没问题 看视频也没问题。
  2. CUBA Platform系列:自定义可视化组件
  3. 开展网络口碑营销之前必须做好的几件事
  4. 01_excel基础知识1
  5. Hadoop、Storm和Spark主流分布式系统特点和应用场景
  6. 杂谈(20210405)
  7. java运行不了_java运行不出来怎么回事?Java如何成功运行?
  8. 报错 Duplicate keys detected
  9. Enterprise Architect 类关系对应解析
  10. 使用Fiddler抓取安卓手机APP链接