问题标签 [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 - OCamlLex 不区分大小写
有没有办法在 Ocamllex 规范中设置不区分大小写的标记?我已经尝试以这种方式制作不区分大小写的令牌:
但我正在寻找其他东西,如果存在的话。
ocaml - Ocamllex refill-handler 示例
在第 12 章 Lexer 和解析器生成器中,我无法编译以下示例:
我也不明白 Make 模块是如何工作的,以及它来自哪里。注意:我目前使用的是 4.02.1 ocaml 编译器。
ocaml - OCamllex 无法导入核心包(转到 Python 编译器)
我正在使用 OCamllex 和 Menhir 编写 Go to Python 编译器,但我的词法分析器无法导入核心包。
这是我的 lex.mll 文件:
我有一个 make 文件 make.sh 将词法分析器和解析器放在一起
但是当我运行 ./make.sh 我得到这个错误:
我可以通过编辑我的 .ocamlinit 文件在 ocaml 解释器中打开 Core,但是如何在 ocamlc 编译的脚本中导入 Core?
ocaml - 使用 corebuild 编译 OCaml
我目前有一个包含以下文件的项目(转到 Python 编译器)
以下是依赖项:
我尝试根据我阅读的文档进行以下编译:
ast.ml 包含一个类型声明列表,其中我有一个
我现在花了几个小时阅读 ocamlfind、corebuild 和 ocamlopt 的文档,什么也没有。在某些时候,它似乎只是一个巧合而编译,并且再也没有工作过。我愿意使用任何工具。
这是 parser.mly 中的内容
这是错误消息中提到的最后一行。
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
返回
还有评论中的一个例子:
ocaml - 使用 ocamllex 进行词法分析和包含指令
我正在为必须支持 #include 指令的类 C 语言制作编译器(仅在文件的开头)
一个简单但不优雅的方法是创建一个子程序来查找指令的每次出现,并用新临时文件中的相应文件替换。
现在这根本不好。所以我尝试了以下方法:
想法如下:每当你找到一个包含时,使用给定的文件名打开一个新通道,并递归地调用该通道上的“lexer”规则。之后,继续使用 lexing-buffer 的当前状态并继续进行 lexing。
问题是,它从来没有奏效。
我还看到,当缓冲区 lexbuf 达到 eof 时,可以进行填充。但我找不到更多信息。这让我想到了将上面的代码更改为以下内容:
在填充器中,您将从堆栈的顶部继续
但工作起来似乎很有野心。
有任何想法吗?
Ps 词法分析器(以及解析器)是从另一个模块调用的(我们称之为 Main.ml)
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 中工作。
lexical-analysis - 词法分析器中的优先顺序
我正在为 Excel 公式编写词法分析器和解析器。
在 Excel 中,我们可以为单元格指定名称。例如,abc
是一个有效的名称,而禁止命名一个单元格B2
,以免与单元格混淆
B2
。因此,一旦我们遇到一个公式=B2
,我们确定它B2
引用的是一个单元格而不是用户定义的名称。
在我的lexer_formula.mll
中,我定义了标识符:
但是像B2
with match both lex_cell
and这样的字符串lex_name
,有谁知道我如何告诉词法分析器首先lex_cell
考虑lex_name
?lex_cell
放入之前就足够lex_name
了rule token = parse
吗?
ocaml - 忠实地处理漂亮打印机中的空白
我正在为一种语言编写前端(by ocamllex
and ocamlyacc
)。
所以前端可以Abstract Syntax Tree (AST)
从一个程序构建一个。然后我们经常写一个漂亮的打印机,它接受一个 AST 并打印一个程序。如果稍后我们只想编译或分析 AST,大多数时候,我们不需要打印的程序与原始程序在空白方面完全相同。但是,这一次,我想编写一个漂亮的打印机,它打印的程序与原始程序完全相同,就白间距而言。
因此,我的问题是在尽量不修改太多 AST 类型的同时处理空白的最佳实践是什么。我真的不想为 AST 中的每种类型添加一些(空格)。
例如,这就是我目前处理(即跳过)空白的方式lexer.mll
:
有谁知道如何更改此以及前端的其他部分以正确考虑空白以供以后打印?
frontend - 在格式化程序中存储位置的常用方法
我想为特定语言编写一个小编辑器。在编辑器中,我们可以添加indent
一行或多行(即在每行左侧添加空格);我们还将能够format
修改整个代码(即,在适当的位置更改空格和换行符)。
ocamllex
给定一个程序,我的前端ocamlyacc
可以构建一个Abstract Syntax Tree (AST)
. 我想知道在 AST 中存储元素位置的常用方法。
position
我猜的一种方法是在 AST 的每个元素上附加一个(开始) 。例如,如果表达式的类型定义如下:
它会变成:
然后,如果我们知道每个元素的长度,我们就可以推断出所有内容在编辑器中的位置。这是一种常见的方法吗?我不觉得好看...