问题标签 [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.
compiler-construction - OCaml 类型不兼容 - OCamlyacc
返回错误:错误:此表达式的类型为字符串列表 -> 字符串列表,但表达式应为字符串列表 -> 字符串列表列表类型字符串与字符串列表类型不兼容
我认为我们需要以某种方式将 func 放入列表中,但是我尝试过的每种方法似乎都不起作用!任何帮助表示赞赏..
yacc - 移位/减少与中缀部分的冲突
我在使用包含普通中缀操作和中缀部分的语法的类似 yacc 的实现(特别是使用 ocamlyacc)时遇到问题,例如在 Haskell 中。我希望所有这些都符合语法:
但是,即使摆弄关联性/优先级声明,我也无法使其正常工作。我可以在 Grammar.output 中看到问题发生的位置(它正在转移到我希望它减少的地方),但我无法哄它按照我想要的方式运行。这是该问题的简化演示。
lex.mll 有:
main.ml 有:
和 parse.mly (问题出在哪里)有:
运行ocamlyacc
它告诉我有1 shift/reduce conflict
。特别是这里是详细日志的相关部分:
运行编译后的程序将正确解析以下所有内容:
但失败:
另一方面,如果我创建一个HIGH
具有高优先级的虚拟令牌:
然后穿上%prec HIGH
规则 9:
在这种情况下(1+2)
会解析但(1+)
不会。
我了解移位/减少冲突的一般背景。我只是不知道如何协商它来解决这个解析挑战。
parsing - 执行语义操作时,Ocamlyacc 令牌不可见
我正在使用ocamlyacc
一个小型解析器,它还对大多数解析规则执行一些语义操作。
我在开始时定义了一组标记:
执行语义操作的解析器规则如下:
checkType
外部辅助函数在哪里。但是,我收到了这个奇怪的警告(它指的是我Parser.mly
文件中的一行)
我在 ocamlyacc 手册中没有找到任何相关信息。有没有人遇到过类似的错误?为什么令牌在语义动作范围内不可见?
ocaml - 如何在 Ocamlyacc 中定义无法识别的规则
我正在公司项目上工作,我必须使用 Ocamlyacc 和 Ocamllex 为一种语言创建一个编译器。我想知道是否可以在我的 Ocamlyacc 解析器中定义一个规则,它可以告诉我我的语法规则没有匹配输入的语法。
我必须坚持我是 Ocamllex/Ocamlyacc 的初学者
非常感谢您的帮助。
ocaml - 如何创建一个结合 Parser 和 Lexer 的程序
我想使用 Ocamllex/Ocamlyacc 构建一个编译器,并且我想创建一个主程序来结合我的 OcamlParser 和 OcamlLexer。问题是我知道如何使用命令行中的输入来做到这一点,如下面的代码:
但是,如果我想使用文件作为输入,我该怎么办?我试过这样的事情:
但它并没有真正起作用。
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.
compiler-construction - 获取语法列表
我正在尝试构建一个编译器,目前我很迷茫。我有一个主类,并且希望能够声明具有继承的其他类,即class newClass extends classThatHasBeenDeclaredBefore { }
我的输入看起来像
并且 myclass_list
包含我程序中的所有课程,它也可以为空。
一个简单的类声明如下:
有什么方法可以检查第二个CLASS_ID
是否已经以某种方式被声明或使用过?我的想法是,我class_list
无法从我尝试添加新课程的地方到达,但我在 OCaml 上很烂。
parsing - 尝试解决 shift-reduce 解析问题
我正在尝试为 C 编写语法,但遇到了一个我不太理解的问题。语法的相关部分:
这行不通。我运行 ocamlyacc -v 并得到以下报告:
我已经读过移位/减少冲突是由于语法规范中的歧义造成的,但我不知道如何以一种不歧义的方式指定它?
ocaml - OCaml 函数应用优先级和关联性
我需要在我的 OCaml 解析器中为函数应用程序提供高优先级和左关联性。我有一堆与之匹配的不同令牌,例如
%left
我使用, ...给出了所有这些优先级和关联性,right
但是,由于exp
我用来匹配的不是令牌,所以我想知道在这种情况下我将如何做到这一点:
我有我的所有匹配exp
项,没有制作一堆不同的 exp1 exp2s 等等,我想知道是否有可能给予exp
exp
最高优先级并留下关联。
我在另一个论坛上为我的班级发布了这个并得到了:
您可以将虚拟令牌与功能应用程序规则相关联,如下所示:
然后使用 %left 和虚拟标记指定关联性。
但是我不确定这意味着什么,所以如果有人可以详细说明这一点或给我另一个很棒的解决方案。
ocaml - 带有空字符串的 ocamlyacc
所以我有一个包含空字符串的语法。语法是这样的:
S->ε
S->表达式;; 小号
当我运行我的解析器时,我收到错误“没有更多的状态要丢弃”,所以我相信我没有正确表示空字符串。那么我将如何去表示它,特别是在 lexer .mll 文件中?
我知道我需要为它制定一个规则,所以我认为我已经把它记下来了。这就是我认为解析器 .mly 文件应该看起来的样子,不包括表达的东西。