问题标签 [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.
parsing - 用于编写解析器生成器的在线资源
我想为教育目的编写一个解析器生成器,并且想知道是否有一些很好的在线资源或教程来解释如何编写一个。类似于 Jack Crenshaw 的“让我们构建编译器”的内容。
我想为 LR(1) 语法编写解析器生成器。
我对生成 action 和 goto 表背后的理论有很好的理解,但想要一些资源来帮助我实现它。
首选语言是 C/C++、Java,尽管其他语言也可以。
谢谢。
python - 如何使用 pyparsing 解析缩进和缩进?
这是 Python 语法的一个子集:
(您可以在 Python SVN 存储库中阅读完整的语法:http: //svn.python.org/.../Grammar)
我正在尝试使用此语法在 Python 中为 Python 生成解析器。我遇到的麻烦是如何将INDENT
andDEDENT
标记表示为 pyparsing 对象。
这是我实现其他终端的方式:
terminal_action
是一个根据其参数返回相应解析操作的函数。
我知道pyparsing.indentedBlock
辅助函数,但我不知道如何在没有PEER
令牌的情况下将其应用于语法。
(查看pyparsing 源代码,看看我在说什么)
你可以在这里看到我的完整源代码:http: //pastebin.ca/1609860
yacc - 多个 flex/bison 解析器
在一个项目中处理多个 Flex/Bison 解析器的最佳方式是什么?
我写了一个解析器,现在我在同一个项目中需要第二个。到目前为止,parser1.y
我在第三部分中插入了main(..)
方法并yyparse
从那里调用。
我想要获得的是拥有两个不同的解析器(parser1.y
和parser2.y
)并能够从外部函数中使用它们(假设main
在main.cpp
)。
我应该使用哪些预防措施将yyparse
函数导出到.y
文件之外,我应该如何处理两个解析器?
PS。我正在使用 g++ 编译但不是 Flex 和 Bison 的 C++ 版本,我想保持这种方式(因此避免将解析器封装在对象中)。
java - JavaCC 问题 - 生成的代码未找到所有解析错误
刚开始使用 JavaCC。但我有一个奇怪的行为。我想以标记(字母和数字)的形式验证输入,这些标记与符号(+、-、/)连接,并且可以包含括号。我希望这是可以理解的:)
在 main 方法中是一个字符串,它应该会产生错误,因为它有一个左括号和两个右括号,但是我没有得到解析异常 --> 为什么?
有人知道为什么我没有得到例外吗?
我在最初的尝试中遇到了左递归和选择冲突,但设法克服了它们。也许那里是我介绍的问题?!
哦 - 也许我的解决方案不是很好 - 忽略这个事实......或者更好,给一些建议;-)
文件:CodeParser.jj
编辑 - 2009 年 11 月 16 日
现在我尝试了ANTLR。
我更改了一些术语以更好地匹配我的问题域。我想出了以下代码(使用本网站上的答案),现在似乎可以完成工作:
顺便说一句... ANTLRWORKS 是一个很好的调试/可视化工具!帮了我很多。
附加信息
上面的代码匹配如下内容:
python - 关于 Python 解析器生成器的建议
我接到了一项任务,我必须为一种简单的类 C 语言创建解析器。我可以使用任何我希望创建解析器的编程语言和工具,但我同时也在学习 Python,所以这将是我的首选。
我的解析器必须遵循一些限制。首先,它必须能够读取包含以下信息的文本文件:
其中每种类型和拼写都是指语言的标记类型和值。该文件是通过语言的词法分析器放置代码示例的结果。
其次,我必须能够自定义解析器的输出。理想情况下,我想输出一个文件,该文件已将 kind:spelling 列表转换为另一个标记序列,该标记将传递给语言的编译器以转换为 MIPS 汇编代码。这是我希望解析器能够产生的那种东西的一个小例子:
如果有人可以就现有的 Python 解析器生成器向我提供建议,并且如果我能够实现我在上述示例中寻找的那种东西,那将是一个很大的帮助。
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")
但之后我什么也没得到。
那么,我该如何找出它为什么挂起并停止它——或者甚至只是绕过这一部分(我可以/应该禁用调试吗?)——只要它可以工作并让我继续做有用的事情.
scala - 在scala中解析递归结构
我正在尝试在 scala 中构建一个解析器,它可以解析简单的类似 SQL 的字符串。我已经掌握了基础知识,可以解析如下内容:
但现在我想知道如何解析嵌套和类,即
我的“combinedPredicate”的当前生产如下所示:
我尝试在其内部递归地引用 combinePredicate 产生式,但这会导致 stackoverflow。
顺便说一句,我只是在这里试验......没有实现整个 ansi-99 规范;)
parser-generator - PEG 语法和解析器生成器的局限性?
我非常喜欢使用 YARD:
http://code.google.com/p/yardparser/
http://www.codeproject.com/KB/recipes/yard-tokenizer.aspx
我能够构建功能齐全的计算器。我正在评估 YARD 来做 PHP 解析器。请就 PEG 语法和解析器生成器的限制提出建议。非常感谢你!
regex - 解析自定义字符串生成模式语法
背景:我正在为 URL 文件名开发一种自定义的类似正则表达式的语法。它将像这样工作:
- 用户编写一个模式,类似于
"[a-z][0-9]{0,2}"
,并将其作为输入传递 - 它被程序解析并翻译成它所代表的一组排列,即
'a'
,'a0'
,'a00'
...'z99'
这些模式的复杂性会有所不同,基本上任何可能出现在 URL 文件名中的东西都必须适应。该语言是 Java 或 PHP,但任何语言的示例或抽象/概念帮助都非常受欢迎。
我的问题是:
- 从哪里开始实施上述的“解析器”
更不重要的是,
- 如何以编程方式将解析的复杂模式转换为字符串
silverlight - Silverilght 中的语言解析器
我需要为某些特定语言(SQL 的子集)编写解析器。据我所知,最简单的方法是在 BNF 中定义语法并使用类似 yacc 的工具(我对GPPG有积极的经验)。但是当我开始时,我意识到这些工具生成的解析器依赖于一些核心解析器程序集(例如 GPPG 的 ShiftReduceParser.dll)。我需要为 Silverilght 实现解析器,所以我不能使用针对完整框架的库。
是否有任何可用于 Silverilght 的解析器生成器工具?