问题标签 [parser-generator]

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 回答
556 浏览

c - 野牛推送纯解析器中的堆处理

有没有办法为野牛中的纯推送解析器指定我自己的分配器/释放器函数来进行堆管理而不是 malloc()/free()?

0 投票
1 回答
409 浏览

parser-generator - ParserGenerator 的示例

任何人都可以发布一些示例代码Bumble Bee Parser Generator吗?

我想创建一个解析器来解析一些BSDl Files.

请发布一些示例代码来编写lexyacc使用bumble bee parser generator

0 投票
1 回答
266 浏览

android - Android报价未得到解析

我正在使用以下代码来解析 RSS 提要。如果出现引号则不起作用。请帮忙。

0 投票
7 回答
8542 浏览

programming-languages - LL 与 LR 解析器的局限性?

我知道 LL 与 LR 解析器的基本区别。我也知道 GLR、SLR 和 LALR 都是 LR 解析器的扩展。所以我更详细的问题是......

给定一个 LL(*) 解析器和 LR 解析器的任何变体,是否有任何语言可以用一种语言来描述,而不能用另一种语言来描述?或者更简单地说,是否有任何特性或属性都无法表达?

作为一个具体的例子。如果我要使用 LL(*) 解析器创建一种语言,我是否会遇到想要添加到我的语言中的所需功能/属性,而这只有通过 LR 解析器才能实现(反之亦然)?

0 投票
6 回答
3309 浏览

scala - 是否有适用于 Haskell 或 Scala 等功能语言的 LL 解析器生成器?

我注意到明显缺乏用函数式语言创建解析器的 LL 解析器。我一直在寻找但没有成功的理想发现是为 ANTLR 风格的 LL(*) 语法生成 Haskell 解析器(对语法进行模次小重新格式化),并且令每一个具有功能的解析器生成器感到惊讶我发现的语言目标是某种 LR 解析器。

我想将我正在研究的这种语言的解析器转换为语言本身的功能特性,从 ANTLR 到自托管,如果我可以将某些几乎可以肯定在另一种功能语言中正确的东西移植到我的语言中,这将有很大帮助(最好是我熟悉的 Haskell 和 Scala),而不必完全从头开始重写它,尽管最终我可能会这样做,因为核心语言很小。

在这一点上,甚至不仅仅是解决方案,我很好奇为什么没有这样的 LL(*) 甚至 LL(k) 解析器生成器,但是有许多 LR 生成器,因为 LL 似乎天生就更容易。

0 投票
4 回答
199 浏览

java - 试图理解解析器

我正在尝试使用 JavaCC 构建一个可以处理各种表达式的简单命令行计算器。虽然有很多关于如何编写语法的教程,但到目前为止我所看到的都没有解释之后会发生什么。

我现在理解的是,一个字符串传入解析器后,会被拆分成一个tokens,变成一个解析树。接下来发生什么?我是否遍历解析树,对每个节点的内容进行一堆 if-else 字符串比较,然后执行适当的功能?

0 投票
1 回答
4267 浏览

c - 野牛传回产生的 AST

柠檬中,当起始符号减少时,我能够使用解析函数的第三个参数将结果传回给调用者。

我将如何在野牛中做同样的事情?是否足以在起始符号的操作代码中将该值分配给 $$,并在最终调用之后从调用者将其作为“yy 次要”值yypush_parse()

解析器是推送和纯粹的。线程安全是必须的。

0 投票
1 回答
775 浏览

c - Bison - 推送和纯解析器的附加参数

如何将一个附加参数(不是 type 的标记次要YYSTYPE)传递给yypush_parse()函数?

解析器确实是可重入的,但是这个附加变量对于我需要集成我的解析器的应用程序的线程安全至关重要(它是一个 PHP 扩展,所以我们谈论的是TSRM)。

我不能只是摆脱那个参数,因为在操作代码中我​​将调用函数,这些函数将以用户态可访问的形式生成 AST。

我试图破解YYPUSH_DECLS它,就声明函数而言,它可以工作,但是几千个 LOCs 是 的实现yypush_parse,我看不到任何方法来覆盖yypush_parse开始实现的函数签名。

YYPARSE_PARAM仅在解析器不是推送时使用(据我所知),但在我的情况下,我需要推送它,因为我必须在处理循环中,在词法分析之后和添加新之前解析堆栈的令牌。

所以我想知道是否有%directive什么可以帮助的。

另一方面,我真的认为YYPARSE_PARAM应该使用它的定义,无论它是什么类型的解析器。可惜不是。

0 投票
3 回答
4023 浏览

antlr - 如何让 Antlr Parser 规则从默认和隐藏通道中读取

我在隐藏通道中使用了普通的空格分隔,但是我有一个规则,我想包含任何空格以供以后处理,但是我发现的任何示例都需要一些非常奇怪的手动编码。

是否没有从多个通道读取的简单选项,例如从一开始就将空格放在那里的选项。

前任。这是 WhiteSpace 词法分析器规则

这是我想包含空格的规则

基本上,捕获所有与其他规则不匹配的内容以由另一个模式处理,因此我需要原始流。

我希望有一个{$channel==DEFAULT || $channel==HIDDEN}语法示例,但找不到。

我的目标是 C#,但如果需要,我可以重写 Java 示例。

0 投票
2 回答
643 浏览

parser-generator - 您会推荐哪些具有代码分离和语言可扩展性的解析器生成器?

我正在寻找具有语法/代码分离的上下文无关语法解析器生成器,并且可以添加对新目标语言的支持。例如,如果我想要 Pascal 中的解析器,我可以编写自己的 pascal 代码生成器,而无需重新实现整个事情。

我知道大多数开源解析器生成器理论上都可以扩展,但我仍然更喜欢计划和记录可扩展性的东西。

就功能而言,我需要解析器至少支持 Python 样式的缩进,也许还需要做一些额外的工作。对生成的解析器类型没有要求,但我更喜欢快速的东西。

哪些是最知名/维护的选项?

流行的解析器生成器似乎主要使用我真的不喜欢的混合语法/代码方法。维基百科上的比较列表列出了一些,但我是这方面的新手,不知道该尝试哪个。

为什么我不喜欢混合语法/代码:因为这种方法看起来很乱。语法就是语法,实现细节就是实现细节。它们是用不同语言编写的不同内容,将它们放在不同的地方很直观。

如果我想在另一个项目中使用不同的实现细节重用部分语法怎么办?如果我想用不同的语言编译解析器怎么办?所有这些都需要将语法分开。