(* * Menhir wygeneruje funkcję o nazwie file *) %start file %{ open Xi_lib open Ast open Parser_utils (* Generator znaczników *) let mkTag = let i = ref 0 in fun () -> let tag = !i in incr i; NodeTag tag (* vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv * Miejsce na twój kod w Ocamlu *) (* ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ----------------------------------------------------------------------------- *) %} (* vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv * Miejsce na dyrektywy *) %token EOF %token IDENTIFIER (* ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ----------------------------------------------------------------------------- *) %% (* vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv * Miejsce na gramatykę *) (* Obecnie potrafimy sparsować tylko pusty plik (wymagamy od razu tokena EOF) *) file: | EOF { ModuleDefinition {global_declarations=[] } } identifier: | IDENTIFIER { Identifier $1 } (* ** przykład użycia mkLocation use_declaration: | USE suffix(identifier, opt(SEMICOLON)) { GDECL_Use {loc=mkLocation $startpos; id=$2} } ** przykład użycia mkTag atomic_expression: | identifier { EXPR_Id {loc=mkLocation $startpos; id=$1; tag=mkTag ()} } *) (* ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ----------------------------------------------------------------------------- *)