问题标签 [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 回答
346 浏览

ocaml - OCamlLex 不区分大小写

有没有办法在 Ocamllex 规范中设置不区分大小写的标记?我已经尝试以这种方式制作不区分大小写的令牌:

但我正在寻找其他东西,如果存在的话。

0 投票
1 回答
116 浏览

ocaml - Ocamllex refill-handler 示例

第 12 章 Lexer 和解析器生成器中,我无法编译以下示例:

我也不明白 Make 模块是如何工作的,以及它来自哪里。注意:我目前使用的是 4.02.1 ocaml 编译器。

0 投票
1 回答
102 浏览

ocaml - OCamllex 无法导入核心包(转到 Python 编译器)

我正在使用 OCamllex 和 Menhir 编写 Go to Python 编译器,但我的词法分析器无法导入核心包。

这是我的 lex.mll 文件:

我有一个 make 文件 make.sh 将词法分析器和解析器放在一起

但是当我运行 ./make.sh 我得到这个错误:

我可以通过编辑我的 .ocamlinit 文件在 ocaml 解释器中打开 Core,但是如何在 ocamlc 编译的脚本中导入 Core?

0 投票
1 回答
370 浏览

ocaml - 使用 corebuild 编译 OCaml

我目前有一个包含以下文件的项目(转到 Python 编译器)

以下是依赖项:

我尝试根据我阅读的文档进行以下编译:

ast.ml 包含一个类型声明列表,其中我有一个

我现在花了几个小时阅读 ocamlfind、corebuild 和 ocamlopt 的文档,什么也没有。在某些时候,它似乎只是一个巧合而编译,并且再也没有工作过。我愿意使用任何工具。

这是 parser.mly 中的内容

这是错误消息中提到的最后一行。

0 投票
4 回答
9319 浏览

c++ - OS X 中的“Clang:错误:没有输入文件”

按照这个解决方案,我用#include "...frontend/tokens.mll"在我的lexer.mll,然后我用它cpp -P frontend/lexer.mll -o frontend/gen/lexer.mll来生成完整的 mll 文件。该解决方案以前在 Ubuntu 下有效。

现在,我尝试在 中执行此操作Mac OS 10.11.1,它给出了一个错误clang: error: no input files

gcc -v返回

我看不到我在哪里使用 XCode 或 PCH 文件。有谁知道我应该如何配置环境才能cpp工作?

编辑1:

cpp --version返回

还有评论中的一个例子:

在此处输入图像描述

0 投票
1 回答
431 浏览

ocaml - 使用 ocamllex 进行词法分析和包含指令

我正在为必须支持 #include 指令的类 C 语言制作编译器(仅在文件的开头)

一个简单但不优雅的方法是创建一个子程序来查找指令的每次出现,并用新临时文件中的相应文件替换。

现在这根本不好。所以我尝试了以下方法:

想法如下:每当你找到一个包含时,使用给定的文件名打开一个新通道,并递归地调用该通道上的“lexer”规则。之后,继续使用 lexing-buffer 的当前状态并继续进行 lexing。

问题是,它从来没有奏效。

我还看到,当缓冲区 lexbuf 达到 eof 时,可以进行填充。但我找不到更多信息。这让我想到了将上面的代码更改为以下内容:

在填充器中,您将从堆栈的顶部继续

但工作起来似乎很有野心。

有任何想法吗?

Ps 词法分析器(以及解析器)是从另一个模块调用的(我们称之为 Main.ml)

0 投票
1 回答
652 浏览

compiler-errors - OCaml 警告 31、编译器库和 ppx

我正在将我的应用程序从 OCaml 4.02.3 移植到 4.03.0。

假设您有以下内容lexer.ml

我正在尝试按以下方式运行它:

但我收到以下错误:

我知道它compiler-libs也有一个名为的模块Lexer,但是它与我的词法分析器发生冲突:

  • 我不是想链接编译器库。我知道它由 使用ppx_sexp_conv,但它是一个预处理器,它不需要将编译器库链接到我的应用程序中。

  • 警告 31 只是一个警告,我明确地试图将其 ( -w @a-4-31) 视为一种解决方法,但这不起作用。它曾经在 4.02.3 中工作。

0 投票
1 回答
394 浏览

lexical-analysis - 词法分析器中的优先顺序

我正在为 Excel 公式编写词法分析器和解析器。

在 Excel 中,我们可以为单元格指定名称。例如,abc是一个有效的名称,而禁止命名一个单元格B2,以免与单元格混淆 B2。因此,一旦我们遇到一个公式=B2,我们确定它B2引用的是一个单元格而不是用户定义的名称。

在我的lexer_formula.mll中,我定义了标识符:

但是像B2with match both lex_celland这样的字符串lex_name,有谁知道我如何告诉词法分析器首先lex_cell考虑lex_namelex_cell放入之前就足够lex_namerule token = parse吗?

0 投票
2 回答
88 浏览

ocaml - 忠实地处理漂亮打印机中的空白

我正在为一种语言编写前端(by ocamllexand ocamlyacc)。

所以前端可以Abstract Syntax Tree (AST)从一个程序构建一个。然后我们经常写一个漂亮的打印机,它接受一个 AST 并打印一个程序。如果稍后我们只想编译或分析 AST,大多数时候,我们不需要打印的程序与原始程序在空白方面完全相同。但是,这一次,我想编写一个漂亮的打印机,它打印的程序与原始程序完全相同,就白间距而言。

因此,我的问题是在尽量不修改太多 AST 类型的同时处理空白的最佳实践是什么。我真的不想为 AST 中的每种类型添加一些(空格)。

例如,这就是我目前处理(即跳过)空白的方式lexer.mll

有谁知道如何更改此以及前端的其他部分以正确考虑空白以供以后打印?

0 投票
1 回答
47 浏览

frontend - 在格式化程序中存储位置的常用方法

我想为特定语言编写一个小编辑器。在编辑器中,我们可以添加indent一行或多行(即在每行左侧添加空格);我们还将能够format修改整个代码(即,在适当的位置更改空格和换行符)。

ocamllex给定一个程序,我的前端ocamlyacc可以构建一个Abstract Syntax Tree (AST). 我想知道在 AST 中存储元素位置的常用方法。

position 我猜的一种方法是在 AST 的每个元素上附加一个(开始) 。例如,如果表达式的类型定义如下:

它会变成:

然后,如果我们知道每个元素的长度,我们就可以推断出所有内容在编辑器中的位置。这是一种常见的方法吗?我不觉得好看...