📝 compiler

64篇技术文档
  解析树

📅  最后修改于: 2020-12-06 06:41:13        🧑  作者: Mango

解析树解析树是符号的图形表示。该符号可以是终端的,也可以是非终端的。在解析中,字符串是使用开始符号导出的。解析树的根是该开始符号。它是符号的图形表示,可以是终端或非终端。解析树遵循运算符的优先级。最深的子树首先遍历。因此,在父节点的运算符拥有的子树运算符较少的优先级。解析树遵循以下几点:所有叶节点必须是终端。所有内部节点必须是非终端节点。按顺序遍历给出原始输入字符串。例:生产规则:输入:步骤1:第...

  歧义

📅  最后修改于: 2020-12-06 06:42:10        🧑  作者: Mango

歧义性如果对于给定的输入字符串,存在不止一个最左导数,不止一个最右导数或不止一个解析树,那么语法就是模棱两可的。如果语法不是模棱两可的,那么就将其称为模棱两可。例:对于字符串aabb,以上语法生成两个解析树:如果语法有歧义,则对编译器构造不利。没有任何方法可以自动检测并消除歧义,但是您可以通过重写整个语法而不会歧义来消除歧义。...

  解析器

📅  最后修改于: 2020-12-06 06:43:03        🧑  作者: Mango

解析器解析器是一种编译器,用于将数据分解为来自词法分析阶段的较小元素。解析器以令牌序列的形式获取输入,并以解析树的形式生成输出。解析有两种类型:自上而下的解析和自下而上的解析。自上而下的削皮自上而下的解析称为递归解析或预测解析。自下而上的解析用于为输入字符串构造一个解析树。在自上而下的解析中,解析从起始符号开始,然后将其转换为输入符号。输入字符串“ acdb”的解析树表示如下:自底向上解析自下而上...

  Shift减少解析

📅  最后修改于: 2020-12-06 06:43:54        🧑  作者: Mango

移位减少解析移位缩减解析是将字符串缩减为语法的开始符号的过程。ShiftReduce解析使用堆栈来保存语法,并使用输入磁带来保存字符串。Sift reduce解析执行两个操作:shift和reduce。这就是为什么将其称为shift减少解析的原因。在移位操作中,输入字符串的当前符号被压入堆栈。每次减少时,符号将被非终端代替。该符号在产品的右侧,非终端在产品的左侧。例:语法:输入字符串:解析表:移位...

  运算符优先级解析

📅  最后修改于: 2020-12-06 06:44:47        🧑  作者: Mango

运算符优先级解析运算符优先级语法是种移位减少解析方法。它适用于一小类运算符语法。如果语法具有两个属性,则称其为运算符优先级语法:任何生产的RHS都不具有a∈。没有两个非终端相邻。运算符优先级只能在语法的终端之间建立。它忽略非终结符。存在三个运算符优先级关系:a⋗b表示终端“ a”的优先级高于终端“ b”的优先级。a⋖b表示终端“ a”的优先级比终端“ b”低。a≐b表示终端“ a”和“ b”都具有...

  LR解析器-JavaPoint

📅  最后修改于: 2020-12-06 06:45:41        🧑  作者: Mango

LR解析器LR解析是自底向上解析的一种类型。它用于解析大量的语法。在LR解析中,“ L”代表输入的从左到右扫描。“ R”代表反向构造最正确的派生词。“ K”是用于做出解析决定数量的前瞻输入符号的数量。LR解析分为四个部分:LR(0)解析,SLR解析,CLR解析和LALR解析。LR算法:LR算法需要堆栈,输入,输出和解析表。在所有类型的LR解析中,输入,输出和堆栈均相同,但解析表不同。图:LR解析器...

  LR 0项目的规范集合

📅  最后修改于: 2020-12-06 06:46:39        🧑  作者: Mango

LR(0)物品的规范收藏LR(0)项目是产品G,在产品右侧的某个位置带有点。LR(0)项用于指示在解析过程中,已扫描了多少输入直到给定点。在LR(0)中,将reduce节点放置在整行中。例给定语法:添加增广产品并在G的每个产品的第一个位置插入“•”符号I0状态:将增产增加到I0状态并计算关闭I0 =闭合(S`→•S)将所有以S开头的产品添加到I0状态,因为“•”后跟非终结符。因此,I0状态变为I0...

  SLR 1解析

📅  最后修改于: 2020-12-06 06:47:34        🧑  作者: Mango

单反(1)解析SLR(1)是指简单的LR解析。与LR(0)解析相同。唯一的区别在于解析表。要构造SLR(1)解析表,我们使用LR(0)项的规范集合。在SLR(1)解析中,我们仅在左手侧跟随放置减少移动。SLR(1)解析涉及的各个步骤:对于给定的输入字符串,编写上下文无关的语法检查语法的歧义在给定的语法中添加增值产生创建LR(0)个项目的规范集合绘制数据流程图(DFA)构造一个SLR(1)解析表单反...

  CLR 1解析

📅  最后修改于: 2020-12-06 06:48:29        🧑  作者: Mango

CLR(1)解析CLR是指规范的前瞻。 CLR解析使用LR(1)项的规范集合来构建CLR(1)解析表。与SLR(1)解析相比,CLR(1)解析表产生更多的状态。在CLR(1)中,我们仅将reduce节点放置在超前符号中。CLR(1)解析涉及的各个步骤:对于给定的输入字符串,编写上下文无关的语法检查语法的歧义在给定的语法中添加增值产生创建LR(0)个项目的规范集合绘制数据流程图(DFA)构造CLR(...

  LALR 1解析

📅  最后修改于: 2020-12-06 07:12:54        🧑  作者: Mango

LALR(1)解析:LALR是指先行LR。为了构造LALR(1)解析表,我们使用LR(1)项的规范集合。LALR(1)解析与CLR(1)解析相同,只是解析表不同。例添加增广产品,在G的每个产品的第一个位置插入“•”符号,并添加前瞻。I0状态:将增产添加到I0状态并计算ClosureLI0 =闭合(S`→•S)将所有以S开头的产品添加到I0状态,因为“•”后跟非终结符。因此,I0状态变为I0 =S`...

  自动解析器生成器

📅  最后修改于: 2020-12-06 07:13:44        🧑  作者: Mango

自动解析器生成器YACC是生成解析器程序的自动工具。正如我们在本教程的第一部分中讨论YACC一样,您可以再次浏览概念以使事情更加清楚。青年会...

  语法定向翻译

📅  最后修改于: 2020-12-06 07:19:21        🧑  作者: Mango

语法定向翻译在语法指导的翻译中,连同语法一起,我们关联了一些非正式的符号,这些符号称为语义规则。所以我们可以说在语法定向翻译中,每个非终结符都可以获取一个或多个属性,有时还可以获取0个属性,具体取决于属性的类型。这些属性的值由与生产规则关联的语义规则评估。在语义规则中,属性为VAL,并且属性可以包含字符串,数字,存储位置和复杂记录之类的任何内容在语法定向翻译中,每当构造体遇到编程语言时,就会根据该...

  语法定向翻译方案

📅  最后修改于: 2020-12-06 07:20:15        🧑  作者: Mango

语法定向翻译方案语法定向翻译方案是上下文无关的语法。语法指导的翻译方案用于评估语义规则的顺序。在翻译方案中,语义规则嵌入在作品的右侧。括号中的括号表示要执行动作的位置。它写在产品的右侧。例ProductionSemantic RulesS → E ${ printE.VAL }E → E + E{E.VAL := E.VAL + E.VAL }E → E * E{E.VAL := E.VAL * ...

  语法定向翻译的实现

📅  最后修改于: 2020-12-06 07:21:13        🧑  作者: Mango

语法定向翻译的实现语法直接转换是通过构造一个解析树并以从左到右的深度第一顺序执行动作来实现的。SDT通过解析输入来实现,并生成一个解析树作为结果。例ProductionSemantic RulesS → E ${ printE.VAL }E → E + E{E.VAL := E.VAL + E.VAL }E → E * E{E.VAL := E.VAL * E.VAL }E → (E){E.VAL...

  编译器中间代码

📅  最后修改于: 2020-12-06 07:22:09        🧑  作者: Mango

中间码中间代码用于将源代码转换为机器代码。中间代码位于高级语言和机器语言之间。图:中间代码生成器的位置如果编译器直接将源代码转换为机器代码而不生成中间代码,则每台新机器都需要完整的本机编译器。中间代码使所有编译器的分析部分保持相同,这就是为什么它不需要为每台唯一的计算机都使用完整的编译器的原因。中间代码生成器从其前身阶段和语义分析器阶段接收输入。它以带注释的语法树的形式接受输入。使用中间代码,根据...