我在写一个解释器,使用ocamlyacc和ocamllex编译我的解析器和词法分析器。 我的问题是,我有一个文件卡列斯测试,包含在词法分析器中定义的两个命令: print a
print b
但解释只是执行行只print a!我知道问题主要在解析器中,需要递归。我将它固定为这样(下面的代码),但它仍然不起作用。 %{
open Path
%}
%token <int> INT
我想安排ocamllex和ocamlyacc代码来扫描和解析一个简单的语言。我已经定义了相同的抽象语法,但我发现难以扫描复杂的规则。这是我的代码 {
type exp = B of bool | Const of float | Iszero of exp | Diff of exp*exp |
If of exp * exp * exp
}
rule s
我想定义一个keyword_table,它将某些字符串映射到某些令牌,并且我想让此表对于parser.mly和lexer.mll都可见。 看来,该表具有parser.mly来定义, %{
open Utility (* where hash_table is defined to make a table from a list *)
let keyword_table = h
我正在为Ocaml中的类做一个编译器。我需要用命令或表达式来读取文件,比如“1”,然后它返回Int 1。除了我和我的朋友之外,相同的代码与整个班级一起工作。每个人都使用相同的ocaml版本和Ubuntu 13.04。错误是:Lexico.Eof 有人对这可能是什么有什么想法? 这是asa.ml: type opB =
| Soma
| Sub
| Mul
| Div
type exp
我有一个警告编译我的词法分析器与OCaml的降低: File "lexer.mll", line 42, characters 26-57:
Warning 10: this expression should have type unit.
而且我想解析字符串,我做它启动时读取词法分析器报价结束时,一个特殊的规则我读了另一个报价,并在这种情况下返回字符串,并调用每个其他字符的规则标记。 这