ll相关内容

如何手动构建 AST?

我目前正在学习解析,但我对如何生成 AST 有点困惑.我编写了一个解析器,可以正确验证表达式是否符合语法(当表达式符合时它是静默的,如果不符合则引发异常).我从哪里开始构建 AST?我找到了大量有关构建 LL(1) 解析器的信息,但关于构建 AST 的信息却很少. 我当前的代码(用非常简单的 Ruby 编写,包括词法分析器和解析器)可在 github 上找到:https://gist.git ..
发布时间:2021-11-26 17:59:19 其他开发

带有 ANTLR 或 ANTLR3 的 LL(1) 表驱动编译器

是否可以使用 ANTLR 或 ANTLR3 创建一个 LL(1) 表驱动(非递归)编译器? 解决方案 没有 然而,由于 ANTLR 是开源的,你可以修改 ANTLR 的一个分支来做到这一点. ANTLR 将词法分析器和解析器构建为递归下降源代码.这就是 ANTLR 易于使用和流行的原因,因为人们可以查看源代码并了解词法分析器和解析器与查看表条目相比如何工作.因为是源代码,所以也 ..
发布时间:2021-11-11 03:53:25 其他开发

可以修改 ANTLR 语法文件以供 PLY 使用吗?

我想制作一个使用 PLY 解析 Javascript 文件的 python 程序,我没有找到任何实现 ECMAScript、使用 PLY 的 Javascript 规则的解析器的来源. 我唯一发现的是一些用于解析 javascript 和 ecmascript 的 ANTLR 语法文件:http://www.antlr.org/grammar/1153976512034/ecmascript ..
发布时间:2021-11-11 03:46:04 其他开发

Antlr左递归问题

我的 Antlr 语法中有一个左递归问题.虽然我想我明白为什么会出现问题,但我想不出解决办法.问题出在我的数据类型规则的最后一行.我已经包含了整个语法供您查看: 语法测试;选项 {output=AST;ASTLabelType=CommonTree;}令牌{功能;属性;孩子们;合成的;}程序:功能;功能:ID(OPEN_BRACKET(属性(逗号?属性)*)?CLOSE_BRACKET)?(OP ..
发布时间:2021-11-11 03:37:31 其他开发

使用堆栈实现的LL(1)解析器:如何构建AST?

我目前正在手动构建一个解析器.它是LL(1)解析器.目前,它是一个很好的识别器:它的函数parse(List tokens)决定令牌是否是该语言的成员. 现在,我想为该输入构建相应的AST.但是,我知道如何以递归的方式实现它(已经做到了).也就是说,对于挑战,我使用具有经典算法的堆栈来实现我的堆栈: next ..
发布时间:2021-04-24 19:37:41 其他开发

编译-LL1语法

我正在研究编译器的魔力,但我不明白结果. 这是语法: S->一种 #A->B G D EB->+ |-|爱普生C->c C |爱普生G->碳D->.C |爱普生E->e B G |爱普生 当我尝试查找“第一"和“跟随"集时,得到的结果与使用在线预测变量得到的结果不同. 以下是给出的结果: 非终端符号/跟随集新币$一种 #cC e,.,#G ..
发布时间:2021-04-23 19:59:46 其他开发

可以将ANTLR语法文件修改为供PLY使用吗?

我想制作一个使用PLY解析Javascript文件的python程序,但找不到任何实现ECMAScript的解析器源,即使用PLY的Javascript规则. 我发现的唯一东西是一些ANTLR语法文件,用于解析javascript和ecmascript: http://www.antlr.org/grammar/1153976512034/ecmascriptA3.g http://www. ..
发布时间:2020-06-29 20:56:29 其他开发

使用PyParsing解析函数调用

我正在尝试解析一种简单的语言.问题来自于解析函数调用.我试图告诉它,函数调用是一个表达式,后跟左括号,参数列表和右括号.我有这样的东西: expr = Forward() iden = Word(alphas+'_', alphanums+'_') integer = Word(nums) binop = operatorPrecedence(expr, ...) # irrevelant ..
发布时间:2020-06-29 20:56:25 其他开发

LR(0),LL(0),LALR(1)等之间的关系?

我真的很难理解之间的关系: LR(0) LL(0) LALR(1) SLR(1) LR(1) LL(1) 我很确定LALR(1)和SLR(1)是LR(1)的子集,但是我对其他的内容一无所知.他们都是独家的吗? LL(0)是LL(1)的子集吗? 谢谢 解决方案 包含规则如下: 每个LR(0)语法也都是SLR(1),但并非所有SLR(1)语法都是LR(0). ..
发布时间:2020-06-29 20:56:22 其他开发

LL(1)解析器中FIRST和FOLLOW集的目的?

有人可以向我解释LL(1)语法中应如何使用FIRST和FOLLOW吗?我知道它们用于语法表构建,但是我不知道如何. 解决方案 在LL(1)解析器中,解析器的工作原理是维护一个工作区,该工作区最初是种子到开始符号的,后面是字符串结束标记(通常表示为$).在每个步骤中,它都会执行以下操作之一: 如果工作区的第一个符号是终端,则将其与下一个输入标记进行匹配(如果不匹配,则报告错误). 如 ..
发布时间:2020-06-29 20:56:19 其他开发

Antlr左递归问题

我在Antlr语法中有一个左递归问题.虽然我认为我理解为什么存在问题,但我无法想到解决方案.问题出在我的数据类型规则的最后一行.我已经包括了整个语法供您查看: grammar Test; options {output=AST;ASTLabelType=CommonTree;} tokens {FUNCTION; ATTRIBUTES; CHILDREN; COMPOSITE;} pro ..
发布时间:2020-06-29 20:56:16 其他开发

为什么LL语法不能是左递归的?

在 龙书 中,LL语法定义为如下: 当且仅当对于任何产生式A -> a|b,以下两个条件适用时,语法为LL. FIRST(a)和FIRST(b)是不相交的.这意味着它们不能同时导出EMPTY 如果b可以派生EMPTY,则a不能派生任何以FOLLOW(A)开头的字符串,即FIRST(a)和FOLLOW(A)必须不相交. 我知道LL语法不能递归,但是正式原因是什么?我猜左递归语 ..
发布时间:2020-06-29 20:56:14 其他开发

Ebnf –这是LL(1)语法吗?

我在维基百科上找到以下 EBNF ,描述了EBNF: letter = "A" | "B" | "C" | "D" | "E" | "F" | "G" | "H" | "I" | "J" | "K" | "L" | "M" | "N" | "O" | "P" | "Q" | "R" | "S" | "T" | "U" | "V" | "W" | "X" | "Y" | "Z ..
发布时间:2020-05-25 01:27:58 其他开发

是否找到不是LL(1)的语言?

最近我一直在处理很多不是LL(1)的语法,其中许多可以转换为LL(1)的语法. 但是,我从未见过不含糊的语言的示例,该示例不是LL(1).换句话说,一种语言的语法没有任何歧义,不是LL(1)),我也不知道如何证明我偶然发现了一种语言. 有人知道如何证明一种特定的语言不是LL(1)吗? 解决方案 我想了好一会儿,然后在维基百科: S -> A | B A -> 'a' A ..
发布时间:2020-05-25 01:25:10 其他开发

制作语法LL(1)

我有以下语法: S→a S b S | b S a S | ε 由于我正在尝试为其编写一个小型编译器,所以我希望使其成为LL(1).我看到这里似乎有一个FIRST/FOLLOW冲突,而且我知道我必须使用替代来解决它,但是我不确定该如何解决.这是我建议的语法,但是我不确定它是否正确: S-> aSbT | epsilon T-> bFaF | epsilon F-> e ..
发布时间:2020-05-25 01:12:15 其他开发

用于上下文无关文法的FIRST和FOLLOW集的计算算法

我需要一种算法来为语法计算FIRST和FOLLOW集. 是否有用于计算这些的简单算法或简单代码? 解决方案 大多数编译器教科书和有关解析算法的书中都讨论了用于计算FIRST和FOLLOW集的标准算法.如果您上的课程涵盖了这一主题,并且没有指定的阅读材料或与此主题相关的材料,我会感到惊讶. 我教了一个有关编译器构造的课程,并提供了一些讲座幻灯片,在这里可能会有用.您可能想查看幻灯片3 ..
发布时间:2020-05-25 01:07:18 其他开发

如何手动构造AST?

我目前正在学习解析,但是对于如何生成AST感到有些困惑.我编写了一个解析器,可以正确地验证表达式是否符合语法(当表达式符合时它是静默的,而当表达式不符合时它会引发异常).我要从哪里去建立AST?我发现了很多有关构建LL(1)解析器的信息,但随后构建AST的信息很少. 我的当前代码(使用非常简单的Ruby编写,包括一个词法分析器和解析器)可以在github上找到: https://gist.g ..
发布时间:2020-05-25 01:06:25 其他开发

无法用LL表示的LR语法示例?

所有的LL语法都是LR语法,但并非相反,但是我仍然很难解决这个区别.我很想知道没有对应的LL表示形式的LR语法的小例子,如果有的话. 解决方案 就语法而言,它很容易-任何简单的左递归语法都是LR(可能是LR(1)),而不是LL.因此,列表语法如下: list ::= list ',' element | element 是LR(1)(假设element的乘积是),但不是LL.这样 ..
发布时间:2020-05-25 01:02:19 其他开发

解析器的性能:PEG与LALR(1)或LL(k)

我已经看到一些主张,通常说来,优化的PEG解析器不能比优化的LALR(1)或LL(k)解析器快. (当然,解析的性能取决于特定的语法.) 我想知道PEG解析器是否有任何特定限制,无论是对一般语法还是对某些使它不如LALR(1)或PEG语法的子集有效的语法, LL(k)性能方面. 我特别对解析器生成器感兴趣,但是假设可以在任何特定情况下调整它们的输出以提高性能.我还假设解析器已经过优化, ..
发布时间:2020-05-25 01:00:51 其他开发

与LR解析器相比,LL解析器有什么优势?

与今天的解析器生成器工具相比,LL解析器相对于LR解析器具有什么优势,以保证其在今天的解析器生成工具中的相对流行? 根据维基百科,LR解析似乎比LL具有优势: LR解析比LL解析可以处理更大范围的语言,并且在错误报告方面也更好,即,当输入不尽快符合语法时,它可以检测语法错误.这与LL(k)(或更糟糕的是,LL(*)解析器)形成对比,后者可能由于回溯而将错误检测推迟到语法的不同分支,这通 ..
发布时间:2020-05-25 00:56:46 其他开发