有人能给我提供一个简单的 LL 分析和 LR 分析的例子吗?
我最近试图自学语言/无上下文语法解析器,大部分内容似乎都很清晰易懂,只有一点不太理解。我特别关注 LL(k) 文法,其中两个主要算法似乎是 LL 解析器(使用堆栈/解析表)和 递归下降解析器(只需使用递归)。 据我所知,递归下降算法可用于所有 LL(k) 文法,可能还有更多,而 LL 解析器...
如何确定语法是LL(1)、LR(0)还是SLR(1)? 有谁能够使用这个示例或其他示例来解释一下吗? X → Yz | a Y → bZ | ε Z → ε
是否有一个在线资源,包含一些主要解析算法(LL(1), LR(1), LR(0), LALR(1))的语法集合?我找到了很多属于这些族群的单个语法,但是我不知道是否有一个好的资源,其中有人编写了一大批示例语法。 有没有人知道这样的资源?
LL解析器在今天的解析器生成工具中相对流行的原因是什么优势? 根据维基百科,LR分析似乎比LL分析有优势: LR分析可以处理比LL分析更广泛的语言,并且在错误报告方面也更好,即当输入不符合语法时,它尽可能早地检测到语法错误。这与LL(k)(甚至更糟的是LL(*)解析器)形成对比,后者可能由...
(我正在用假期时间研究一些语言理论,如果这是一个幼稚的问题,请见谅。) 根据此处所述: LL语法,特别是LL(1)语法,具有很大的实际意义,因为这些语法的解析器易于构建,并且许多计算机语言都是为了这个原因而设计成LL(1)。 出于好奇,那么哪些当代计算机语言是LL(1)?C、Ja...
有人能解释一下在LL(1)文法中如何使用FIRST和FOLLOW吗?我知道它们被用于语法表的构建,但我不明白具体应该怎么做。
我在维基百科上阅读了有关LL(0)和LR(0)解析器的内容,发现虽然存在LR(0)解析器,但并不存在LL(0)解析器。 根据我的理解,LL(k)/LR(k)中的k代表解析器可以查看当前正在处理的字符之后多少个字符。 那么我的问题是,为什么尽管存在LR(0),却没有LL(0)解析器呢?
所有的LL文法都是LR文法,但反之则不然,但我仍然很难区分它们。如果存在的话,我很好奇是否有一些LR文法没有等效的LL表示的小例子。
我一直在使用lex/yacc,现在我正在尝试切换到ANTLR。主要的担忧是ANTLR是LL(*)解析器,而yacc则是LALR解析器。我习惯了自下而上地思考问题,不确定LL文法的优势在哪里。人们说LL文法更容易理解,而且现在更受欢迎。但似乎LR解析器更强大,例如LL解析器无法处理左递归,虽然似...