问题标签 [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 投票
4 回答
4716 浏览

parsing - 用于编写解析器生成器的在线资源

我想为教育目的编写一个解析器生成器,并且想知道是否有一些很好的在线资源或教程来解释如何编写一个。类似于 Jack Crenshaw 的“让我们构建编译器”的内容。

我想为 LR(1) 语法编写解析器生成器。

我对生成 action 和 goto 表背后的理论有很好的理解,但想要一些资源来帮助我实现它。

首选语言是 C/C++、Java,尽管其他语言也可以。

谢谢。

0 投票
1 回答
3677 浏览

python - 如何使用 pyparsing 解析缩进和缩进?

这是 Python 语法的一个子集:

(您可以在 Python SVN 存储库中阅读完整的语法:http: //svn.python.org/.../Grammar

我正在尝试使用此语法在 Python 中为 Python 生成解析器。我遇到的麻烦是如何将INDENTandDEDENT标记表示为 pyparsing 对象。

这是我实现其他终端的方式:

terminal_action是一个根据其参数返回相应解析操作的函数。

我知道pyparsing.indentedBlock辅助函数,但我不知道如何在没有PEER令牌的情况下将其应用于语法。

(查看pyparsing 源代码,看看我在说什么)

你可以在这里看到我的完整源代码:http: //pastebin.ca/1609860

0 投票
5 回答
5764 浏览

yacc - 多个 flex/bison 解析器

在一个项目中处理多个 Flex/Bison 解析器的最佳方式是什么?

我写了一个解析器,现在我在同一个项目中需要第二个。到目前为止,parser1.y我在第三部分中插入了main(..)方法并yyparse从那里调用。

我想要获得的是拥有两个不同的解析器(parser1.yparser2.y)并能够从外部函数中使用它们(假设mainmain.cpp)。

我应该使用哪些预防措施将yyparse函数导出到.y文件之外,我应该如何处理两个解析器?

PS。我正在使用 g++ 编译但不是 Flex 和 Bison 的 C++ 版本,我想保持这种方式(因此避免将解析器封装在对象中)。

0 投票
3 回答
7170 浏览

java - JavaCC 问题 - 生成的代码未找到所有解析错误

刚开始使用 JavaCC。但我有一个奇怪的行为。我想以标记(字母和数字)的形式验证输入,这些标记与符号(+、-、/)连接,并且可以包含括号。我希望这是可以理解的:)

在 main 方法中是一个字符串,它应该会产生错误,因为它有一个左括号和两个右括号,但是我没有得到解析异常 --> 为什么?

有人知道为什么我没有得到例外吗?

我在最初的尝试中遇到了左递归和选择冲突,但设法克服了它们。也许那里是我介绍的问题?!

哦 - 也许我的解决方案不是很好 - 忽略这个事实......或者更好,给一些建议;-)

文件:CodeParser.jj

编辑 - 2009 年 11 月 16 日

现在我尝试了ANTLR。

我更改了一些术语以更好地匹配我的问题域。我想出了以下代码(使用本网站上的答案),现在似乎可以完成工作:

顺便说一句... ANTLRWORKS 是一个很好的调试/可视化工具!帮了我很多。

附加信息
上面的代码匹配如下内容:

0 投票
2 回答
9299 浏览

python - 关于 Python 解析器生成器的建议

我接到了一项任务,我必须为一种简单的类 C 语言创建解析器。我可以使用任何我希望创建解析器的编程语言和工具,但我同时也在学习 Python,所以这将是我的首选。

我的解析器必须遵循一些限制。首先,它必须能够读取包含以下信息的文本文件:

其中每种类型和拼写都是指语言的标记类型和值。该文件是通过语言的词法分析器放置代码示例的结果。

其次,我必须能够自定义解析器的输出。理想情况下,我想输出一个文件,该文件已将 kind:spelling 列表转换为另一个标记序列,该标记将传递给语言的编译器以转换为 MIPS 汇编代码。这是我希望解析器能够产生的那种东西的一个小例子:

如果有人可以就现有的 Python 解析器生成器向我提供建议,并且如果我能够实现我在​​上述示例中寻找的那种东西,那将是一个很大的帮助。

0 投票
2 回答
1026 浏览

parsing - ANTLR 解析器挂在 proxy.handshake 调用

我试图让一个基本的 ECMAScript 解析器工作,并为ECMAScript 3找到了一个完整的 ANTLR 语法,它似乎可以编译并生成适当的 Lexer/Parser/Walker Java 文件。
(在Eclipse 3.5 的ANTLR IDE 插件中运行)

但是,当实际尝试将它与一些简单的测试代码一起使用时(遵循ANTLR wiki 上的指南),它只是在尝试创建解析器时挂起:

我已经将问题追踪到ES3Parser构造函数内部,它正在调用函数proxy.handshake()- 在此行之前我可以成功完成,System.out.println("text")但之后我什么也没得到。

那么,我该如何找出它为什么挂起并停止它——或者甚至只是绕过这一部分(我可以/应该禁用调试吗?)——只要它可以工作并让我继续做有用的事情.

0 投票
3 回答
3456 浏览

scala - 在scala中解析递归结构

我正在尝试在 scala 中构建一个解析器,它可以解析简单的类似 SQL 的字符串。我已经掌握了基础知识,可以解析如下内容:

但现在我想知道如何解析嵌套和类,即

我的“combinedPredicate”的当前生产如下所示:

我尝试在其内部递归地引用 combinePredicate 产生式,但这会导致 stackoverflow。

顺便说一句,我只是在这里试验......没有实现整个 ansi-99 规范;)

0 投票
2 回答
7400 浏览

parser-generator - PEG 语法和解析器生成器的局限性?

我非常喜欢使用 YARD:

http://www.ootl.org/yard/

http://code.google.com/p/yardparser/

http://www.codeproject.com/KB/recipes/yard-tokenizer.aspx

我能够构建功能齐全的计算器。我正在评估 YARD 来做 PHP 解析器。请就 PEG 语法和解析器生成器的限制提出建议。非常感谢你!

0 投票
1 回答
298 浏览

regex - 解析自定义字符串生成模式语法

背景:我正在为 URL 文件名开发一种自定义的类似正则表达式的语法。它将像这样工作:

  • 用户编写一个模式,类似于"[a-z][0-9]{0,2}",并将其作为输入传递
  • 它被程序解析并翻译成它所代表的一组排列,即
    'a', 'a0', 'a00'...'z99'

这些模式的复杂性会有所不同,基本上任何可能出现在 URL 文件名中的东西都必须适应。该语言是 Java 或 PHP,但任何语言的示例或抽象/概念帮助都非常受欢迎。

我的问题是:

  1. 从哪里开始实施上述的“解析器”

更不重要的是,

  1. 如何以编程方式将解析的复杂模式转换为字符串
0 投票
4 回答
290 浏览

silverlight - Silverilght 中的语言解析器

我需要为某些特定语言(SQL 的子集)编写解析器。据我所知,最简单的方法是在 BNF 中定义语法并使用类似 yacc 的工具(我对GPPG有积极的经验)。但是当我开始时,我意识到这些工具生成的解析器依赖于一些核心解析器程序集(例如 GPPG 的 ShiftReduceParser.dll)。我需要为 Silverilght 实现解析器,所以我不能使用针对完整框架的库。

是否有任何可用于 Silverilght 的解析器生成器工具?