reimplement parsing code (but program does not compile yet because I have to change type of 'USE_SQUARES' constructure)

This commit is contained in:
2025-08-09 11:29:36 +01:00
parent b765e406c7
commit 940e4429a7
5 changed files with 42 additions and 29 deletions

View File

@@ -9,6 +9,9 @@ struct
in NODE {key = minKey, value = grid, left = LEAF, right = LEAF}
end
fun singleton grid =
NODE {key = minKey, value = grid, left = LEAF, right = LEAF}
fun insert (newKey, newValue, tree) =
case tree of
LEAF => NODE {key = newKey, value = newValue, left = LEAF, right = LEAF}

View File

@@ -11,9 +11,9 @@ int ::= (0-9)+
item ::= **{** int int int int int int int int **}**
grid ::= **[** item **]**
layer ::= **[** item **]**
grid_list ::= int int **{** (grid)+ **}**
layer_tree ::= int int **{** (layer)* **}**
```
The first two `int`s in the grid `int int **{** (item)+ **}**` always follow the order: `canvasWidth canvasHeight`.

View File

@@ -1,16 +0,0 @@
$(SML_LIB)/basis/basis.mlb
ann
"allowVectorExps true"
in
space-dfa.sml
int-dfa.sml
brace-dfa.sml
all-dfa.sml
end
tokens.sml
lexer.sml
parse-grid.sml
parser.sml

View File

@@ -18,20 +18,32 @@ struct
end
| _ => SOME (tokens, grid)
fun parseLayers (tokens, canvasWidth, canvasHeight, tree, counter) =
let
val grid = ParseGrid.make (canvasWidth, canvasHeight)
in
case parseItems (tokens, grid) of
SOME (tokens, grid) =>
let val tree = LayerTree.insert (counter, grid, tree)
in parseLayers (tokens, canvasWidth, canvasHeight, tree, counter + 1)
end
| NONE => (tokens, tree)
end
fun parse string =
case Lexer.scan string of
SOME tokens =>
(case tokens of
T.INT canvasWidth :: T.INT canvasHeight :: T.L_BRACE :: tl =>
T.INT canvasWidth :: T.INT canvasHeight :: tl =>
let
val grid = ParseGrid.make (canvasWidth, canvasHeight)
val maxSide = Int.max (canvasWidth, canvasHeight)
val tree = LayerTree.init maxSide
val (tokens, tree) = parseLayers
(tl, canvasWidth, canvasHeight, tree, 1)
in
case parseItems (tl, grid) of
SOME (tokens, grid) =>
(case tokens of
[T.R_BRACE] => SOME (canvasWidth, canvasHeight, grid)
| _ => NONE)
| NONE => NONE
case tokens of
[T.R_BRACE] => SOME tree
| _ => NONE
end
| _ => NONE)
| NONE => NONE