问题标签 [ll]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
57 浏览

recursion - 由于左递归,ANTLR 失败。怎么解决?

这是 SQL 选择语句的简单语法

该工具对sql_query定义和定义唠叨不休attribute_list。老实说,我在我的代码中没有看到任何左递归。

谁能解释发生了什么?

0 投票
1 回答
366 浏览

c - 返回 char* 以在 C 中打印

所以我试图在从函数返回后打印出一个 char* 数组,但我不断收到段错误。

然后我去尝试在某个节点上的 main 方法中打印出来。我得到一个分段错误。

0 投票
1 回答
392 浏览

grammar - 如何证明一个文法是 LL(k) for k>1

我有这个练习,它给了我一个语法并要求证明它不是一个LL(1). 这部分很好,尽管之后它问我这个语法是否可以LL(k)(for k>1)。我要遵循什么程序来确定?

0 投票
1 回答
1855 浏览

parsing - LL(1):非歧义语法和先/后冲突

我有一个印象,但我不完全确定它是正确的。如果语法没有歧义,它会不会有 First/Follow 冲突?我相当肯定它不能,但我想得到一些确认。

谢谢你。

0 投票
2 回答
5678 浏览

parsing - 如何使用解析表证明左递归语法不在LL(1)中

我有一个语法,想证明它不在 LL(1) 中:

由于它是一个左递归语法,为了找到第一个和后续集合,我消除了左递归并得到:

但是当我填写解析表时,我没有得到任何包含 2 个条目的单元格。那么如何证明给定的文法不在 LL(1) 中呢?

0 投票
1 回答
894 浏览

parsing - 在 http://hackingoff.com/compilers/ll-1-parser-generator 解释解析表

我在http://hackingoff.com/compilers/ll-1-parser-generator使用以下语法:

输出解析表是

有人可以解释解析表吗?特别是生产规则中只有8行是什么9意思10

0 投票
0 回答
891 浏览

c - ANTLR4 使用 C.g4 语法生成的解析树具有长重复结构

由于自顶向下解析的性质,ANTLR 在到达表达式内部的叶子之前生成具有一些长重复结构的解析树,其中包含许多多余的节点。

例如,在以下代码上使用 C.g4 语法 ( https://github.com/antlr/grammars-v4/tree/master/c ):

生成的树是:

(compilationUnit (translationUnit (externalDeclaration (functionDefinition (declarator (directDeclarator (directDeclarator main) ()))) (compoundStatement { (blockItemList (blockItemList (blockItem (declaration (declarationSpecifiers (declarationSpecifier (typeSpecifier int))))) (initDeclaratorList (initDeclaratorList (initDeclarator (declarator ( directDeclarator a)) = (初始化器 (assignmentExpression (conditionalExpression (logicalOrExpression (logicalAndExpression (inclusiveOrExpression (exclusiveOrExpression (andExpression (equalityExpression (relationalExpression (shiftExpression (additiveExpression (multiplicativeExpression (castExpression (unaryExpression (postfixExpression (primaryExpression 5))))))))) ))))))))),(initDeclarator (declarator (directDeclarator b)) = (初始化程序 (assignmentExpression (conditionalExpression (logicalOrExpression (logicalAndExpression (inclusiveOrExpression (exclusiveOrExpression (andExpression (equalityExpression (relationalExpression (shiftExpression (additiveExpression (multiplicativeExpression (castExpression (unaryExpression (postfixExpression (primaryExpression 10)))))) )))))))))))))));( andExpression(equalityExpression(relationalExpression(shiftExpression(additiveExpression(multiplicativeExpression(castExpression(unaryExpression(postfixExpression(primaryExpression 0)))))))))))))))));( addExpression (multiplicativeExpression (castExpression (unaryExpression (postfixExpression (primaryExpression b)))))))))))))))) ;(表达式 (assignmentExpression (conditionalExpression (logicalOrExpression (logicalAndExpression (inclusiveOrExpression (exclusiveOrExpression (andExpression (equalityExpression (relationalExpression (shiftExpression (additiveExpression (multiplicativeExpression (castExpression (unaryExpression (postfixExpression (postfixExpression (primaryExpression i)) ++))))))))) )))))))) (语句 (compoundStatement { (blockItemList (blockItem (语句 (expressionStatement (表达式 (assignmentExpression (unaryExpression (postfixExpression (primaryExpression b))))) (assignmentOperator =) (assignmentExpression (conditionalExpression (logicalOrExpression (logicalAndExpression (inclusiveOrExpression) ExclusiveOrExpression(andExpression(equalityExpression(relationalExpression(shiftExpression(additiveExpression)(multiplicativeExpression (castExpression (unaryExpression (postfixExpression (postfixExpression (primaryExpression a)) --)))))))))))))))))))))))))))))))))))))))))) ) )

其中与代码存根“int a=5”匹配的树子结构是:

(declaration (declarationSpecifiers (declarationSpecifier (typeSpecifier int))) (initDeclaratorList (initDeclaratorList (initDeclarator (declarator (directDeclarator a))) = (initializer (assignmentExpression (conditionalExpression (logicalOrExpression (logicalAndExpression (inclusiveOrExpression (exclusiveOrExpression (andExpression) equalityExpression (relationalExpression (shiftExpression (additiveExpression) (multiplicativeExpression (castExpression (unaryExpression (postfixExpression (primaryExpression 5))))))))))))))))))

我们清楚地看到,这大约可以简化为:

(declaration (declarationSpecifiers (declarationSpecifier (typeSpecifier int))) (initDeclaratorList (initDeclaratorList (initDeclarator (declarator (directDeclarator a)) = (initializer (assignmentExpression (postfixExpression (primaryExpression 5))))))

我正在使用解析树来执行某些静态分析,并且由于上面显示的多余节点,我需要在系统的侦听器端执行大量检查以访问正确的感兴趣的树节点。

所以我想知道是否有一种简单的方法可以通过使用一组转换规则来删除多余的节点和/或减少长重复结构来修改解析树。

0 投票
1 回答
332 浏览

compiler-construction - 编译器中的项集和 SLR(1) 问题

我遇到了一个由我们的助教解决的旧考试问题。任何人都可以帮助我吗?

当我们创建SLR(1)关于S--> aSb | a语法时,其中一个项目集LR(0)如下所示:

{ S-->a.Sb, S-->a., S-->.aSb, S-->.a}

关于从上述集合中提取的规则,其中哪些是 True:

任何人都可以说为什么(3)是正确的?关于这个问题的一些细节?

编辑:我认为 Goto 指的是 Action 和 goto 表。 在此处输入图像描述

0 投票
1 回答
104 浏览

compiler-construction - 如何将语法转换为自上而下的可解析语法

我有这部分语法

我需要使用它来创建一些 SD 集,然后在解析表上创建。

但是,在此之前,我应该将其转换为自上而下的可解析语法。

我的问题是你是怎么做到的?我知道你必须摆脱左递归,但我该怎么做呢?

我阅读了维基百科的文章和其他一些来自大学的文章,但我无法理解我应该如何去做。

你能给我一些帮助吗?

0 投票
1 回答
1257 浏览

parsing - LR(0) 解析器不是也使用前瞻吗?

LL(1) 解析器需要一个前瞻符号才能决定使用哪个产生式。这就是为什么我一直认为使用术语“前瞻”的原因,当解析器查看下一个输入标记而不“消耗”它时(即它仍然可以通过下一个操作从输入中读取)。然而,LR(0) 解析器让我怀疑这是正确的:

我见过的每个 LR(0) 解析器示例也使用下一个输入标记来决定是移位还是减少。在减少的情况下,不消耗输入令牌。

我使用免费软件工具“ParsingEmu”生成 LR 表并在下面对“aab”一词执行 LR 评估。如您所见,列标题包含标记。从评估中,您可以看到解析器通过查看下一个输入标记来决定使用哪一列。但是当解析器在步骤 4 - 6 中减少时,输入不会改变(尽管解析器在执行到下一个状态的转换时需要知道下一个输入标记“$”)。

语法:

桌子: LR表

评估: LR评估

由于我的困惑,现在我做了以下假设:

  1. 我对“前瞻”定义的假设(前瞻 = 未使用输入令牌)是错误的。对于 LL 解析器或 LR 解析器,前瞻只是意味着两种不同的东西。如果是这样,那么如何定义“前瞻”呢?

  2. LR 解析器(从理论的角度来看,当您使用下推自动机时)具有额外的内部状态,它们通过将输入标记放在堆栈上来消耗输入标记,因此只需查看即可做出移位减少决策在堆栈上。

  3. 上面显示的评估是 LR(1)。如果为真,LR(0) 评估会是什么样子?

现在什么是正确的,1、2 或 3 还是完全不同的?