问题标签 [happy]
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 - 使用 Happy (Haskell) 从 yacc 语法生成 Fortran 77 解析器
我偶然发现了以下 F77 yacc 语法:http: //yaxx.cvs.sourceforge.net/viewvc/yaxx/yaxx/fortran/fortran.y ?revision=1.3&view=markup 。
如何使用Happy从此文件中制作 Fortran 77 解析器?
为什么会有一些 C?/C++?那个 .y 文件中的代码?
更新:感谢您的回复!
一段时间以来,我一直在使用两种新方法:
- 从与标题为Parametric Fortran的论文捆绑的源代码包中提取和修改解析器,
- 在BNFC的帮助下从头开始编写语法。
我已经可以解析简单的代码摘录了。如果本世纪内出现可用的东西,我会让人们知道的^__^“呵呵。
P/S:想看看我是否可以自己收集足够的动力来启动一个自动差异化引擎的项目,以取代我们暂时依赖的仅二进制引擎。初始阶段的娱乐:我在看Love Shuffle!这是一部非常有趣的J-Drama!强烈推荐...
parsing - Happy中的解析器
我正在尝试使用 Happy(Haskell 工具)进行解析,但我收到一条消息错误:“未使用的规则:11 和未使用的终端:10”,我不知道这意味着什么。另一方面,我真的不确定在规则语句中使用 $i 参数,我认为我的错误是因为这个。如果有任何可以帮助我...
haskell - 有没有关于使用 Alex + Happy 构建简单解释器的教程?
我正在做一个学校项目,我必须在 Haskell 中使用 Alex + Happy 构建一个简单语言的解释器。
浏览完文档后,我了解了大部分内容,但希望看到有关使用这些工具的完整示例。
haskell - 我们如何在使用 Happy/Haskell 进行解析时保留多个语义值
我正在尝试在 Haskell 中使用 Alex/Happy 构建一个简单的词法分析器/解析器,并且我想将文本文件中的一些本地化信息保留到我的最终 AST 中。
我设法使用 Alex 构建了一个词法分析器,它构建了一个具有本地化的令牌列表:
在我的 Happy 文件中,当声明 %token 部分时,我可以用 $$ 符号声明令牌的语义部分
在解析规则中,$i 将引用这个 $$。
有没有办法引用 AlexPosn 部分和FOO 令牌的 Foo 部分?现在我只知道如何只引用其中一个。我可以找到有关“添加多个 $$”的方法的信息,并在之后参考它们。
有没有办法这样做?
五。
parsing - 编写 BNF 时 { 和 } 之间有什么?
我在使用 BNF 时遇到了一些问题。我不知道什么似乎是标准的做事方式(如果有的话),以及是否有像 char 或 int 这样的类型或任何已经内置的类型。
但是,我的主要问题是不了解大括号中的 BNF 部分是如何工作的。
给定类似的东西:
(这是从某个地方随便偷来的,用于 yacc / C)
花括号中的内容实际上是在说什么?我也为快乐的解析器生成器看过类似的东西,并且同样感到困惑。
haskell - 使用 alex/happy 和 Cabal
我正在为我正在学习的课程编写编译器。该类不是专门的 Haskell,但我使用 Haskell 来编写我的编译器和解释器。我有一个 cabal 包设置,希望能让我的教授轻松运行/编译。我在这两个可执行文件的构建工具字段中都有 happy 和 alex,但 Cabal 忽略了这一点,然后抱怨它找不到 Happy 和 Alex 应该生成的模块。如果我手动运行:
然后 cabal 完美运行。
我以为我早先让 cabal 自动运行它们,但也许我记得不完全。
跛行阴谋:
目录布局:
haskell - 快乐/无限循环中的嵌套解析器?
我正在尝试为一种简单的标记语言编写一个解析器。目前,我在使用无限循环和嵌套元素时遇到了一些问题。
我的标记语言基本上由两个元素组成,一个用于“普通”文本,一个用于粗体/强调文本。
例如,像这样的文本Foo *bar*
应该被解析为[MarkupText "Foo ", MarkupEmph [MarkupText "bar"]]
.
该示例的词法分析工作正常,但解析它会导致无限循环- 我不明白为什么。这是我目前的做法:
这种方法有什么问题?怎么可能解决?
更新:对不起。Lexing 没有按预期工作。无限循环在词法分析器内部。对不起。:)
更新 2:根据要求,我将其用作词法分析器:
发生无限递归是因为我有lexer str
而不是lexer cs
在第一个规则中为'*'
. 没有看到它,因为我的实际代码有点复杂。:)
yacc - Happy/YACC 在应该换档时降低
我正在研究解析器,我真的很沮丧。在语言中,我们可以有这样的表达式:
或者
除了最后的空数组外,大部分都正确解析。在我的解析器中,我有:
然后一个 NewExpression 是:
然后 EmptyArrays 是一个或多个空大括号 - 如果 EmptyArrays 派生出空字符串,它会添加 20 个移位/减少冲突:
但是,当我在.info
文件中查找解析器时,我得到了这个:
我希望如果我们处于状态 214 并且我们看到一个左大括号,我们应该将它移到堆栈上并继续解析 EmptyArrays。
我不完全确定发生了什么,因为当我通过以 开头的解析去除所有多余的行李(例如)时NewExpression
,额外的括号会正确解析。表达式、语句或语法中的任何非终结符都不可能以左大括号开头。特别是因为我对 if/else 语句有类似的规则,它会产生移位/减少冲突,但如果下一个标记是 else 则选择移位(这个问题有据可查)。
你能帮我弄清楚出了什么问题吗?我真的很感谢你的帮助,我真的很喜欢风车试图找出问题所在。
haskell - 快乐的解析器规则顺序
我遇到了一个使用 Happy(一个 Haskell 解析包)的案例,其中看似独立的规则的顺序会以一种奇怪的方式影响其行为。
据我了解 Happy 的工作原理,两种解析constFoo [Foo]
都constBar [Bar]
应该成功。但是,使用上面的代码,constFoo [Foo]
成功但constBar [Bar]
失败。如果我将规则的顺序交换为constFoo
and constBar
,则后者成功而前者失败。
Happy 的语义是否存在我不理解的某些方面?
haskell - 如何使用 Happy 获得漂亮的语法错误消息?
我目前正在使用快乐的解析器生成器。
其他解析器生成器可以给出很好的消息,例如“意外的结束线,预期的 'then'”。很高兴我得到了当前的令牌和错误的位置。
你能给我一个例子来说明如何获取上面的错误消息吗?