Files
sml-projects/fcore/parser/parser.sml

39 lines
1.1 KiB
Standard ML
Raw Normal View History

structure Parser =
struct
structure T = Tokens
fun parseItems (tokens, grid) =
case tokens of
T.L_BRACE ::
T.INT x ::
T.INT y ::
T.INT ex ::
T.INT ey ::
T.INT r :: T.INT g :: T.INT b :: T.INT a :: T.R_BRACE :: tl =>
let
val colour = {r = r, g = g, b = b, a = a}
val grid = ParseGrid.applyItem (grid, x, y, ex, ey, colour)
in
parseItems (tl, grid)
end
| _ => SOME (tokens, grid)
fun parse string =
case Lexer.scan string of
SOME tokens =>
(case tokens of
T.INT canvasWidth :: T.INT canvasHeight :: T.L_BRACE :: tl =>
let
val grid = ParseGrid.make (canvasWidth, canvasHeight)
in
case parseItems (tl, grid) of
SOME (tokens, grid) =>
(case tokens of
[T.R_BRACE] => SOME (canvasWidth, canvasHeight, grid)
| _ => NONE)
| NONE => NONE
end
| _ => NONE)
| NONE => NONE
end