问题标签 [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.
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)) }
一个特例添加到我的解析器中。那么,问题解决了吗?
ocaml - 打印字符串的标记化
我目前正在研究一种编程语言作为一种爱好。如果可以让 ocamllex 在找到它们时打印出它匹配的标记,这将使词法分析错误更容易调试,我有时只是手动将打印语句添加到我的规则中,但应该有一种更简单的方法来做到这一点。
所以我要问的是,给定一个 .mll 文件和一些输入,是否有一种自动方式来查看相应的令牌?
if-statement - Ocaml if-then-else 语法错误
为什么这个 Ocaml 语句给我一个语法错误?
if then else 语句是否总是必须返回一个值?
编辑:这是我正在努力的代码。我想将此函数应用于带有 map 函数的列表。该函数应该查看列表 wordlist 中的每个单词并添加到 stringmap。如果它已被添加到字符串映射中,则将 1 添加到其密码。
ocaml - 如何在 Ocamlyacc 中定义无法识别的规则
我正在公司项目上工作,我必须使用 Ocamlyacc 和 Ocamllex 为一种语言创建一个编译器。我想知道是否可以在我的 Ocamlyacc 解析器中定义一个规则,它可以告诉我我的语法规则没有匹配输入的语法。
我必须坚持我是 Ocamllex/Ocamlyacc 的初学者
非常感谢您的帮助。
ocaml - 如何创建一个结合 Parser 和 Lexer 的程序
我想使用 Ocamllex/Ocamlyacc 构建一个编译器,并且我想创建一个主程序来结合我的 OcamlParser 和 OcamlLexer。问题是我知道如何使用命令行中的输入来做到这一点,如下面的代码:
但是,如果我想使用文件作为输入,我该怎么办?我试过这样的事情:
但它并没有真正起作用。
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)使用?
ocaml - 解析器中的 OCaml 语法错误
有人可以帮我解释为什么我在这一行有语法错误:let wordMap = StringMap.empty
?这包含在 .mll 文件中。模块 StringMap 在上面定义。
我知道它什么也没打印,这只是为了测试。
regex - ocamllex 正则表达式语法错误
我有一些基本的 ocamllex 代码,由我的教授编写,看起来还不错:
但是,运行ocamllex wordcount.mll
会产生
File "wordcount.mll", line 4, character 3: syntax error.
这表明[
这里第四行的正则表达式的第一个有错误。到底是怎么回事?
ocaml - 在 OCaml 中打印 RLE 列表
如果我用 encode[1;1;2] 调用我的运行长度编码程序,我会得到
int encode list = [Multiple (1, 2); Singles 1]
我如何为单曲获得一个括号 (),这样它就像 [Multiple (1, 2); 单打(1)]?
f# - FsLex FsYacc:如何创建具有多行注释的语言
我正在玩基于 ocamllex 和 ocamlyacc 的 FsLex 和 FsYacc。用语言定义评论的最佳方式是什么?我是否在我的 lex 文件中创建注释标记?在语法的上下文中,我无法理解的评论有一些复杂性:
- 注释可以放在语法中的任何地方,应该被忽略。
- 注释可以包含任何内容,包括其他标记和无效代码。
- 注释可以跨越多行,我需要维护调试器的源代码位置。在 FsLex 和 ocamllex 中,这必须由语言开发人员完成。