问题标签 [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.

0 投票
8 回答
35055 浏览

c - 弹性词法分析器的字符串输入

我想使用 flex/bison 解析器创建一个 read-eval-print 循环。麻烦的是,flex 生成的词法分析器需要 FILE* 类型的输入,我希望它是 char*。有没有办法做到这一点?

一个建议是创建一个管道,向它提供字符串并打开文件描述符并发送到词法分析器。这相当简单,但感觉很复杂,而且不是很独立于平台。有没有更好的办法?

0 投票
5 回答
801 浏览

parsing - 解析类 C 定义字符串的最有效方法?

我有一组用类 C 语言编写的函数定义,其中一些附加关键字可以放在一些参数之前(例如,与“无符号”或“寄存器”相同),我需要分析这些行以及一些函数存根并从中生成实际的 C 代码。

  • Flex/Yacc 是最合适的方法,这对吗?

  • 如果我对分析器/解析器的经验为零,它是否会比使用正则表达式编写 Shell 或 Python 脚本慢(我想,如果附加关键字的数量变得更大并且它们的效果会相当不同,这可能会变得很痛苦) (虽然我知道 LALR 是如何工作的)?

  • Lex/Yacc 上是否有涵盖类似问题的好材料?我能找到的所有论文都使用相同的“玩具”计算器的原始示例。

任何帮助将不胜感激。

0 投票
2 回答
2637 浏览

haskell - Haskell 解析工具 - yacc:lex :: happy:?

因此, Happy似乎是 Haskell 中 yacc 的强大替代品。是否有一个同样强大的词法分析器生成器来代替 lex/flex?

0 投票
6 回答
2357 浏览

regex - 最好的现代文本解析?AKA 何时使用 Lex 和 Yacc?

我有作为输入文本块的命令和参数,每行一个,例如

我想验证该XYZ特定命令的参数格式是否正确,如果是,则执行正确的代码块。有大约 100 个命令,其中一些具有可变数量的参数、不同的关系(即,如果XYZ调用了命令,那么我也需要ABC调用命令)。

还存在命令,例如:

文本包含在COMMAND和中很重要ENDCOMMAND

通常对于这样的事情,我会使用 Lex 和 Yacc 而不是正则表达式,但是还有什么更现代的吗?代码是用 C# 编写的。MSDN 中有什么可以做到这一点,而不是老式的 C Lex 和 Yacc?

0 投票
4 回答
663 浏览

python - 使用 lex/yacc 标记剩余数据

原谅我,我对解析和 lex/yacc 完全陌生,我可能有点不知所措,但尽管如此:

我正在用 PLY 编写一个非常基本的计算器,但它的输入可能并不总是一个方程,我需要在解析时确定它是否是。输入的极端情况是可以完美地评估为方程,它可以很好地解析和计算,或者与方程完全不同,它解析失败并且也很好。

灰色区域是具有等式部分的输入,解析器将抓取并计算出这些部分。这不是我想要的——我需要能够判断字符串的某些部分是否没有被拾取和标记,这样我就可以抛出一个错误,但我不知道该怎么做。

有谁知道我如何定义,基本上,一个“抓住任何剩下的东西”令牌?还是有更好的方法可以处理这个问题?

0 投票
5 回答
9379 浏览

parsing - 如何修复后增量运算符的 YACC 移位/减少冲突?

我正在用 YACC(实际上是 Bison)编写语法,并且遇到了移位/减少问题。它是由于包含后缀递增和递减运算符而产生的。这是语法的精简版:

Bison 告诉我有 12 个移位/减少冲突,但如果我注释掉后缀递增和递减的行,它就可以正常工作。有谁知道如何解决这个冲突?在这一点上,我正在考虑迁移到 LL(k) 解析器生成器,这使它更容易,但 LALR 语法似乎总是更自然地编写。我也在考虑 GLR,但我不知道有什么好的 C/C++ GLR 解析器生成器。

0 投票
3 回答
1338 浏览

regex - 正则表达式

我正在使用 Lex 和 Yacc 开发一个从 MathML 到 Latex 的简单翻译器。在包含正则表达式规则的 lex 文件中,我为算术运算符 [-+*=/] 定义了一个。我想扩展以便它可以识别加减(+-)和不可见时间('&InvisibleTimes'),但我不熟悉正则表达式,我需要一些帮助。

0 投票
3 回答
365 浏览

yacc - YACC 编译错误

我正在 PC 上使用 Cygwin shell 编译 YACC 文件。我得到一个“未知字符\15”。奇怪的是,另一台机器上的同事可以使用相同的 shell 编译完全相同的文件,而不会出现警告或错误。我需要在我的 shell 或编译器中设置某种标志吗?我们正在使用 nmake 和 Visual Studio 编译器。如果需要,我很乐意提供更多信息。

非常感谢你!

0 投票
2 回答
992 浏览

parsing - 如何在编译器中实现前向引用?

我正在使用 Lex 和 YACC(实际上是 Flex 和 Bison)创建一个编译器。该语言允许无限前向引用任何符号(如 C#)。问题是在不知道标识符是什么的情况下解析语言是不可能的。

我所知道的唯一解决方案是对整个源进行 lex,然后进行“广度优先”解析,因此类声明和函数声明等更高级别的内容在使用它们的函数之前得到解析。但是,对于大文件,这会占用大量内存,并且很难用 YACC 处理(我必须为每种类型的声明/正文创建单独的语法)。我还必须手写词法分析器(这不是什么大问题)。

我不太关心效率(尽管它仍然很重要),因为一旦我完成它,我将自己重写编译器,但我希望那个版本很快(所以如果有任何快速通用的不能在 Lex/YACC 中完成但可以手工完成的技术,也请提出建议)。所以现在,易于开发是最重要的因素。

这个问题有什么好的解决方案吗?这通常如何在 C# 或 Java 等语言的编译器中完成?

0 投票
2 回答
294 浏览

parsing - 帮助解决 Shift/Reduce 冲突 - 尝试建模 (XA)* (XB)*

我试图模拟 EBNF 表达式

我已经建立了 yacc(我使用 MPPG)语法,它似乎代表了这一点,但它与我的测试表达式不匹配。

我要匹配的测试用例是

来自词法分析器的令牌流是

语法分析表明存在“Shift/Reduce 冲突,KW_Declare 上的状态 6”。我试图用“%left PrologHeaderList PrologBodyList”解决这个问题,但两种解决方案都不起作用。

KW_Declare KW_Namespace KW_Variable 分隔符都是具有值“declare”、“naemsapce”、“variable”、“;”的标记。