Ocaml抽象语法树-语法错误
我对OCaml还很陌生,已经为一种小型语言编写了扫描程序、解析器和抽象语法树(带有漂亮的打印机)。我的AST过去编译得很好,但现在它给了我一个语法错误,我不知道为什么 下面是我得到错误的代码部分:Ocaml抽象语法树-语法错误,ocaml,abstract-syntax-tree,Ocaml,Abstract Syntax Tree,我对OCaml还很陌生,已经为一种小型语言编写了扫描程序、解析器和抽象语法树(带有漂亮的打印机)。我的AST过去编译得很好,但现在它给了我一个语法错误,我不知道为什么 下面是我得到错误的代码部分: 1 type op = Add | Sub | Mult | Div | Equal | Neq | Less | Leq | Greater | Geq 2 | And | Or | Not 3 4 5 type primitive
1 type op = Add | Sub | Mult | Div | Equal | Neq | Less | Leq | Greater | Geq
2 | And | Or | Not
3
4
5 type primitive = Int | Bool | String
6 type objtype = Room | Thing | GameMainDef
7
8 type program = odecl list
9
10 type odecl = {
11 object_name : string;
12 obj_type : objtype;
13 attrib : (string * expr) list;
14 funcdecl : f_decl list;
15 }
16
17 type expr =
18 Literal of int
19 | BoolLiteral of bool
20 | StringLiteral of string
21 | Id of string
22 | Unaryop of op * expr
23 | Binop of expr * op * expr
24 | Assign of string * expr
25 | Call of string * expr list
26 | Noexpr
27
28 type stmt =
29 Block of stmt list
30 | Expr of expr
31 | If of expr * stmt * stmt
32 | For of expr * expr * expr * stmt
33 | While of expr * stmt
34
35 type fdecl = {
36 fname : string;
37 locals : (primitive * string) list;
38 body : stmt list;
39 }
40
41 let rec string_of_type t = match t with
42 Bool -> "bool"
43 | Int -> "int"
44 | String -> "string"
45 | Room -> "Room"
46 | Thing -> "Thing"
47 | MainGameDef -> "MainGameDef"
还有大约100行代码(漂亮的打印机)
我发现以下语法错误:
文件“Ast.mli”,第41行,字符0-3:
错误:语法错误
如果有人有任何建议,我们将不胜感激。谢谢!:) 根据您更新的帖子,您正在编译一个mli文件。Mli是一个接口文件,您无法在其中写入函数/值定义。出现语法错误是因为let在接口中无效。根据您更新的帖子,您正在编译一个mli文件。Mli是一个接口文件,您无法在其中写入函数/值定义。出现语法错误是因为let在接口中无效。您应该公布出现的错误。我从你的代码中看到的错误不是语法错误,而是“Unbound type constructor op”,事实上,代码中没有它的定义。Camlspotter,这是我得到错误时代码的一部分,而不是整个文件。如上所述,整个文件是一个带有漂亮打印机的AST。我得到的错误是“语法错误,第41行,字符0-3”。第41行是上面提到的一行:“让rec string_的类型t=match t with”。如果你认为有帮助的话,我可以回复并发布整个文件(这里还定义了op);我只是想发布文件的相关部分,因为我遇到了语法错误。谢谢,Camlspotter,我添加了文件的其余部分,直到那个点和行号。谢谢。你应该公布你的错误。我从你的代码中看到的错误不是语法错误,而是“Unbound type constructor op”,事实上,代码中没有它的定义。Camlspotter,这是我得到错误时代码的一部分,而不是整个文件。如上所述,整个文件是一个带有漂亮打印机的AST。我得到的错误是“语法错误,第41行,字符0-3”。第41行是上面提到的一行:“让rec string_的类型t=match t with”。如果你认为有帮助的话,我可以回复并发布整个文件(这里还定义了op);我只是想发布文件的相关部分,因为我遇到了语法错误。谢谢,Camlspotter,我添加了文件的其余部分,直到那个点和行号。谢谢。是的,这正是问题所在。在经历了这么多的麻烦和修改代码之后,我所要做的就是修改扩展。非常感谢!是的,这正是问题所在。在经历了这么多的麻烦和修改代码之后,我所要做的就是修改扩展。非常感谢!