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

parsing - Set a rule based on the value of a global variable

In my lexer & parser by ocamllex and ocamlyacc, I have a .mly as follows:

In params.ml, a variable separator is defined. Its value is either ; or , and set by the upstream system.

In the .mly, I want the rule of expr_separators to be defined based on the value of Params.separator. For example, when params.separtoris ;, only [1;2;3] is considered as expr, whereas [1,2,3] is not. When params.separtoris ,, only [1,2,3] is considered as expr, whereas [1;2;3] is not.

Does anyone know how to amend the lexer and parser to realize this?

PS:

The value of Params.separator is set before the parsing, it will not change during the parsing.

At the moment, in the lexer, , returns a token COMMA and ; returns SEMICOLON. In the parser, there are other rules where COMMA or SEMICOLON are involved.

I just want to set a rule expr_separators such that it considers ; and ignores , (which may be parsed by other rules), when Params.separator is ;; and it considers , and ignore ; (which may be parsed by other rules), when Params.separator is ,.

0 投票
1 回答
260 浏览

ocaml - 在 ocamllex 中对字符串进行词法分析

我一直在试图找到一个能够在 ocamllex 中处理字符串的好例子时遇到了一些麻烦。我发现桌面计算器示例有点用,但还没有真正找到一种方法来以类似的方式实现它,它也使用字符串,这是我引用的示例:

任何帮助将不胜感激。

0 投票
1 回答
39 浏览

ocaml - 为什么会出现这种语法错误?外壳没有给定原因

我刚刚写完这段模式匹配(下面附上)。无论我如何尝试修复它,当我尝试编译它时仍然存在“错误:语法错误”。

这段代码在这里:

错误在let compile (p: Ast.program) : result =

这是(来自外壳):

0 投票
1 回答
49 浏览

ocaml - 以外的任何字符

我为 ocamllex 定义了一个标记let non_line_termination_character = [^ '\x0D' '\x0A'],它代表除'\x0D'and之外的任何字符'\x0A'

现在,我想把它翻译成 sedlex。

有谁知道如何正确翻译?我应该使用SUB(例如,SUB(SUB(any, '\x0D'), '\x0A')SUB(any, ('\x0D' | '\x0A')))吗?

0 投票
2 回答
72 浏览

parsing - 确定是什么减慢了词法分析器的编译速度

我有一个词法分析器和解析器,用 OCaml 中的 sedlex 和 menhir 构建,用于解析电子表格公式。

词法分析器的以下部分在引用之前定义了路径+工作簿+工作表部分的正则表达式。例如,'C:\Users\Pictures\[Book1.xlsx]Sheet1'!='C:\Users\Pictures\[Book1.xlsx]Sheet1'!A1:B2

没有最后4个lex_before(即(lex_file, "!") | (lex_file_wo_brackets, "!") | ("'", lex_file, "'!") | ("'", lex_file_wo_brackets, "'!")),项目编译(by)的总时间ocamlc是3分30秒(耗时是编译的lexer.ml)。加上这 4 个案例,编译的总时间是 13 分 40 秒。需要时间的总是编译lexer.ml

有谁知道我们如何确定是什么减慢了编译速度?

我编写命名正则表达式的方式有什么问题会减慢编译速度吗?

0 投票
0 回答
24 浏览

ocaml - sedlex 和 ocaml 不会向 $startpos 和 $endpos 发送相同的位置信息

以前,我有一个由 menhir 和 ocamllex 制作的解析器和词法分析器。在解析器中,我使用$startposand $endpos

其中Loc.print定义为:

在词法分析器中,我具有以下功能来打印 loc 信息:

结果,'a\n+b'返回以下输出:

然后,我使用 sedlex 制作词法分析器,我有以下功能来打印 loc 信息:

结果, 'abc\n+d'返回以下输出:

注意,因为换行,这里的location of+和location ofd没有很好的计算。结果,我的 loc 信息expression不再好。

有谁知道如何解决这一问题?

0 投票
1 回答
49 浏览

compiler-construction - 使用没有解析器模块的 ocamllex 构建词法分析器

在用 menhir 构建解析器之前,我想用 ocamllex 构建一个词法分析器。

我已经编写了 .mll 文件。以下命令给了我这个消息:

然后我输入了以下内容:

.ml 文件的摘录:

我的理解是这些动作没有映射到任何东西,因此是未绑定的错误。
最后,我想知道的是如何在不编写解析器或 .mly 文件的情况下进行这些映射?我对这门语言很陌生,我想要实现的是一个用 ocamllex 构建的简单词法分析器。

0 投票
1 回答
57 浏览

functional-programming - 如何覆盖 Ocaml 中的模块方法

假设我有一个模块 A,它覆盖了模块 B 中的一些方法。我希望模块 A 通过覆盖 B 或其他方式来防止模块 A 中的这种覆盖。

我需要这个来从 YoJSON 获取行号。我尝试使用其他解析器,但它们没有 YoJSON 那么多的功能。

YoJSON 的 read.ml 中的以下代码阻止了缓冲区中的行号

来源:https ://github.com/ocaml-community/yojson/blob/master/lib/read.mll

有没有办法可以扭转这种行为?是否会再次覆盖 Lexer,然后覆盖 YoJSON 中使用 Lexer 的所有方法?

或者有没有办法用 YoJSON 或其他解析器以其他方式获取 json 成员的行号?

0 投票
0 回答
29 浏览

json - 在 OCaml 中使用 Jsonm 选择 Json 成员

我想使用 JSONM 和 OCaml 获取 json 文件中成员元素的特定出现的所有位置的列表。我知道如何在 YoJSON 中做到这一点,但无法在 jsonm 中找到方法。

Jsonm 文档

json文件如下:

我想Jsonm.decoded_range在“a”中获取名称为“blah”的事件对象列表。它可以出现两次。

我目前有以下代码,但它只是让我第一次出现名为 blah 的对象。

0 投票
0 回答
41 浏览

parsing - 在 parser.mly 文件中列出标记是否有优先权?

就像我在解析器的开头列出了一些标记一样

是否有任何类型的优先级与此相关?或者这只是一个对订购没有特别重要意义的代币列表?