From b798ac29c37299b2f761243ae92ab8f7c4c4d7f1 Mon Sep 17 00:00:00 2001 From: Paweł Dybiec Date: Tue, 30 Oct 2018 15:32:56 +0100 Subject: Initial commit --- source/mod_student/parser.mly | 70 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 70 insertions(+) create mode 100644 source/mod_student/parser.mly (limited to 'source/mod_student/parser.mly') diff --git a/source/mod_student/parser.mly b/source/mod_student/parser.mly new file mode 100644 index 0000000..3eacf51 --- /dev/null +++ b/source/mod_student/parser.mly @@ -0,0 +1,70 @@ +(* + * 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 ()} } +*) + +(* ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ----------------------------------------------------------------------------- *) -- cgit 1.4.1