问题标签 [ocamllex]

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 回答
341 浏览

ocaml - 尝试解析虚构的编程语言时出错

我正在为我编写的编程语言开发语言解释器。这是一些示例代码,它应该可以工作,但Syntax error at offset 45.在阅读此测试用例时当前会消失。

正确的解释是第一行用 foo 创建一个映射并将其存储在一个名为 foo 的变量中,第二行查找记录 foo 中字段 min 的值,以及开始/结束 curlies 以及分号换行这两个表达式成一个expr_seq(即一个块),其计算结果与其中的最后一个相同expr

我的 parser.mly 的简化版本如下:

尝试自己调试它,我发现如果您删除以下内容| v = VAR LBRACK f = q_var RBRACK ASSIGN e = exp,它将解析它并正确运行,但我真的希望能够在地图中设置东西。

我有 98% 的把握认为问题出在我的 mly 文件中,但我的 lexer.mll 的简化版本如下:

一个简单的 ml 文件是:

编辑:这是一个Makefile。parser.mly、lexer.mll 和interpreter.ml 是上面的第二个、第三个和第四个文件。

这是制作/运行它,其中 test.in 是上面的第一个。

编辑2:我最终只是将| e = VAR LBRACK v = q_var RBRACK { GetMap(v,LookupVar(e)) } 一个特例添加到我的解析器中。那么,问题解决了吗?

0 投票
1 回答
1062 浏览

ocaml - 打印字符串的标记化

我目前正在研究一种编程语言作为一种爱好。如果可以让 ocamllex 在找到它们时打印出它匹配的标记,这将使词法分析错误更容易调试,我有时只是手动将打印语句添加到我的规则中,但应该有一种更简单的方法来做到这一点。

所以我要问的是,给定一个 .mll 文件和一些输入,是否有一种自动方式来查看相应的令牌?

0 投票
3 回答
2068 浏览

if-statement - Ocaml if-then-else 语法错误

为什么这个 Ocaml 语句给我一个语法错误?

if then else 语句是否总是必须返回一个值?

编辑:这是我正在努力的代码。我想将此函数应用于带有 map 函数的列表。该函数应该查看列表 wordlist 中的每个单词并添加到 stringmap。如果它已被添加到字符串映射中,则将 1 添加到其密码。

0 投票
2 回答
190 浏览

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

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

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

非常感谢您的帮助。

0 投票
1 回答
188 浏览

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

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

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

但它并没有真正起作用。

0 投票
1 回答
630 浏览

ocaml - 如何使用 ocamllex 生成的词法分析器

我有一个从教程中提取的简单词法分析器(http://plus.kaist.ac.kr/~shoh/ocaml/ocamllex-ocamlyacc/ocamllex-tutorial/sec-ocamllex-some-simple-examples.html

在生成词法分析器 OCaml 并创建可执行文件后,

ocamllex testlexer.mll && ocamlc -o testlexer testlexer.ml

我尝试通过 stdinecho c | ./testlexer和 file传递内容./testlexer input,但都不起作用。

我也没有看到生成testlexer.ml的用于从标准输入或文件读取的任何逻辑,它是要作为模块包含在另一个程序中还是由另一个代码生成工具(如 ocamlyacc)使用?

0 投票
3 回答
289 浏览

ocaml - 解析器中的 OCaml 语法错误

有人可以帮我解释为什么我在这一行有语法错误:let wordMap = StringMap.empty?这包含在 .mll 文件中。模块 StringMap 在上面定义。

我知道它什么也没打印,这只是为了测试。

0 投票
1 回答
147 浏览

regex - ocamllex 正则表达式语法错误

我有一些基本的 ocamllex 代码,由我的教授编写,看起来还不错:

但是,运行ocamllex wordcount.mll会产生 File "wordcount.mll", line 4, character 3: syntax error.

这表明[这里第四行的正则表达式的第一个有错误。到底是怎么回事?

0 投票
1 回答
73 浏览

ocaml - 在 OCaml 中打印 RLE 列表

如果我用 encode[1;1;2] 调用我的运行长度编码程序,我会得到

int encode list = [Multiple (1, 2); Singles 1]

我如何为单曲获得一个括号 (),这样它就像 [Multiple (1, 2); 单打(1)]?

0 投票
1 回答
436 浏览

f# - FsLex FsYacc:如何创建具有多行注释的语言

我正在玩基于 ocamllex 和 ocamlyacc 的 FsLex 和 FsYacc。用语言定义评论的最佳方式是什么?我是否在我的 lex 文件中创建注释标记?在语法的上下文中,我无法理解的评论有一些复杂性:

  1. 注释可以放在语法中的任何地方,应该被忽略。
  2. 注释可以包含任何内容,包括其他标记和无效代码。
  3. 注释可以跨越多行,我需要维护调试器的源代码位置。在 FsLex 和 ocamllex 中,这必须由语言开发人员完成。