问题标签 [yacc]
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 - 解决 yacc/ocamlyacc 中的 reduce/reduce 冲突
我正在尝试解析 ocamlyacc 中的语法(与常规 yacc 几乎相同),它支持没有运算符的函数应用程序(如在 Ocaml 或 Haskell 中),以及二进制和一元运算符的正常分类。我遇到了与“-”运算符的减少/减少冲突,该运算符可用于减法和求反。这是我正在使用的语法示例:
问题是当你得到一个像“a - b”这样的表达式时,解析器不知道它是否应该被简化为“a(-b)”(b的否定,然后是应用程序)或“a - b”(减法)。减法减法是正确的。我如何解决冲突以支持该规则?
yacc - 一个程序中的多个 YACC 语法
如何yyparse()
在一个程序中编译、链接和调用不同的 YACC 语法?
.net - .NET 有没有好的 yacc/bison 类型的 LALR 解析器生成器?
.NET 有没有好的 yacc/bison 类型的 LALR 解析器生成器?
c++ - 在基于 yacc 的解析器中防止内存泄漏的最佳方法是什么?
Yacc 不允许传递对象。因为 %union 只能包含 POD 类型,所以复杂对象必须是新的并通过指针传递。如果发生语法错误,yacc 解析器将停止运行,并且对所有这些已创建对象的引用都将丢失。
我想出的唯一解决方案是所有新的对象都继承一个特定的基类,在分配时添加到容器中,如果出现错误,可以删除该容器中的所有内容。
有谁知道任何更好的 yacc 技巧来解决这个问题?
请不要告诉我选择不同的解析器。
python - PLY:C 解析器中的令牌转移问题
我正在使用 PLY 编写一个 C 解析器,最近遇到了一个问题。这段代码:
是正确的 C 代码,因为 my_type 被定义为之前使用的类型。我通过在解析器中填充类型符号表来处理它,词法分析器使用该表来区分类型和简单标识符。
但是,虽然类型声明规则以 SEMI(';' 标记)结尾,但 PLYmy_type
在决定使用第一行完成之前将标记从第二行转移。因此,我没有机会将类型符号表中的更新传递给词法分析器,它会将 my_type 视为标识符而不是类型。
任何修复的想法?
完整代码位于:http ://code.google.com/p/pycparser/source/browse/trunk/src/c_parser.py 不知道如何从中创建一个更小的示例。
编辑:
问题解决了。请参阅下面的解决方案。
c++ - Antlr 的优势(相对于 lex/yacc/bison)
我过去曾在各种项目中使用过 lex 和 yacc(通常是 bison),通常是翻译器(例如流入 EDA 应用程序的 EDIF 子集)。此外,我不得不支持基于 lex/yacc 语法的代码,这些语法可以追溯到几十年前。因此,尽管我不是专家,但我知道如何使用这些工具。
过去我在各种论坛上看到过关于 Antlr 的正面评价,我很好奇我可能遗漏了什么。因此,如果您两者都使用过,请告诉我 Antlr 中哪个更好或更高级。我目前的限制是我在 C++ 商店工作,我们发布的任何产品都不会包含 Java,因此生成的解析器必须遵循该规则。
parsing - Yacc 还在行业中使用吗?
我正在开发的软件库使用了大量我不需要处理的 yacc。有时我认为这有助于理解我发现的一些问题,但大多数时候我可以摆脱对 yacc 的完全无知。
我的问题是有足够的新项目仍然使用 yacc 来保证我需要学习它的时间吗?
编辑:鉴于响应主要是支持学习 Yacc,是否有类似的语言可以推荐给 yacc?
c - Yacc 问题:使数据在下一个非终端中可用
我想让我在 b 中生成的一些变量在 c 中可用:
一个简单的例子:
所以我可以,稍后在 c 中说:
有没有机会这样做?任何帮助将不胜感激!
yacc - Yacc:每个非终结符之后的代码
有没有办法在每个终端之后执行代码?
所以这样的事情是可能的:
任何帮助将不胜感激!
unix - 是否有替代 MKS Yacc 支持“选择首选项语法”或类似的东西?
MKS Yacc 支持他们的网站称为“选择首选项语法”的符号。它没有说明,但它由方括号中的标记组成,可选地带有插入符号,它表示特定标记需要遵循或不遵循其余规则:
(我不清楚括号中的项目是否可以是非终端。我看到的使用符号的代码总是使用一个标记或几个空格分隔的标记,而不是非终端。)
是否有人知道提供相同支持(符号可以不同 - 功能不能)的替代 Yacc 兼容系统(最好是开源),在 Unix 或 Linux 机器上运行,最好以源格式提供?
(MKS Yacc 在处理错误和调整错误行为方面也提供了一些灵活性。可以使用的一种方法是,当关键字在被视为关键字时毫无意义的位置遇到时,将其视为标识符。我是能够将其改造成byacc
- Berkeley Yacc - 但我没有花足够的时间来研究如何处理“选择偏好”。)