私はまだOCamlに非常に慣れていないため、小さな言語用のスキャナー、パーサー、および抽象構文木(きれいなプリンターを使用)を作成しました。私の AST は以前は正常にコンパイルされていましたが、現在は構文エラーが発生し、その理由がわかりません。
エラーが発生するコードの部分は次のとおりです。
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: エラー: 構文エラー
誰かアドバイスがあれば、とてもありがたいです。ありがとうございました!:)