问题标签 [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.
grammar - FOLLOW 函数说明 - 语法
我在理解 FOLLOW 函数时遇到了一些问题。我无法计算遵循语法的功能,这不好。我尝试练习来理解这个功能,特别是这个练习,我有这个语法:
S -> E
E -> T E'
E' -> + T E' | 减 T E' |
T -> F T'
T' -> * F T' |
F -> 标识 | ( F'
F' -> E) | n)
以下是跟随函数的计算结果:
新元
E), $
E'), $
T +, 减号, ), $
T' +, 减号, ), $
F *, +, 减号, ), $
F' *, +, 减号, ), $
我真的不明白为什么 FOLLOW(T)=FOLLOW(T') = { +, minus, ), $ } 在我给出的语法中,终端符号加号和减号永远不会出现在 T 或 T' 的右侧因此,如果有人可以向我解释这一点,那就太好了
grammar - 识别 LL 和 LR 语法......不是解析器
如果通过查看给我一个 CFG,我可以决定它是 LL 类语法还是 LR 类语法?当我在谷歌上搜索这个问题时,我得到的是这些语法的解析器是如何工作的,但这不是我想要的。任何帮助将不胜感激。
parsing - 关于这个 FIRST 函数的解释
LL(1) 语法:
而且,在我正在阅读的脚本中,它说该函数FIRST(ε DimList')
给出了{#, [}
. 但是,怎么做?
我的猜测是,由于 (2) 的右侧以 开头ε
,它会跳过 epsilon 并取FIRST(DimList')
is,考虑到 (3) 和 (5),等于{[}
,但由于 (4),它也取FOLLOW(DimList')
is {#}
。
其他方式可能是,因为 (2) 以它开始,ε
它跳过 epsilon 并从 (2) 中获取FIRST(DimList')
但也从 (2) 获取 FOLLOW(DimList) ...
第一个对我来说更有意义,尽管我仍在学习 LL(1) 语法的基础知识,所以如果有人花时间说明这一点,我将不胜感激,谢谢。
编辑:当然,这些都可能不是真的。
parsing - 如果有一列在其单元格中没有条目,则 LL(1) 解析表是否有效?
我正在为考试做复习题。其中一个问题是从前一个问题中计算的第一个和后续集合构建一个 LL(1) 解析表。
现在我几乎可以肯定我已经正确构建了第一个和后续集合,并且该表的任何单元格中都没有任何重复的条目,所以我假设该语法是有效的 LL(1) 语法(我们被要求确定如果它是有效的,那么为什么我需要构建表格)。
然而下一个问题是将语法转换为有效的 LL(1) 语法,显然暗示它不是 LL(1)
所以我的问题实际上是2个问题。
由于有一列没有任何条目,因此该语法不是 LL(1) 语法吗?
或者
如果这在 LL(1) 解析表中是允许的,那么我很可能在创建第一个和后续集时出错了吗?
这是我解决的问题和框中的语法 http://imgur.com/UwmOAvX
antlr - Antlr:忽略特定上下文中的关键字
我正在用 ANTLR 构建一种类似英语的领域特定语言。它的关键字是上下文相关的。(我知道这听起来很脏,但对于非程序员的目标用户来说很有意义。)例如,通常的逻辑运算符,如or
and not
,当用括号括起来时,将被视为标识符,[like this and this] . 我目前的方法如下所示:
这与以下词汇定义结合使用时:
产生警告"Decision can match input such as "{AND..PROCESS, RPAREN..'with'}" using multiple alternatives: 1, 2"
。我显然在为 ANTLR 制造歧义,但我不知道如何解决它。我该如何解决?
parsing - 这是文法 LL(1) 吗?
我得出以下语法:
我知道为了使语法成为 LL(1),它必须是明确的和右递归的。问题是我不完全理解左递归和右递归语法的概念。我不知道以下语法是否正确递归。我真的很感激对左递归和右递归语法的概念的简单解释,如果我的语法是 LL(1)。
非常感谢。
parsing - 计算第一组语法?
我有这个语法,我自己计算了第一组,但我不确定如何展示我的工作,因为我发现向我展示的方法太混乱了,但我了解如何获取这些集合而不是如何展示我的工作。
语法如下:
我的第一组是:
parsing - 计算上下文无关文法的 FIRST 和 FOLLOW 集的算法
我需要一种算法来计算语法的 FIRST 和 FOLLOW 集。
是否有一个简单的算法或简单的代码来计算这些?
parsing - LL(1) 用堆栈实现的解析器:如何构建 AST?
我目前正在手动构建解析器。它是一个 LL(1) 解析器。目前,它是一个很好的识别器:它的函数 parse(List tokens) 决定 tokens 是否是语言的成员。
现在,我想为该输入构建相应的 AST。但是,我知道如何以递归下降的方式实现它(已经做到了)。也就是说,对于挑战,我使用带有经典算法的堆栈来实现我的堆栈:
其中 PARSING_TABLE 是 LL(1) 表。但是,我想知道如何在这样的配置中实现构建 AST 的部分。我不要求完整的实施,更多的是实施理念。
谢谢 !
parsing - Ebnf – 这是一个 LL(1) 语法吗?
我在维基百科上找到了以下EBNF,描述了 EBNF:
现在,由于我对解析器和语法的了解有限,我不知道这是否是 LL(1) 语法。我试图为它编写一个解析器,但是在尝试读取 rhs 时它失败了,它再次读取自己,再次读取自己,哦,你明白了......
- 它是 LL(1) 语法吗?
- 如果没有,如何将其变成一个(可能?)?