/* Parser for GML */ %{ open Gml %} %token EOF %token LBRACE %token RBRACE %token LBRACKET %token RBRACKET %token OPERATOR %token IDENTIFIER %token BINDER %token BOOLEAN %token INTEGER %token REAL %token STRING %start program %type program %% program: tokenlist EOF { List.rev $1 } ; tokenlist: /*empty*/ { [] } | tokenlist tokengroup { $2 :: $1 } ; tokengroup: token { $1 } | LBRACE tokenlist RBRACE { Function(List.rev $2) } | LBRACKET tokenlist RBRACKET { Array(List.rev $2) } ; token: OPERATOR { Operator $1 } | IDENTIFIER { Identifier $1 } | BINDER { Binder $1 } | BOOLEAN { Boolean $1 } | INTEGER { Integer $1 } | REAL { Real $1 } | STRING { String $1 } ;