问题标签 [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.
parsing - 从 OCamllex lexbuf 中提取令牌列表
我正在使用 ocamllex 在 OCaml 中编写 Python 解释器,为了处理基于缩进的语法,我想
- 使用 ocamllex 标记输入
- 遍历 lexed 标记列表并根据解析器的需要插入 INDENT 和 DEDENT 标记
- 将此列表解析为 AST
然而,在 ocamllex 中,词法分析步骤会产生一个 lexbuf 流,该流不能轻易地迭代以进行缩进检查。有没有一种从 lexbuf 中提取标记列表的好方法,即
token_list 类型 Parser.token 列表在哪里?我的技巧是定义一个简单的解析器,比如
并称之为
但这有各种各样的问题,比如减少班次错误和不必要的复杂性。有没有更好的方法在 OCaml 中编写 lexbuf -> Parser.token 列表函数?
ocaml - ocamlmktop 错误:两者都定义了一个名为 Parser 的模块;两者都定义了一个名为 Lexer 的模块;
我是 ML 的新手,现在学习 ocaml 只需几个小时就可以用它构建我的编译器。Lexer 和 Parser 生成没有任何问题。但是当编译器代码由 ocamlmktop 构建时,就会出现问题。
错误信息如下所示,但二进制文件 myc.top 已完成并可以运行。
请您帮我解决错误信息,非常感谢您的支持。
1.词法分析器文件lexer.mll
2 解析器文件 Parser.mly
3. 文件语法.ml
makefile - 如何为 Ocaml 项目生成正确的 makefile
我正在学习编译器如何工作。我阅读了一篇关于如何使用 Ocamllex 和 Ocamlyacc 从源代码中读取输入、生成标记并生成语法树的教程,以便稍后计算程序的执行。在学习过程中,我不得不经常重新编译代码,因此我决定创建一个 makefile 来自动化这一步。由于我对 Ocaml 和 makefile 都是新手,所以我在努力使 makefile 正常工作。
到目前为止,从我的谷歌研究来看,我可以创建这个 makefile,但我得到的最新错误是“make: *** No rule to make target 'lexer.mli', required by 'depend'. Stop.”。
我怎样才能为这个任务创建一个合适的makefile?
ocaml - 从 OCaml 词法分析器获取令牌
我目前正在开发基于终端的文本编辑器。我想为在文本编辑器中打开的 .ml 文件支持一种语法高亮显示。我在想,如果有一种方法可以访问通常用于 OCaml 的词法分析器,那么也许我可以使用该词法分析器对从 .ml 文件中读取的文本进行适当的着色。
这可能吗?
parsing - Menhirget 区间之间的值
我在 parser.mly 中得到了这条规则:
我需要将 [start .. end] 的值传递给 list "l"。示例([1..4])。我手动搜索,separated_list(TWOPoints, intervalue)
只得到值 1 和 4。但我需要 1 到 4 之间的所有值,包括像这样的 [1..2..3..4],但不必详尽无遗。
ocaml - Ocaml 语法错误:构建 zip 功能时预期的模式
我想做一个叫做 zip 的函数,所以:
zip [1;2;3;4] [5;6;7;8] 会产生: [1;5;2;6;3;7;4;8]
但我收到一个错误:line#4 h2::t2 make error syntax error : pattern expected
什么是正确的语法?
parsing - 在确定标记之前让词法分析器考虑解析器?
我正在 ocamllex 和 ocamlyacc 中编写一个词法分析器和解析器,如下所示。function_name
和table_name
是相同的正则表达式,即只包含英文字母的字符串。确定字符串是否是function_name
或是table_name
检查其周围环境的唯一方法。例如,如果这样的字符串被[
and包围]
,那么我们就知道它是 a table_name
。这是当前代码:
在lexer.mll
,
在parser.mly
:
正如我| function_name as s { FUNCTIONNAME s }
之前写| table_name as s { TABLENAME s }
的,上面的代码无法解析[haha]
;它首先在词法分析器中被认为haha
是a function_name
,然后在解析器中找不到任何对应的规则。如果它可以在词法分析器中被haha
视为 a table_name
,那么它将[haha]
在解析器中匹配为表。
一种解决方法是在词法分析器中更精确。例如,我们在词法分析器中定义let table_name_with_brackets = '[' ['a'-'z' 'A'-'Z']+ ']'
和| table_name_with_brackets as s { TABLENAMEWITHBRACKETS s }
。但是,我想知道是否还有其他选择。难道不能让词法分析器和解析器一起工作来确定标记和减少吗?
regex - 字符 0:预期的字符集
我想通过这里定义的正则表达式来定义一个表名,这样:
始终以字母、下划线字符 (_) 或反斜杠 () 开头的名称。在名称的其余部分使用字母、数字、句点和下划线字符。
例外:您不能使用“C”、“c”、“R”或“r”作为名称,因为它们已被指定为在输入活动单元格时选择列或行的快捷方式在名称或转到框中。
但它给我一个错误character 0: character set expected.
。有人可以帮忙吗?
parsing - 转移表溢出,自动机太大
我想在Excel 公式的词法分析器和解析器中添加对带有 Excel 表的结构化引用的支持。
我将以下正则表达式添加到lexer_structref.mll
:
在lexer_e.mll
中,我添加了如下标识符。并将parser_e.mly
调用Parser_structref.mly
which 解析结构化引用。
但是,编译整个程序给了我以下错误:
| lex_Column'
从中删除let lex_structref
使编译工作。
有什么我写错了,还是因为我以前的词法分析器和解析器(工作正常)已经很大并且添加了一些东西会爆炸?我怎么能诊断呢?
regex - 某些特殊字符仅在它们前面有转义字符时才允许使用
我想为一类字符串构造一个正则表达式(以 lex 的风格,具有更类似于 OCaml 的语法) ,其中4 个字符[
, ]
, #
,'
仅在它们前面有一个转义字符时才允许'
。
以下是一些有效的示例:
'#Data
,abc'#Headers
,abc'#Totals'[efg
,123'#Totals']efg
,abc
,123
以下是一些无效的示例:
#Data
,abc#Headers
,abc#Totals[efg
,123#Totals]efg
,'#Totals[efg
希望定义清楚。首先,有谁知道如何构造这样的正则表达式?其次,有谁知道如何构造这样一个可以被 ocamllex 接受的正则表达式(以 lex 的风格,具有更类似于 OCaml 的语法) ?