aboutsummaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorChimrod <>2023-10-03 15:10:26 +0200
committerChimrod <>2023-10-15 19:04:36 +0200
commit49f69c1ab4d3d8716f30d7bd36a66a4241e16d33 (patch)
tree13ef2d7577b725329eb89828f81a3f27174cef17 /lib
parent8ec89159f83b2c65995555f2c1a65e8ded950242 (diff)
New analyzer for the dead end
Diffstat (limited to 'lib')
-rw-r--r--lib/syntax/dead_end.ml49
-rw-r--r--lib/syntax/default.ml7
-rw-r--r--lib/syntax/t.ml57
3 files changed, 112 insertions, 1 deletions
diff --git a/lib/syntax/dead_end.ml b/lib/syntax/dead_end.ml
new file mode 100644
index 0000000..78eadda
--- /dev/null
+++ b/lib/syntax/dead_end.ml
@@ -0,0 +1,49 @@
+open StdLabels
+
+type pos = Lexing.position * Lexing.position
+type ('a, 'b) variable = { pos : 'a; name : string; index : 'b option }
+
+module Expression = Default.Expression
+
+module Instruction = struct
+ type repr = unit
+ type expression = Expression.repr
+ type variable = Expression.variable
+
+ (** Call for an instruction like [GT] or [*CLR] *)
+ let call : pos -> string -> expression list -> repr = fun _ _ _ -> ()
+
+ (** Label for a loop *)
+ let location : pos -> string -> repr = fun _ _ -> ()
+
+ (** Comment *)
+ let comment : pos -> repr = fun _ -> ()
+
+ (** Raw expression *)
+ let expression : expression -> repr = fun _ -> ()
+
+ type clause = pos * expression * repr list
+
+ let if_ : pos -> clause -> elifs:clause list -> else_:repr list -> repr =
+ fun _ _ ~elifs ~else_ ->
+ ignore elifs;
+ ignore else_;
+ ()
+
+ let act : pos -> label:expression -> repr list -> repr =
+ fun _ ~label _ ->
+ ignore label;
+ ()
+
+ let assign : pos -> variable -> T.assignation_operator -> expression -> repr =
+ fun _ _ _ _ -> ()
+end
+
+module Location = struct
+ type repr = Instruction.repr
+ type instruction = Instruction.repr
+
+ let location : pos -> instruction list -> repr =
+ fun _pos instructions ->
+ List.fold_left instructions ~init:() ~f:(fun () instruction -> instruction)
+end
diff --git a/lib/syntax/default.ml b/lib/syntax/default.ml
index f4bc34e..9c5073c 100644
--- a/lib/syntax/default.ml
+++ b/lib/syntax/default.ml
@@ -1,3 +1,8 @@
+(** Default implementation which does nothing.
+
+This module is expected to be used when you only need to implement an analyze
+over a limited part of the whole syntax. *)
+
type pos = Lexing.position * Lexing.position
type ('a, 'b) variable = { pos : 'a; name : string; index : 'b option }
@@ -5,7 +10,7 @@ module Expression = struct
type 'a obs
type repr = unit
- type variable = { pos : pos; name : string; index : repr option }
+ type variable
(**
Describe a variable, using the name in capitalized text, and an optionnal
index.
diff --git a/lib/syntax/t.ml b/lib/syntax/t.ml
index 9c25647..e9a901d 100644
--- a/lib/syntax/t.ml
+++ b/lib/syntax/t.ml
@@ -76,3 +76,60 @@ type function_ =
| Ucase'
| Val
[@@deriving eq, show]
+
+type keywords =
+ | Inclib
+ | Addobj
+ | Cla
+ | Clear
+ | Clear'
+ | Close
+ | CloseAll
+ | Cls
+ | CmdClear
+ | CopyArr
+ | CurActs
+ | CurActs'
+ | CurLoc
+ | CurLoc'
+ | DelAct
+ | FreeLib
+ | DelObj
+ | Dynamic
+ | Exec
+ | Exit
+ | Gosub
+ | Goto
+ | IncLib
+ | Jump
+ | KillAll
+ | KillObj
+ | KillVar
+ | MainTxt
+ | MainTxt'
+ | Menu
+ | Msg
+ | Nl
+ | Nl'
+ | P
+ | P'
+ | Play
+ | Play'
+ | RefInt
+ | SaveGame
+ | SelAct'
+ | SelObj
+ | SelObj'
+ | SetTimer
+ | ShowActs
+ | ShowInput
+ | ShowObjs
+ | ShowStat
+ | Unselect
+ | UseHTML
+ | UserCom'
+ | UserText
+ | UserText'
+ | View
+ | Wait
+ | XGoto