问题标签 [ocamlyacc]

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 投票
2 回答
627 浏览

compiler-construction - OCaml 类型不兼容 - OCamlyacc

返回错误:错误:此表达式的类型为字符串列表 -> 字符串列表,但表达式应为字符串列表 -> 字符串列表列表类型字符串与字符串列表类型不兼容

我认为我们需要以某种方式将 func 放入列表中,但是我尝试过的每种方法似乎都不起作用!任何帮助表示赞赏..

0 投票
1 回答
148 浏览

yacc - 移位/减少与中缀部分的冲突

我在使用包含普通中缀操作和中缀部分的语法的类似 yacc 的实现(特别是使用 ocamlyacc)时遇到问题,例如在 Haskell 中。我希望所有这些都符合语法:

但是,即使摆弄关联性/优先级声明,我也无法使其正常工作。我可以在 Grammar.output 中看到问题发生的位置(它正在转移到我希望它减少的地方),但我无法哄它按照我想要的方式运行。这是该问题的简化演示。

lex.mll 有:

main.ml 有:

和 parse.mly (问题出在哪里)有:

运行ocamlyacc它告诉我有1 shift/reduce conflict。特别是这里是详细日志的相关部分:

运行编译后的程序将正确解析以下所有内容:

但失败:

另一方面,如果我创建一个HIGH具有高优先级的虚拟令牌:

然后穿上%prec HIGH规则 9:

在这种情况下(1+2)会解析但(1+)不会。

我了解移位/减少冲突的一般背景。我只是不知道如何协商它来解决这个解析挑战。

0 投票
1 回答
121 浏览

parsing - 执行语义操作时,Ocamlyacc 令牌不可见

我正在使用ocamlyacc一个小型解析器,它还对大多数解析规则执行一些语义操作。

我在开始时定义了一组标记:

执行语义操作的解析器规则如下:

checkType外部辅助函数在哪里。但是,我收到了这个奇怪的警告(它指的是我Parser.mly文件中的一行)

我在 ocamlyacc 手册中没有找到任何相关信息。有没有人遇到过类似的错误?为什么令牌在语义动作范围内不可见?

0 投票
2 回答
190 浏览

ocaml - 如何在 Ocamlyacc 中定义无法识别的规则

我正在公司项目上工作,我必须使用 Ocamlyacc 和 Ocamllex 为一种语言创建一个编译器。我想知道是否可以在我的 Ocamlyacc 解析器中定义一个规则,它可以告诉我我的语法规则没有匹配输入的语法。

我必须坚持我是 Ocamllex/Ocamlyacc 的初学者

非常感谢您的帮助。

0 投票
1 回答
188 浏览

ocaml - 如何创建一个结合 Parser 和 Lexer 的程序

我想使用 Ocamllex/Ocamlyacc 构建一个编译器,并且我想创建一个主程序来结合我的 OcamlParser 和 OcamlLexer。问题是我知道如何使用命令行中的输入来做到这一点,如下面的代码:

但是,如果我想使用文件作为输入,我该怎么办?我试过这样的事情:

但它并没有真正起作用。

0 投票
2 回答
148 浏览

compiler-construction - Operator :: OCaml

I am a beginner in OCaml and trying to build a parser, I want to have a list that stores all the methods in my class. This is one part that I have in my .mly file.

Can anyone explain exactly what's going on here? Especially the :: operation. Been googling around but couldn't find the operator in the docs.

I get that the list can be empty, or we make right recursive calls to fill it up with all the methods in class. method_decl just looks for the match of the specific token combinations that represents a method.

0 投票
1 回答
41 浏览

compiler-construction - 获取语​​法列表

我正在尝试构建一个编译器,目前我很迷茫。我有一个主类,并且希望能够声明具有继承的其他类,即class newClass extends classThatHasBeenDeclaredBefore { }我的输入看起来像

并且 myclass_list包含我程序中的所有课程,它也可以为空。

一个简单的类声明如下:

有什么方法可以检查第二个CLASS_ID是否已经以某种方式被声明或使用过?我的想法是,我class_list无法从我尝试添加新课程的地方到达,但我在 OCaml 上很烂。

0 投票
1 回答
91 浏览

parsing - 尝试解决 shift-reduce 解析问题

我正在尝试为 C 编写语法,但遇到了一个我不太理解的问题。语法的相关部分:

这行不通。我运行 ocamlyacc -v 并得到以下报告:

我已经读过移位/减少冲突是由于语法规范中的歧义造成的,但我不知道如何以一种不歧义的方式指定它?

0 投票
1 回答
550 浏览

ocaml - OCaml 函数应用优先级和关联性

我需要在我的 OCaml 解析器中为函数应用程序提供高优先级和左关联性。我有一堆与之匹配的不同令牌,例如

%left我使用, ...给出了所有这些优先级和关联性,right但是,由于exp我用来匹配的不是令牌,所以我想知道在这种情况下我将如何做到这一点:

我有我的所有匹配exp项,没有制作一堆不同的 exp1 exp2s 等等,我想知道是否有可能给予exp exp最高优先级并留下关联。

我在另一个论坛上为我的班级发布了这个并得到了:

您可以将虚拟令牌与功能应用程序规则相关联,如下所示:

然后使用 %left 和虚拟标记指定关联性。

但是我不确定这意味着什么,所以如果有人可以详细说明这一点或给我另一个很棒的解决方案。

0 投票
1 回答
427 浏览

ocaml - 带有空字符串的 ocamlyacc

所以我有一个包含空字符串的语法。语法是这样的:

S->ε

S->表达式;; 小号

当我运行我的解析器时,我收到错误“没有更多的状态要丢弃”,所以我相信我没有正确表示空字符串。那么我将如何去表示它,特别是在 lexer .mll 文件中?

我知道我需要为它制定一个规则,所以我认为我已经把它记下来了。这就是我认为解析器 .mly 文件应该看起来的样子,不包括表达的东西。