$module ToASR; $use Access Arithm Convert Box List StdIO; $use Parser GrammarParser; $func Comp e.ast = e.asr; Comp { (FUNC t.name (e.func_type) (e.var_decls) e.sentences) e.rest = e.func_type : e.types t, , :: e.args, (LOCAL FUNC (e.args) ((EVAR)) (BRANCH (LEFT e.args) (CUTALL) (ALT ) )) ; t1 e.rest = t1 ; /*empty*/ = /*empty*/; }; $box Idx; $func GenerArg t.type = t.var; GenerArg (TYPE (e.name)) = : s.n, >, (EVAR (s.n e.name)); $func CallEarley t.var = e.call; CallEarley (EVAR (s.n e.name)) = (RESULT (CALL (Earley Earley) (PAREN TYPE (PAREN e.name)) (EVAR (s.n e.name)))) (FORMAT (EVAR (s.n))); $func CompSentence (e.args) (e.var_decls) t.sentence = e.branch; CompSentence (e.args) (e.var_decls) (SENTENCE t.name (e.patterns) e.exp) = , (BRANCH (CUTALL) (RESULT )); $func CompPattern (e.args) (e.var_decls) t.pattern = e.pattern; CompPattern (e.args) (e.var_decls) (e.pattern) = : s.n, >, : (EVAR (s.n e.type_name)), (RESULT (EVAR (s.n))) (LEFT (PAREN (PAREN TYPE (PAREN e.type_name) (EVAR (0 s.n))) DOT 0) ) (RESULT (CALL (Earley RemoveParens) (EVAR (0 s.n)))) (LEFT ); $func VarType (e.var_decls) t.pat = t.pat; VarType (e.var_decls) t.pat, { t.pat : (VAR t.name) = e.var_decls : e (e t.pat e (TYPE (e.type_name))) e = (PAREN TYPE (PAREN e.type_name)); t.pat; }; $func GetVar t.pat = e.var; GetVar { (VAR t.name) = (PAREN (EVAR t.name)); t = ; }; $func CompTerm t.term = e.asr; CompTerm { (UNDEFINED) = (ERROR (BRANCH (RESULT UNDEFINED))); s.char = s.char; (VAR t.name) = (EVAR t.name); (CALL t.name e.args) = (CALL ); (IF (e.cond) (e.exp_true) (e.exp_false)) = (ALT (BRANCH (RESULT ) (LEFT 'True') (CUTALL) ) (BRANCH ) ); t1 = t1; }; $func CompArg t.arg = e.asr; CompArg (e.exp) = (PAREN ); $box FreeIdx; $func FreshEVAR = t.var; FreshEVAR = { : s.n = >, (EVAR (s.n)); , (EVAR (100)); }; $func GenerMain t.fname e.grammar = t.func; GenerMain t.fname e.grammar = (LOCAL FUNC () ((EVAR)) (BRANCH (LEFT) (CUTALL) (RESULT (CALL (Earley Init) e.grammar)) (RESULT (CALL )) )); $func AddPAREN e = e; AddPAREN { (e1) e2 = (PAREN ) ; s1 e2 = s1 ; /*empty*/ = /*empty*/; }; $box ModuleName; $func RefName t.name = t.ref_name; RefName (e.chars) = ( ); $func Main = e; Main = :: e.ast, > :: e.grammar, , (IMPORT FUNC ("refal" "plus" StdIO WriteLn) ((EVAR)) ()) (IMPORT FUNC (Earley Init) ((EVAR)) ()) (IMPORT FUNC (Earley RemoveParens) ((EVAR)) ((EVAR))) (IMPORT FUNC (Earley Earley) ((TVAR) (EVAR)) ((EVAR))) :: e.imports, :: s.ch, , ) e.imports )>, ;