问题标签 [menhir]

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 投票
1 回答
164 浏览

ocaml - 是否可以调试 Menhir 词法分析器?

可以调试 Menhir 生成的解析器,例如menhir --interpret --interpret-show-cst parser.mly. 是否也可以调试词法分析器创建的标记?我没有在 Manhir 手册页或在线找到任何内容。

例如,调试“1+2”会吐出“INT 1 PLUS INT 2”令牌列表。

查看生成的 parser.ml 模块,有一个具有令牌类型的 MenhirBasics 模块,但没有 string_of_token 或类似的。哦,令牌类型在 parser.mli 文件中公开。如果 Menhir 可以生成 [@@deriving show] 或类似内容,那就太好了。

相关 Gitlab 问题:https ://gitlab.inria.fr/fpottier/menhir/-/issues/6

0 投票
0 回答
24 浏览

ocaml - sedlex 和 ocaml 不会向 $startpos 和 $endpos 发送相同的位置信息

以前,我有一个由 menhir 和 ocamllex 制作的解析器和词法分析器。在解析器中,我使用$startposand $endpos

其中Loc.print定义为:

在词法分析器中,我具有以下功能来打印 loc 信息:

结果,'a\n+b'返回以下输出:

然后,我使用 sedlex 制作词法分析器,我有以下功能来打印 loc 信息:

结果, 'abc\n+d'返回以下输出:

注意,因为换行,这里的location of+和location ofd没有很好的计算。结果,我的 loc 信息expression不再好。

有谁知道如何解决这一问题?

0 投票
1 回答
65 浏览

ocaml - 使用 menhir 和 ocamlbuild 调试代码

我正在实现一种小型编程语言。这是代码库。该程序是用ocamlbuild. 我添加了一个使用menhir. 当我编译并运行程序时,我收到以下消息。

我正在尝试通过将 传递explain_tag文件来查找更多详细信息

但似乎没有任何区别。如何menhir通过 ocamlbuild 生成日志文件?或其他调试方式?

0 投票
1 回答
59 浏览

parsing - Menhir的部分解析和恢复

Sedlex 和 Menhir 中有一个非常小的计算器。现在,我想让计算器能够解析像1+. 所以我修改parser.mly

但评估1+仍然返回错误Fatal error: exception Parser.MenhirBasics.Error

有人可以帮忙吗?

0 投票
1 回答
42 浏览

makefile - 通过 makefile 或手动添加模块

我有一个用传统 makefile 构建的大项目。我想在我的项目中添加一个像这个项目这样的错误处理机制。

在示例项目中,UnitActionsParser按照dune的如下规则生成了一个模块:

目前,makefile我的项目包含如下内容:

所以现在,我想知道如何构建这样的UnitActionsParser模块。最好的办法是修改我的makefile,有人知道怎么做吗?否则,我们也可以首先手动添加它。我在命令行中尝试过$ menhir --table --external-tokens Parser,但它返回了我Usage: menhir <options> <filenames>。有人可以帮忙吗?

0 投票
1 回答
39 浏览

ocaml - Sedlexing.lexbuf 类型与 Lexing.lexbuf 类型不兼容

我想通过 sedlex+menhir 在我的项目中添加 Menhir 的增量 API 和错误处理;我正在尝试在我的代码attempt2fail采用这个示例。这是attempt2示例:

在我的代码中,我尝试了:

但是,编译给了我一个错误:

有人可以帮忙吗?

(* GitHub中的链接*)

0 投票
1 回答
37 浏览

ocaml - 生成启用增量 API 和检查 API 的解析器

我有一个由 menhir 和传统 makefile 构建的大项目。首先,我想在我的项目中添加一个像这个项目这样的错误处理机制。

通过跟踪示例项目的沙丘,我设法通过以下命令生成.mly.mli.ml和of :.cmi.cmounitActionsParser_e.mly

增量 API 和错误处理确实有效。

然后,我想将像这个项目这样的错误恢复添加到我的项目中。然后,在我的项目中items state引发了错误。Error: Unbound value items根据手册沙丘,我想我需要在--inspection某处添加。

我试过了menhir --explain --inspection --table --dump --infer --external-tokens Parser_e unitActionsParser_e.mly,然后camlfind ocamlc -package menhirLib -c unitActionsParser_e.mli报错Unbound type constructor Parser_e.terminal

我也尝试直接处理parser_e.mly而不是使用unitActionsParser_eby menhir --explain --inspection --table --dump --infer parser_e.mly,但它返回了一个错误Unbound module Utilitywhere Utilityis a module in another folder required by parser_e.mly。在我手动复制utility.cm*到 的文件夹后parser_e.mly,它返回了一个错误Unbound module Sedlexing(这里是一个我们可以重现错误的 fork)(这可能与手册的与构建系统的交互有关)。

有谁知道生成解析器(UnitActionsParser_eParser_e)的正确命令和标志是什么,以启用 Menhir 的增量 API 和检查 API?

(* 在讨论.ocaml.org 中的链接:https ://discuss.ocaml.org/t/generate-a-parser-enabling-incremental-api-and-inspection-api/9380 *)

0 投票
0 回答
33 浏览

menhir - 让menhir通过dune使用外部模块

这个项目中,我想添加一个文件夹extra,其中包含try.ml

然后,在 中parser.mly,我想使用模块Try。所以我需要在标题中打开它:

此刻,dune如下

有谁知道如何修改沙丘文件以使其考虑Try在内?

0 投票
1 回答
20 浏览

parsing - 了解menhir生成的.messages文件

我正在尝试了解.messagesmenhir 生成的文件。

这个示例中,我们可以使用它menhir parser.mly --list-errors > parser.messages来生成parser.messages。错误如下:

通常,--list-errors应该计算导致错误的所有可能方式。但我不明白为什么喜欢main: INT PLUS DIVmain: INT MINUS DIV不包括在内的方式parser.messages(但是,表达方式5+/仍然正确地引发错误)。有谁知道原因?

0 投票
0 回答
17 浏览

stdin - 标准输入的意外字符

我正在--interpret-errormenhir 打成平手interpret

对于这个示例,我在命令行中输入menhir --interpret-error parser.mly或,然后对于我输入的任何表达式,它返回menhir --interpret parser.mly

有谁知道出了什么问题?