精华内容
下载资源
问答
  • uuoagc 用于高阶属性文法增量评估的概念验证代码
  • 对于属性文法的理解

    千次阅读 2018-12-18 14:09:02
    属性文法是在上下文无关文法的基础上为每个文法符号(终结符或非终结符)配备若干个相关的“值”(称为属性)。 属性分为两类: (1)综合属性 用于“自下而上”传递信息 在语法树中,一个结点的综合属性的值,...

    属性文法是在上下文无关文法的基础上为每个文法符号(终结符或非终结符)配备若干个相关的“值”(称为属性)。

    属性分为两类:

    (1)综合属性

    用于“自下而上”传递信息

    在语法树中,一个结点的综合属性的值,由其子结点的属性值确定

    S—属性文法:仅仅使用综合属性的属性文法

    (2)继承属性

    用于“自上而下”传递信息。

    在语法树中,一个结点的继承属性由此结点的父结点和/或兄弟结点的某些属性确定

     

    刚开始接触的时候对于继承属性没有很直接的概念,通过学习对它有了一定的了解。

    举两个具体的例子来说明:

     

    (1)综合属性:

    考虑语句:a = b + c

    对应的文法如下:

    E-> T + T

    T-> id

     

    其中,属性val是文法符号的数值,属性lexval是由词法分析器返回的数值。为id1+id2构建语法分析树,其中,id1id2lexval属性分别为28

    可见E的属性值由子节点T的属性决定,而T由子节点id1id2的属性值确定。

     

    (2)继承属性:

    考虑语句:int a,b,c

    对应的文法如下:

    D->int L

    L->L, id | id

    推导的步骤为D->L->L,id->L,id,id->id,id,id

    对应的分析树如下:

    图中箭头方向为属性值传递的方向。比如L的属性由其兄弟节点“int“决定,a,b, c的属性由其父节点的属性决定。

    展开全文
  • 书中用了两章讲述该内容(属性文法和语法制导翻译、语义分析和中间代码生成)。本节描述的主要是进行语法分析与中间代码的生成的一些储备知识。   先聊聊语法分析和本章的关系:在第一章的时候,我们讲述了“遍”...

      截至到上一章,说完了语法分析的全部内容。从第一章的结构图可以了解到,紧接着语法分析的是语义分析与中间代码的生成。书中用了两章讲述该内容(属性文法和语法制导翻译、语义分析和中间代码生成)。本节描述的主要是进行语法分析与中间代码的生成的一些储备知识。
      先聊聊语法分析和本章的关系:在第一章的时候,我们讲述了“遍”的概念。之前只是简单的说了可将语法分析与中间代码生成放到一遍中完成,这章的内容就会解释到其原因。也可分为自上而下和自下而上两种类型。会在后续的内容里慢慢体现。
      回到本章来,希望通过看完这篇文章能够明白以下几个问题:
        1. 什么是属性文法及属性文法的构造方法
        2. 什么是语法制导翻译及特殊类型“翻译模式”的构造

      本章有许多概念性的东西,我先在此进行列举作为关键词:语法制导翻译、属性文法、综合属性、继承属性、抽象语法树、S-属性文法、L-属性文法、翻译模式。

    语法制导翻译

    在这里插入图片描述
      通过对语法制导翻译名字的由来的解释可明白其与语法分析的关系了吧!我理解的语法制导翻译就是在原来语法分析的各个节点赋予其独特的含义,该含义就是语义。有这么一个例子说明语法和语义之间的关系:名字和标识符的区别。标识符是语法的概念、名字是语义的概念。一个标识符比如Jordan,可能是篮球运动员迈克尔乔丹的名字,也可能是国家约旦的名字。不过如果赋予其含义,比如篮球运动员,Jordan就变成了独特意义的球星名。

    属性文法

      在上下文无关文法的基础上,为每个文法符号(终结符和非终结符)配备若干相关的“值”(也称属性),对于文法的每个产生式都配备了一组属性的计算规则(语义规则),这种文法称为属性文法。
      从上面的定义看到核心内容就是属性,什么叫属性呢?比如变量的类型(int/char…),变量的值(1,2…)等等都可算作属性。所以属性是各种各样的,组合起来也是极其复杂的。属性文法依托于上下无关文法,即文法是由产生式所定义的,各个属性间的关系也离不开产生式。课本上为了内容直观,只介绍了两种属性:综合属性和继承属性(属性不止这两类,但这两种比较基础)。
      属性文法一般的表示方法如下(一条规则对应的语义规则可以不唯一):
    在这里插入图片描述

    综合属性

      用于自下而上传递信息;在语法树中,一个结点的综合属性由其子结点的属性值确定,因此,通常使用自底向上的方法在每一个结点处使用语义规则计算综合属性的值。

    继承属性

      用于自上而下传递信息;在语法树中,一个结点的继承属性由此结点的父结点或兄弟结点的某些属性确定。
    综合属性和继承属性的主要区别是依赖关系不同。一般来说,综合属性在自底向上的语法分析过程中计算,而继承属性在自上而下的语法分析过程中计算。其实继承属性也可以在自底向上的语法分析过程计算,但应用较少。
      再形式化的说明下属性的计算规则吧:
    在这里插入图片描述
      从上面可以看出一个普遍规律就是:继承属性总是由位于产生式右边的字符定义,而综合属性由左边定义。其实这个是封装性的要求。限制了在一个产生式范围内只能计算产生式左边非终结符的综合属性,只能计算产生式右边非终结符的继承属性。后面的例题会着重体现这点!
      在属性文法中有一些是需要特别注意的,我放张图上来,对容易混淆的做特别解释:
    在这里插入图片描述
      注意最后一点中:综合属性由子节点决定,继承属性由父节点及兄弟节点决定。那在语法分析树中,叶子节点没有子节点,根节点也没有兄弟或父节点。所有做了一些特殊规定:叶子结点的综合属性事先准备好(由词法分析器提供,叶子节点一般都是变量值这类的),根节点不是无继承属性,而是根节点的继承属性只能预先给出
      前面说到了语法制导翻译,下面结合属性文法做更为详细的说明:
      基于属性文法的处理过程通常是:对单词符号串进行语法分析,构造语法分析树,然后根据需要遍历语法分析树,并在语法分析树的各结点处按语义规则进行计算。
      看完上面这段话,需要明白一个事儿,疑惑一个事儿。明白的是属性文法的构造是根据具体的输入字符串,建立相应的语法分析树决定的。疑惑的是选择什么样的方式去遍历语法分析树呢?(答案是深度优先搜索
    在这里插入图片描述
      该图是整个语法制导翻译的步骤图,我们先来解释下依赖图:
      依赖图:一种有向图,在一颗语法树中表示结点的继承属性和综合属性之间的相互依赖关系(这种属性之间的依赖关系由文法的语义规则确定)。
      依赖图构造的算法如下:
    在这里插入图片描述
      其实依赖图很直观,就是当前要求的那个值是哪里传送过来的(有点类似,需要的数据都传过来,汇总到一起进行运算)。
      依赖图中有一类特殊情况:两个节点相互依赖,形成循环(这其实是不利于我们进行分析的)。
      如果属性文法不存在属性之间循环的依赖关系,那么称该文法为良定义。像下面这样:
    在这里插入图片描述
      下面举个例子,对上面内容进行一个整合:
    在这里插入图片描述
      第一眼看上去有点凌乱(例6.4和例6.5在一起了,我们的目标是例6.4哈),我们梳理一下啊~先分清我们有什么?要求什么?已知的是属性文法(即产生式及语义规则的对应)和输入的一个字符串(real id1, id2, id3)。要求的是这个字符串对应的分析树中各节点的属性。
      首先按照输入的字符及产生式把语法分析树画出来(这就考验前面的基础了)。接着需要求出每个节点的属性(或是综合属性,或是继承属性)。按照前面的判断法则,可知T.type是综合属性(产生式2,3),L.in是继承属性(产生式1,4 特别注意第四个产生式的两个L进行标号区分。接着从下往上,对于最底层的叶子节点按照已知(L->id 中id entry即为已知),在使用时直接赋值即可。
      每个节点可能会有属性,也可以有多个属性。每个属性都要进行计算,按照什么样子的顺序呢?这就是拓扑排序,如果a依赖b,则b排在a的前面。本质就是被依赖的属性要先被计算出来。
    在这里插入图片描述
      前面提到遍历树是通过深度优先搜索实现的,但有两个前提条件:

      满足前提条件,即可用下面的算法执行:
    在这里插入图片描述

    抽象语法树

      (为什么需要抽象语法树呢?其实抽象语法树是一种中间代码形式,很多编译器为了优化都先生成抽象语法树,然后在此基础上进行优化)
      需要在此提前说明抽象语法树不同于语法分析树,经常叫其简称。对应关系如下:
        抽象语法树——语法树
        语法分析树——分析树
      抽象语法树概念如下:
       表示程序层次结构的树,它把分析树中对语义无关紧要的成分去掉,是语法树的抽象形式,也称作语法结构树,或结构树。抽象语法树是常用的一种中间表示形式。
      特别注意:在抽象语法树中,运算符号和关键字都不在叶结点,而是在内部结点中出现
      举个例子:
    在这里插入图片描述
      建立抽象语法树主要有三个函数(利用该三个函数就可以完成整个抽象语法树的构造):
    在这里插入图片描述
      用抽象语法树来表示的属性文法就像下面这样(使用节点的构造表示语义规则):
    在这里插入图片描述
    注意下:对于T->(E)这种情况,可忽略()的存在,直接赋值

    S-属性文法(simple)

      S-属性文法是只包含综合属性,所以对于S属性文法的计算是结合着自下而上进行的。实际实现时S-属性文法是结合LR分析器完成的(再次体现了一遍的思想),不同的地方是在栈中增加了一个存放属性的域,结构如下:
    在这里插入图片描述
      规约时,就把产生式右边符号出栈规约为左侧符号,并把对应属性放入域中:
    在这里插入图片描述
      对于S-属性文法,主要存在一种提醒,就是伴随着LR分析,填充栈表信息。我这里放一道完整的例题了。
    在这里插入图片描述

    L-属性文法

      L-属性文法的定义如下:
      如果A→X1X2…XnP,其每一个语义规则中的每一个属性都是一个综合属性,或是Xj(1j  n)的一个继承属性,这个继承属性仅依赖于:
        a.产生式中Xj的左边符号X1,X2,…Xj-1的属性;
        b.A的继承属性。
      S属性文法和L属性文法的关系:S属性文法是L属性文法中的一种,即无继承属性参与。
      举一个例子说明什么样的不是L属性文法:
    在这里插入图片描述
      原因在于Q.i的计算使用其右侧的R.s属性,违背了定义a的要求。由定义判断是否为L-属性文法也是需要掌握的。

    翻译模式

      之前一直让我很苦恼,翻译模式到底是什么?其实翻译模式就是语法制导翻译中比较特殊的一种,根据翻译模式,可以让人更明白到了哪步需要干哪件事。翻译模式穿插在产生式中,当下一项是翻译模式时就执行该翻译模式的动作。也可认为翻译模式就是动作。(以上是我自己的一些想法,可以回过头来再看一看)。
      形式化的概念定义如下:
    在这里插入图片描述
      我还是举个例子,用图说话吧~
    在这里插入图片描述
      在上面的翻译模式中,会不断执行动作,最终得到后缀式。
      那如何构造翻译模式呢?
       有前提条件:一定要是L-属性文法并且保证语义动作不会引用还没有计算的属性值(其实就是正确的文法吧~)
      分了两种可能性:
    在这里插入图片描述
      前面介绍到属性文法基础是上下无关文法,在使用翻译模式构造自上而下的时候也会存在熟悉的两个问题:左递归和提取公共左因子
      对两种问题的处理方式与之前相同,都是通过引入非终结符将左递归变为右递归或者提取出公共因子。体现在翻译模式上也大同小异,举个例子,了解其构造过程即可:
      原始产生式如下:
    在这里插入图片描述
      消除左递归后产生式如下:
    在这里插入图片描述
      构造其语法分析树并计算各属性值:
    在这里插入图片描述
      推广到一般情况如下:
    在这里插入图片描述
      如果用抽象语法树来表示以上的翻译模式就是这个样子的:
    在这里插入图片描述
      看了几个例题,可以发现翻译模式构造的一个小规律:综合属性都位于产生式末,继承属性位于紧邻所求符号的前面(即先进行动作求值再引用)

    递归下降翻译器(作用:进行翻译,形成中间代码):

    在这里插入图片描述
    在这里插入图片描述
      从翻译模式里看到,部分的动作嵌入在产生式中。都放在末尾(这个问题其实是放在末尾就能非常容易的在自底向上的语法分析过程中完成属性运算)的方法就是引入新的非终结符,并指向空字:
    在这里插入图片描述
      模拟继承属性的计算(**想表达什么呢?**关键要看前面一节,分析栈中的继承属性。某些继承属性的计算一般是复写规则,在自底向上分析过程中我们可以根据其在分析栈中的位置来访问它,而不需要实际去计算。模拟继承属性的计算是因为下面这种列子,开始设计的属性文法继承属性在需要时在分析栈中位置不固定,因此可以通过一些改造来使其固定)
    在这里插入图片描述
      明显可以看出,综合属性的计算比继承属性方便直观不少。那能不能将继承属性向综合属性进行一下转化呢?方法如下:
    在这里插入图片描述
      那具体是怎么改变的呢?
        这个地方上课是画了两个语法分析树来解释的,第一个类型在左子树,id在右子树。第二个 类型和id都在一边

      这章主要是一些基础概念,现在学完了所有内容意识到,前后两章联系是很紧密的。对于基本的概念还是要掌握扎实,继续加油吧!

    感谢编译原理课程谢老师对本文的耐心修改,因作者水平有限,如有错误之处,请在评论区下方指出,谢谢!

    展开全文
  • 一些基本的概念: 属性文法:是在上下文无关文法的基础上为每个文法符号(终结符或非终结符)配备若干个相关的“值”(称为属性)。属性:代表与文法符号相关的信息,和变量一样,可以进行计算和传递。综合属性:...

          第六章主要讲了属性文法、语义规则、基于属性文法的处理、S属性的自下而上计算、L-属性文法的自顶向下翻译等内容。


    一些基本的概念

        

    属性文法 是在上下文无关文法的基础上为每个文法符号(终结符或非终结符)配备若干个相关的“值”(称为属性)。

    属性:代表与文法符号相关的信息,和变量一样,可以进行计算和传递。
    综合属性用于“自下而上”传递信息在语法树中,一个结点的综合属性的值,由其子结点的属性值确定
    继承属性用于“自上而下”传递信息。在语法树中,一个结点的继承属性由此结点的父结点和/或兄弟结点的某些属性确定

    语义规则所描述的工作:
    1.属性计算
    2.静态语义检查
    3.符号表操作
    4.代码生成

    基于属性文法的处理方法

     1 输入串语法树依赖图语义规则计算次序计算结果
     这种由源程序的语法结构所驱动的处理办法就是语法制导翻译法。
     语义规则的计算可能产生代码、在符号表中存放信息、给出错误信息或执行任何其它动作。对输入串的翻译也就是根据语义规则进行计算得出结果。
    2 属性的计算次序
        一个有向非循环图的拓扑序是图中结点的任何顺序m1,m2, …mk,使得边必须是从序列中前面的结点指向后面的结点。也就是说,如果mimj是mi到mj的一条边,那么在序列中mi必须出现在mj之前。
    3、树遍历的属性计算方法
     假设语法树已经建立起了,并且树中已带有开始符号的继承属性和终结符的综合属性。然后以某种次序遍历语法树,直至计算出所有的属性。

    4.抽象语法树

    从语法树中去掉对翻译不必要的信息,而获得更有效的源程序中间表示。
     这种经变换后的语法树称之为抽象语法树


    属性文法的自下而上计算
    S—属性文法,它只含有综合属性。综合属性可以在分析符号串的同时由自上而下的分析器来构造。分析器可以保存与栈中文法符号有关的综合属性值。每当进行归约时,新的属性值就由栈中正在归约的产生式右边符号的属性值来计算。可以通过扩充分析器中的栈来存放这些综合属性值
    S-属性文法的翻译器通常可借助于LR分析器实现
     
    L-属性文法的自顶向下翻译
    属性的计算次序受分析方法所限定的分析树结点建立次序的限制。分析树的结点是自左向右生成。如果属性信息是自左向右流动,那么就有可能在分析的同时完成属性计算

    翻译模式

    翻译模式是语法制导定义的一种便于翻译的书写形式。其中属性与文法符号相对应,语义规则或语义动作用花括号{ }括起来,可被插入到产生式右部的任何合适的位置上。
    这是一种语法分析和语义动作交错的表示法,他表达在按深度优先遍历分析树的过程中何时执行语义动作。
    翻译模式给出了使用语义规则进行计算的顺序。可看成是分析过程中翻译的注释。


    本章总结:第六章没有考试内容,知识点比较容易理解,在此就不过多的赘述了


    展开全文
  • 语义分析之一:属性文法

    千次阅读 2017-12-10 23:01:15
    语法分析便是将程序按照语言文法的规则构建成语法树;语义分析便是在语法树构建的基础上完成语言规则的语义动作(类型检查、作用域和可视性检查、一致性检查等)。现今的程序语言绝大多数都是图灵完备的,故而语法...

    编译原理的几个核心阶段:词法分析、语法分析和语义分析,其实编译的本质便是翻译,其各个阶段便是承担不同的翻译任务,词法分析阶段的任务是将程序输入的字符串流翻译成语言认可的字符流(剔除空格和注释等部分);语法分析便是将程序按照语言文法的规则构建成语法树;语义分析便是在语法树构建的基础上完成语言规则的语义动作(类型检查、作用域和可视性检查、一致性检查等)。

    现今的程序语言绝大多数都是图灵完备的,故而语法设计上几乎很难出现决定性的差异,更多的语言特征区别便是在语义动作上设计的不同所带来的效果。其实语言的诸多优美特征都是在语义阶段添加进去的,比如C语言规定变量声明部分必须在操作部分之前全部完成,而C++则可以在程序中随时声明变量,比如一些隐藏的类型转换都是在语义分析阶段完成的,所以某种意义上,语义分析也是语言设计和程序编程间的“银弹”。所以相比于语法阶段的树扩展或图搜索之类的图论知识的枯燥,语义分析阶段可以看到很多和语言特性鲜活的对应关系。

    我们知道,对于语言而言,无论变量、函数、过程在程序中都是用一个标识符来代替,但如果给定了一个标识符,我们如何确定这个标识符的意义呢?其实这便引导出属性文法的概念(其实语义分析的公式化有多种方式,比如操作语义学、公理语义学、属性文法等,其中属性文法最为直观,也是当前绝大多数编译器采用的编译方式),比如变量有int\float\double之类的区别,那显然给定一个变量标识符,必须要指明该标识符的“数据类型属性”,所以必须给所有标识符配备一系列的属性。利用标识符的这些属性,便可以用来配合此前构建的语法树进行一系列的语义动作(类型检查、可见性是否合法等)。

    语义分析一般是和语法分析组合在一起执行的,语法分析完成前一步语法树分析的构建(调用某个产生式完成一步规约,形成当前的树节点),然后语义分析便接着调用相应产生式配备的语义动作或子程序,完成属性文法所要求的语义动作(比如类型转换或生成中间代码)。所以对于属性文法而言,属性的加工和使用过程便是语义处理的意义。

    形式上讲,一个属性文法是一个三元组,A=(G,V,F),一个上下文无关文法G;一个属性的有穷集V和关于属性的谓词函数的有穷集F。每个断言与文法的某产生式相联。如果对G中的某一输入串而言(句子),A中的所有断言对该输入串的语法树结点的属性全为真,则该串也是A语言中的句子,如下便是一个关于属性文法的例子

    1. E→T1+T2  {T1.t=int AND T2.t=int}//谓词,要求若是符合该产生式,则进行相加的两元素必须都是整型
    2. E→T1orT2 {T1.t=bool AND T2.t=bool}
    3. T→num    {T.t∶=int} //属性加工,声明该变量为整型,该标识符数据类型属性被赋值为“整型”
    4. T→true   {T.t∶=bool}
    5. T→false  {T.t∶=bool}

    归根而言,属性文法便是为所有标识符(无论是否是终结符)配备一些属性的文法,这些属性不仅可以描述设计语言的语法有效补充,又可以为语义分析提供足够的数据支持。在推导语法树的过程中,标识符的属性值也在不断加工并通过赋值规则不断层层传递。

    既然介绍完了属性文法的属性重要性,那么如何利用这些属性,便是语义分析的重要所在。下面便摘录《编译原理》一书中的几个例子来演示属性文法的语义处理加工。

    1. 赋值语句的语义翻译

    (1) S→id∶=E {p∶=lookup( id.name); //在符号表中利用id标识符的符号名查找,如果不存在该标识符,则报错,该变量未定义
            if p ≠ nil then
            Emit(p′∶=′E.place) //如果存在,则生成中间代码,该中间代码便是赋值的意义
            else error}
    (2) E→E1+E2 {E.place∶=newtemp; //定义一个临时变量,用来存储两操作数的和,生成中间代码
               if lookup(E1.name) != nil and lookup(E2.name) != nil then
               Emit(E.place′∶=′E1.place′+′E2.place)}
           else
               error}
    (3) E→E1*E2 {E.placeE∶=newtemp;//同上
           Emit(E.place′∶=′E1.place′*′E2.place)}
    (4) E→-E1 {E.placeE∶=newtemp; //同上
           Emit(E.place′∶=′′uminus′E1.place )}
    (5) E→(E1) {E.place∶=E1.place}
    (6) E→id {p:=lookup(id.name)}; //赋值语句
          if p ≠ nil then
          E.place=p.place
          else error}

    2. 类型转换的语义处理

    //对 E→E1*E2 进行类型转换,比如如果int和float相乘,应该先将int转换为float
    E.place∶=newtemp;
    if E1.typeint AND E2typeint then
    begin emit(E.place,′∶=′,E1.place,′*i′, E2.place);
          E.type∶=int
    end
    
    else if E1.typereal AND E2typereal then
    begin emit (E.place,′∶=′,E1.place,′*r′,E2.place);
          E.type∶=real
    end
    
    else if E1.typeint and E2type=real  then
    begin t∶=newtemp;
       emit(t,′∶=′,′itr′,E1.place); //先将E1通过itr操作转换为float浮点数,利用临时变量t存储
       emit(E.place,′∶=′,t,′*r′,E2.place);
       E.type∶=real
    end
    
    else  /*E1·typereal and E2typeint*/
    begin t∶=newtemp;
       emit(t,′∶=′;′itr′,E2.place);
       emit(E.place,′∶=′,E1.place,′*r′,t);
       E.type∶=real
    end;
    }
    

    3. 用数值表示bool值的语义翻译

    //有些语言中,0/1true/false是可以混用的,有没有奇怪为啥?其实这编译语义分析阶段的转换工作
    E→E1 or E2
      {E.place∶=newtemp;
      emit(E.place ′∶=′ E1.place ′or′ E2.place)}
    
    E→E1 and E2
      {E.place∶ =newtemp;
      emit(E.place ′∶=′ E1.place ′and′ E2.place)}
    
    E→not E1
      {E.place∶ =newtemp:;
      emit(E.place ′∶=′ ′not′ E1.place)}
    
    E→(E1)
      {E.place∶=E1.place}
    
    E→id1 relop id2  //relop是指 < = >三操作符的任意一个
      {E.place∶=newtemp;
      emit(′if′id1.place relop id2.place ′goto′ nextstat+3);
      emit(E.place′∶=′′0′);
      emit(′goto′nextstat+2);
      emit(E.place′∶=′′1′)}
    
    E→true
      {E.place∶=newtemp;
      emit(E.place′∶=′ ′1′)} //可以看到在语义翻译阶段,将true翻译成了1
     
    E→false
      {E.place∶=newtemp; 
      emit(E.place ′∶=′ ′0′)} //将false翻译成了0
    展开全文
  • 属性文法 1.属性文法 :是在上下文无关文法的基础上为每个文法符号(终结符或非终结符)配备若干个相关的“值”(称为属性)。 属性 :代表与文法符号相关的信息,和变量一样,可以进行计算和传递。 2.属性的...
  • 编译原理学到第六章,对文法,句法以及语义的分析已经有了一些整体的了解,这一章我们主要学习了如何在自上而下的分析和自下而上的分析中实现属性的计算,这是我们第一次接触属性文法概念,可能会有点陌生,但是在...
  • 编译原理学到第六章,对文法,句法以及语义的分析已经有了一些整体的了解,这一章我们主要学习了如何在自上而下的分析和自下而上的分析中实现属性的计算,这是我们第一次接触属性文法概念,可能会有点陌生,但是在...
  • 属性文法 1.1属性文法 是在上下文无关文法的基础上为每个文法符号(终结符或非终结符)配备若干个相关 的“值”(称为属性,代表与文法符号相关的信息,和变量一样,可以进行计算和传 递)。 1.2属性分类 1.2.1...
  • 属性文法①为文法符号E引进属性符号val,用E.val表示E的值②属性计算规则以赋值语句的形式给出,附在每个产生式后,用花括号括出③为表明同一符号不同的出现位置,用上角标区分④终结符的值由词法分析程序提供2....
  • 时态 tense: 时态首先是动词才有的属性概念,verb tense; 语态 voice: passive voice:被动语态; active voice:主动语态;
  • 龙书P195 SSD 语法制导定义。 综合属性
  • 编译原理——第六章

    千次阅读 2018-06-03 21:32:36
    第六章 属性文法和语法制导翻译知识总结一、属性文法1、属性文法概念:是在上下文无关文法的基础上为每个文法符号(终结符或非终结符)配备若干个相关的“值”(称为属性)。属性:代表与文法符号相关的信息,和变量...
  • 语法制导定义SDD

    千次阅读 2019-05-11 18:05:41
    文章目录概念文法符号的属性综合属性继承属性例子属性文法 概念 语法制导定义SDD是对CFG的推广 将每个文法符号和一个语义属性集合相关联 将每个产生式和一组语义规则相关联,用来计算该产生式中各文法符号的属性值...
  • 1若干概念 右线性文法生成的语言是右线性语言,有限自动机识别和接受的语言是正则语言。而正则文法是左线性文法和右线性文法的统称,所以右线性语言类与正则语言类是同一语言类。 定义1 设G[S]=(VN,VT,P,S)为...
  • 文法和语言的基本知识

    千次阅读 2016-08-11 11:29:22
    主要内介绍内容是程序设计语言的定义,高级语言的一般特性,高级语言的语法描述,上下文无关文法,语法分析树和二义性,乔姆斯基文法体系。任何语言程序都可看成是一定字符集(称为字母表)上的一字符串(有限序列)...
  • 编译原理总复习指导

    2013-05-28 21:09:16
    第6章:属性文法概念,属性分类,S-属性文法,L-属性文法概念; 第7章:中间语言形式; 第8章:符号表的作用,操作分类,组织方式,线性、二叉、杂凑技术; 第9章:参数传递,活动记录结构,存储分配策略; 第10章...
  • 文法和语言2.1 概念2.1.1 语法(文法)1) 词法规则2) 语法规则2.1.2 语义2.1.3 语法规则符号相关概念(1)非终结符(2)终结符(3)开始符号(4)产生式(5)推导(6)归约(7)句型、句子和语言(8)文法规则的递归定义(9) 文法规则...
  • 编译原理学习笔记——正规文法与有限自动机

    千次阅读 多人点赞 2018-04-06 21:25:34
    前导概念 注:我用 单引号(‘ ’)表示 单个字符 双引号(“ ”)表示符号串 这样更容易区分,不过书里面是没有单引号和双引号的! 符号表 单个符号构成的有穷集合,一般表示为 “Σ” 例如:Σ={‘a’,...
  • 词法与文法简介

    2020-01-15 16:11:36
    此外,对于一个文法之中的非终结符,还有 FIRST 集、FOLLOW 集的概念。 对于一个非终结符 A 而言,它的 FIRST 集指 A 可能展开的各种形式中,位于第一的所有终结符所组成的集合。记为 FIRST(A)。 而 FOLLOW 集...
  • 编译原理-文法基础

    2020-02-21 21:03:13
    语义分析与中间代码产生:按照语义规则使用属性文法将语法范畴进行初步翻译、产生中间代码(中间代码即独立于具体硬件的记号系统,四元式、三元式、逆波兰式等。) 优化:按照等价变换规则使用变换方法将中间代码...
  • YDKJS-类型与文法

    2019-03-04 02:15:31
    )和自动封箱两种,在基本类型值上访问对象的属性和方法就会发生自动封箱,比如 var a = "zzz";a.length 。自动封箱,即让封箱在需要的地方隐含发生,这是推荐的,一个是方便另一个是浏览器对于 .length 等常见的...
  • 指针构成现代编程语言中的基本概念,并用于实现动态数据结构(如列表,树等)。但是,许多软件错误可以追溯到指针的错误使用,例如通过取消引用空指针或意外地指向错误的部分。堆。 由于动态数据结构产生了无限制的...
  • 自然语言具有广泛的文法结构,用第8章中所描述的简单方法很难处理如此广泛的文法结构。为了获得更大的灵活性,可改变对待文法类别如S、NP和V的方式。我们将这些原子标签分解为类似字典的结构,以便可以提取一系列...
  • 编译器之语义分析之语法制导翻译语法制导定义基本概念翻译模式基本概念S属性&L属性&继承属性&综合属性基本概念 语法制导定义 基本概念 虽然是在产生式右部嵌入相应的语义动作,虽然他是在建树的时候完成...
  • 不过这个并不重要,我们只要在实际写程序时,为状态加一个属性就可以了。 所以我们暂且抛开某些不重要的东西(例如:某些不是必须的元字符;终结状态和非终结状态),关注正则文法到DFA的转换过程吧。   三、...
  • 2. 特征结构的主要形式化属性是什么,我们如何使用它们来计算?3. 我们现在用基于特征的文法能捕捉到什么语言模式和文法结构9.1 文法特征#描述了如何通过检测文本的特征建立分类器。 #那些特征可能非常简单, 如提取...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 4,145
精华内容 1,658
关键字:

属性文法的概念