问题标签 [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 投票
1 回答
66 浏览

ocaml - 如何使用 ocamlyacc 在 OCaml 中解析内存字符串(字符串类型)?

我有一个解析器,它使用 Ocamlyacc 和 lex 解析 std 输入。如何触发 OCaml 中字符串的开始解析规则?

0 投票
1 回答
333 浏览

parsing - Ocaml 解析器“未终止的操作”错误

我是 OCaml 的新手,我正在尝试使用解析器生成器 - ocamllex、ocamlyacc 为特定语言创建解析器。当我尝试编译我的parser.mly文件时,我收到以下错误:

错误(在 = 处带有标记):

以下是 parser.mly 文件的摘录:

0 投票
0 回答
172 浏览

parsing - ocaml 解析器“值不匹配”错误

你好!

我正在尝试为计算机代数系统编写词法分析器和解析器。

当我用我的 makefile 编译代码时,我在某些函数的值上遇到了问题。

这是 function.ml 的代码:

这是 lexer.mll 的代码:

这是 parser.mly 的代码:

问题是在使用 makefile 创建的 parser.mli 中,yacc_eqn 和 yacc_expr 的值是:

我有以下错误:

我认为解决方案可能是像演员一样的东西,但我完全不知道该怎么做......有人帮忙吗?

提前致谢 !

0 投票
1 回答
301 浏览

ocaml - 将 ocamlyacc 与 sedlex 一起使用

我试图弄清楚如何将 ocamlyacc 与 sedlex 一起使用。

lexer.ml(使用 sedlex):

我还有一个名为 的 ocamlyacc 文件parser.mly,其中包含parse语法规则之一。

为了解析一个字符串,我使用了这个:

但是在编译过程中,出现了这个错误(由Lexer.lex上面引起):

错误:此表达式的类型为 Sedlexing.lexbuf -> Parser.token,但预期的表达式类型为 Lexing.lexbuf -> Parser.token 类型 Sedlexing.lexbuf 与类型 Lexing.lexbuf 不兼容

据我了解,出现此错误是因为 ocamlyacc 期望词法分析器由 ocamllex 生成,而不是由 sedlex 生成。所以问题是:如何将 ocamlyacc 与 sedlex 一起使用?

0 投票
0 回答
342 浏览

parsing - 从 OCamllex lexbuf 中提取令牌列表

我正在使用 ocamllex 在 OCaml 中编写 Python 解释器,为了处理基于缩进的语法,我想

  1. 使用 ocamllex 标记输入
  2. 遍历 lexed 标记列表并根据解析器的需要插入 INDENT 和 DEDENT 标记
  3. 将此列表解析为 AST

然而,在 ocamllex 中,词法分析步骤会产生一个 lexbuf 流,该流不能轻易地迭代以进行缩进检查。有没有一种从 lexbuf 中提取标记列表的好方法,即

token_list 类型 Parser.token 列表在哪里?我的技巧是定义一个简单的解析器,比如

并称之为

但这有各种各样的问题,比如减少班次错误和不必要的复杂性。有没有更好的方法在 OCaml 中编写 lexbuf -> Parser.token 列表函数?

0 投票
2 回答
212 浏览

ocaml - Ocaml stringmap 计算器 AST 解析不添加或查找

非常接近让它工作,但在使用 OCaml 的 StringMap 时遇到问题。本质上,我正在制作一个计算器,它从 ocamllex 接收词汇流......所以这里应该用逗号分隔我们的表达式,而等号意味着我们将为变量赋值。

我意识到,在分配变量时,我无法查找它们,因为我在函数的 Var 案例中添加的未找到密钥的行中出现 (Fatal error: exception Not_found)。我不知道将 StringMap.empty 放在哪里或如何使其在此函数中可见......我想知道为什么它找不到我在 equals 情况下添加的内容?

这是我的代码。

0 投票
1 回答
283 浏览

makefile - 如何为 Ocaml 项目生成正确的 makefile

我正在学习编译器如何工作。我阅读了一篇关于如何使用 Ocamllex 和 Ocamlyacc 从源代码中读取输入、生成标记并生成语法树的教程,以便稍后计算程序的执行。在学习过程中,我不得不经常重新编译代码,因此我决定创建一个 makefile 来自动化这一步。由于我对 Ocaml 和 makefile 都是新手,所以我在努力使 makefile 正常工作。

到目前为止,从我的谷歌研究来看,我可以创建这个 makefile,但我得到的最新错误是“make: *** No rule to make target 'lexer.mli', required by 'depend'. Stop.”。

我怎样才能为这个任务创建一个合适的makefile?

0 投票
1 回答
52 浏览

ocaml - 从 OCaml 词法分析器获取令牌

我目前正在开发基于终端的文本编辑器。我想为在文本编辑器中打开的 .ml 文件支持一种语法高亮显示。我在想,如果有一种方法可以访问通常用于 OCaml 的词法分析器,那么也许我可以使用该词法分析器对从 .ml 文件中读取的文本进行适当的着色。

这可能吗?

0 投票
1 回答
161 浏览

ocaml - Ocaml 语法错误:构建 zip 功能时预期的模式

我想做一个叫做 zip 的函数,所以:
zip [1;2;3;4] [5;6;7;8] 会产生: [1;5;2;6;3;7;4;8]

但我收到一个错误:line#4 h2::t2 make error syntax error : pattern expected

什么是正确的语法?


0 投票
1 回答
51 浏览

parsing - 在确定标记之前让词法分析器考虑解析器?

我正在 ocamllex 和 ocamlyacc 中编写一个词法分析器和解析器,如下所示。function_nametable_name是相同的正则表达式,即只包含英文字母的字符串。确定字符串是否是function_name或是table_name检查其周围环境的唯一方法。例如,如果这样的字符串被[and包围],那么我们就知道它是 a table_name。这是当前代码:

lexer.mll,

parser.mly

正如我| function_name as s { FUNCTIONNAME s }之前写| table_name as s { TABLENAME s }的,上面的代码无法解析[haha];它首先在词法分析器中被认为haha是a function_name,然后在解析器中找不到任何对应的规则。如果它可以在词法分析器中被haha视为 a table_name,那么它将[haha]在解析器中匹配为表。

一种解决方法是在词法分析器中更精确。例如,我们在词法分析器中定义let table_name_with_brackets = '[' ['a'-'z' 'A'-'Z']+ ']'| table_name_with_brackets as s { TABLENAMEWITHBRACKETS s }。但是,我想知道是否还有其他选择。难道不能让词法分析器和解析器一起工作来确定标记和减少吗?