SPIR-V 研究:编译器基本原理(三) - Chomsky文法分类

来源:互联网 发布:算法工程师主要做什么 编辑:程序博客网 时间:2024/05/22 08:27

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)
0 0
原创粉丝点击