Nullable nonterminals: (const_bindings | const_bindings_tail | const_exp | decls | directives | format_exp | func_body | hard_exp | implem | imports | interf | iter_tail | match_direction | module_names | o_rest | obj_names | path | path_tail | paths | pattern | pattern_exp | result_exp | sentence | sentences | source | source_tail) The starters of non-terminals: program -> (IMPLEMENTATION | INTERFACE) interf -> (CONST | FUNC_DECL | OBJ_DECL) implem -> (CONST | FUNC_DECL | OBJ_DECL | TRACE_ALL | USE | WORD) imports -> (USE) import -> (USE) module_names -> (WORD) decls -> (CONST | FUNC_DECL | OBJ_DECL) directives -> (CONST | FUNC_DECL | OBJ_DECL | TRACE_ALL | WORD) directive -> (CONST | FUNC_DECL | OBJ_DECL | TRACE_ALL | WORD) trace_all -> (TRACE_ALL) decl -> (CONST | FUNC_DECL | OBJ_DECL) obj_decl -> (OBJ_DECL) obj_names -> (WORD) const_decl -> (CONST) const_bindings -> (WORD) const_bindings_tail -> (COMMA) const_binding -> (WORD) func_decl -> (FUNC_DECL) func_def -> (WORD) func_body -> (CHAR | COMMA | CUT | EQL | ERROR | FAIL | FENCE | LCURL | LPAR | MATCH_DIR | NOT | NUMB | REF | TRAP | VAR | WORD) pattern_alt -> (LCURL) sentences -> (CHAR | COMMA | CUT | EQL | ERROR | FAIL | FENCE | LPAR | MATCH_DIR | NOT | NUMB | REF | SC | TRAP | VAR | WORD) sentence -> (CHAR | COMMA | CUT | EQL | ERROR | FAIL | FENCE | LPAR | MATCH_DIR | NOT | NUMB | REF | TRAP | VAR | WORD) path -> (CHAR | COL | COL_CURL | COMMA | CUT | EQL | ERROR | FAIL | FENCE | ITER | LANGU | LCURL | LET | LPAR | NOT | NUMB | REF | TRAP | VAR | WORD) path_tail -> (COL | COMMA | CUT | EQL | ERROR | FAIL | FENCE | ITER | LET | NOT | TRAP) iter_tail -> (COMMA | CUT | EQL | ERROR | FAIL | FENCE | LET | NOT | TRAP) o_rest -> (COMMA | CUT | EQL | ERROR | FAIL | FENCE | NOT | TRAP) rest -> (COMMA | CUT | EQL | ERROR | FAIL | FENCE | NOT | TRAP) source -> (CHAR | COL_CURL | LANGU | LCURL | LPAR | NUMB | REF | VAR | WORD) source_tail -> (COL_CURL) alt -> (LCURL) paths -> (CHAR | COL | COL_CURL | COMMA | CUT | EQL | ERROR | FAIL | FENCE | ITER | LANGU | LCURL | LET | LPAR | NOT | NUMB | REF | SC | TRAP | VAR | WORD) pattern -> (CHAR | LPAR | MATCH_DIR | NUMB | REF | VAR | WORD) match_direction -> (MATCH_DIR) pattern_exp -> (CHAR | LPAR | NUMB | REF | VAR | WORD) pattern_exp_head -> (CHAR | LPAR | NUMB | REF | VAR | WORD) hard_exp -> (CHAR | LPAR | NUMB | REF | VAR | WORD) format_exp -> (CHAR | LPAR | NUMB | REF | VAR | WORD) result_exp -> (CHAR | LANGU | LPAR | NUMB | REF | VAR | WORD) result_exp_head -> (CHAR | LANGU | LPAR | NUMB | REF | VAR | WORD) name -> (WORD) const_exp -> (CHAR | LPAR | NUMB | REF | WORD) const_exp_head -> (CHAR | LPAR | NUMB | REF | WORD) static_symbol -> (CHAR | NUMB | WORD) The followers of nullable non-terminals: interf -> ($END) implem -> ($END) imports -> ($END | CONST | FUNC_DECL | OBJ_DECL | TRACE_ALL | WORD) module_names -> (SC) decls -> ($END) directives -> ($END) obj_names -> (SC) const_bindings -> (SC) const_bindings_tail -> (SC) func_body -> (SC) sentences -> (RCURL) sentence -> (SC | WITH) path -> (SC | WITH) path_tail -> (SC | WITH) iter_tail -> (SC | WITH) o_rest -> (SC | WITH) source -> (COL | COMMA | CUT | EQL | ERROR | FAIL | FENCE | ITER | LET | NOT | SC | TRAP | WITH) source_tail -> (COL | COMMA | CUT | EQL | ERROR | FAIL | FENCE | ITER | LET | NOT | SC | TRAP | WITH) paths -> (RCURL) pattern -> (COMMA | CUT | EQL | ERROR | FAIL | FENCE | NOT | SC | TRAP | WITH) match_direction -> (CHAR | COMMA | CUT | EQL | ERROR | FAIL | FENCE | LPAR | NOT | NUMB | REF | SC | TRAP | VAR | WITH | WORD) pattern_exp -> (COMMA | CUT | EQL | ERROR | FAIL | FENCE | NOT | RPAR | SC | TRAP | WITH) hard_exp -> (COMMA | CUT | EQL | ERROR | FAIL | FENCE | NOT | SC | TRAP | WITH) format_exp -> (EQL | SC) result_exp -> (COL | COL_CURL | COMMA | CUT | EQL | ERROR | FAIL | FENCE | ITER | LET | NOT | RANGU | RPAR | SC | TRAP | WITH) const_exp -> (COMMA | RPAR | SC) *** Annotated grammar *** program : (INTERFACE) INTERFACE #interf | (IMPLEMENTATION) IMPLEMENTATION #implem ; #interf : ($END | CONST | FUNC_DECL | OBJ_DECL) #decls ; #implem : ($END | CONST | FUNC_DECL | OBJ_DECL | TRACE_ALL | USE | WORD) #imports #directives ; #imports : ($END | CONST | FUNC_DECL | OBJ_DECL | TRACE_ALL | WORD) /* empty */ | (USE) import #imports ; import : (USE) USE #module_names SC ; #module_names : (SC) /* empty */ | (WORD) name #module_names ; #decls : ($END) /* empty */ | (CONST | FUNC_DECL | OBJ_DECL) decl SC #decls ; #directives : ($END) /* empty */ | (CONST | FUNC_DECL | OBJ_DECL | TRACE_ALL | WORD) directive SC #directives ; directive : (CONST | FUNC_DECL | OBJ_DECL) decl | (WORD) func_def | (TRACE_ALL) trace_all ; trace_all : (TRACE_ALL) TRACE_ALL ; decl : (OBJ_DECL) obj_decl | (CONST) const_decl | (FUNC_DECL) func_decl ; obj_decl : (OBJ_DECL) OBJ_DECL #obj_names ; #obj_names : (SC) /* empty */ | (WORD) name #obj_names ; const_decl : (CONST) CONST #const_bindings ; #const_bindings : (SC) /* empty */ | (WORD) const_binding #const_bindings_tail ; #const_bindings_tail : (SC) /* empty */ | (COMMA) COMMA const_binding #const_bindings_tail ; const_binding : (WORD) name EQL #const_exp ; func_decl : (FUNC_DECL) FUNC_DECL name #format_exp EQL #format_exp ; func_def : (WORD) name #func_body ; #func_body : (LCURL) pattern_alt | (CHAR | COMMA | CUT | EQL | ERROR | FAIL | FENCE | LPAR | MATCH_DIR | NOT | NUMB | REF | SC | TRAP | VAR | WORD) #sentence ; pattern_alt : (LCURL) LCURL #sentences RCURL ; #sentences : (RCURL) /* empty */ | (CHAR | COMMA | CUT | EQL | ERROR | FAIL | FENCE | LPAR | MATCH_DIR | NOT | NUMB | REF | SC | TRAP | VAR | WORD) #sentence SC #sentences ; #sentence : (CHAR | COMMA | CUT | EQL | ERROR | FAIL | FENCE | LPAR | MATCH_DIR | NOT | NUMB | REF | SC | TRAP | VAR | WITH | WORD) #pattern #o_rest ; #path : (CHAR | COL | COL_CURL | COMMA | CUT | EQL | ERROR | FAIL | FENCE | ITER | LANGU | LCURL | LET | LPAR | NOT | NUMB | REF | SC | TRAP | VAR | WITH | WORD) #source #path_tail ; #path_tail : (SC | WITH) /* empty */ | (COMMA | CUT | EQL | ERROR | FAIL | FENCE | NOT | TRAP) rest | (LET) LET #hard_exp #o_rest | (ITER) ITER #source #iter_tail | (COL) COL #sentence ; #iter_tail : (LET) LET #hard_exp #o_rest | (COMMA | CUT | EQL | ERROR | FAIL | FENCE | NOT | SC | TRAP | WITH) #o_rest ; #o_rest : (SC | WITH) /* empty */ | (COMMA | CUT | EQL | ERROR | FAIL | FENCE | NOT | TRAP) rest ; rest : (COMMA) COMMA #path | (FENCE) FENCE #path | (CUT) CUT #path | (ERROR) ERROR #path | (EQL) EQL #path | (NOT) NOT #source #o_rest | (FAIL) FAIL | (TRAP) TRAP #path WITH pattern_alt ; #source : (LCURL) alt #source_tail | (CHAR | COL | COL_CURL | COMMA | CUT | EQL | ERROR | FAIL | FENCE | ITER | LANGU | LET | LPAR | NOT | NUMB | REF | SC | TRAP | VAR | WITH | WORD) #result_exp #source_tail ; #source_tail : (COL | COMMA | CUT | EQL | ERROR | FAIL | FENCE | ITER | LET | NOT | SC | TRAP | WITH) /* empty */ | (COL_CURL) COL_CURL pattern_alt #source_tail ; alt : (LCURL) LCURL #paths RCURL ; #paths : (RCURL) /* empty */ | (CHAR | COL | COL_CURL | COMMA | CUT | EQL | ERROR | FAIL | FENCE | ITER | LANGU | LCURL | LET | LPAR | NOT | NUMB | REF | SC | TRAP | VAR | WORD) #path SC #paths ; #pattern : (CHAR | COMMA | CUT | EQL | ERROR | FAIL | FENCE | LPAR | MATCH_DIR | NOT | NUMB | REF | SC | TRAP | VAR | WITH | WORD) #match_direction #pattern_exp ; #match_direction : (CHAR | COMMA | CUT | EQL | ERROR | FAIL | FENCE | LPAR | NOT | NUMB | REF | SC | TRAP | VAR | WITH | WORD) /* empty */ | (MATCH_DIR) MATCH_DIR ; #pattern_exp : (COMMA | CUT | EQL | ERROR | FAIL | FENCE | NOT | RPAR | SC | TRAP | WITH) /* empty */ | (CHAR | LPAR | NUMB | REF | VAR | WORD) pattern_exp_head #pattern_exp ; pattern_exp_head : (REF) REF name | (CHAR | NUMB | WORD) static_symbol | (LPAR) LPAR #pattern_exp RPAR | (VAR) VAR ; #hard_exp : (CHAR | COMMA | CUT | EQL | ERROR | FAIL | FENCE | LPAR | NOT | NUMB | REF | SC | TRAP | VAR | WITH | WORD) #pattern_exp ; #format_exp : (CHAR | EQL | LPAR | NUMB | REF | SC | VAR | WORD) #pattern_exp ; #result_exp : (COL | COL_CURL | COMMA | CUT | EQL | ERROR | FAIL | FENCE | ITER | LET | NOT | RANGU | RPAR | SC | TRAP | WITH) /* empty */ | (CHAR | LANGU | LPAR | NUMB | REF | VAR | WORD) result_exp_head #result_exp ; result_exp_head : (REF) REF name | (CHAR | NUMB | WORD) static_symbol | (LPAR) LPAR #result_exp RPAR | (VAR) VAR | (LANGU) LANGU name #result_exp RANGU ; name : (WORD) WORD ; #const_exp : (COMMA | RPAR | SC) /* empty */ | (CHAR | LPAR | NUMB | REF | WORD) const_exp_head #const_exp ; const_exp_head : (REF) REF name | (CHAR | NUMB | WORD) static_symbol | (LPAR) LPAR #const_exp RPAR ; static_symbol : (CHAR) CHAR | (WORD) WORD | (NUMB) NUMB ;