2572: glr_term: 2573: | qualified_name { `GLR_name (qualified_name_of_expr $1) } 2574: /* | LSQB glr_alts RSQB { `GLR_opt $1 } */ 2575: | LBRACE glr_alternatives RBRACE { `GLR_ast $2 } 2576: | LPAR glr_alternatives RPAR { $2 } 2577: | glr_term QUEST { `GLR_opt $1 } 2578: | glr_term STAR { `GLR_ast $1 } 2579: | glr_term PLUS { `GLR_plus $1 } 2580: 2581: glr_alternatives: 2582: | glr_sequence VBAR glr_alts { `GLR_alt ( $1::$3) } 2583: | glr_sequence { $1 } 2584: 2585: glr_alts: 2586: | glr_sequence VBAR glr_alts { $1 :: $3 } 2587: | glr_sequence { [$1] } 2588: 2589: glr_sequence: 2590: | glr_term glr_seqs { `GLR_seq ($1::$2) } 2591: | glr_term { $1 } 2592: 2593: glr_seqs: 2594: | glr_term glr_seqs { $1 :: $2 } 2595: | glr_term { [$1] } 2596: 2597: glr_entry: 2598: | NAME COLON glr_term { Some (snd $1), $3 } 2599: | glr_term { None, $1 } 2600: 2601: glr_entries: 2602: | glr_entry glr_entries { $1 :: $2 } 2603: | glr_entry { [$1] } 2604: 2605: glr_matching: 2606: | VBAR glr_entries EQRIGHTARROW expr { rstoken $1 $3, $2 , $4 } 2607: | VBAR EQRIGHTARROW expr { rstoken $1 $2, [] , $3 } 2608: 2609: glr_matchings: 2610: | glr_matching glr_matchings { $1 :: $2 } 2611: | glr_matching { [$1] } 2612: 2613: glr_production: 2614: | NONTERM NAME COLON expr EQUAL glr_matchings SEMI 2615: { 2616: let sr = rstoken $1 $7 in 2617: let t = typecode_of_expr $4 in 2618: `AST_glr (sr,snd $2, t, $6) 2619: } 2620: 2621: glr_parse: 2622: | PARSE expr WITH glr_matchings ENDMATCH 2623: { 2624: let sr = rstoken $1 $5 in 2625: `AST_parse (sr,$2,$4) 2626: } 2627: