2269: glr_term: 2270: | qualified_name { `GLR_name (qualified_name_of_expr $1) } 2271: /* | LSQB glr_alts RSQB { `GLR_opt $1 } */ 2272: | LBRACE glr_alternatives RBRACE { `GLR_ast $2 } 2273: | LPAR glr_alternatives RPAR { $2 } 2274: | glr_term QUEST { `GLR_opt $1 } 2275: | glr_term STAR { `GLR_ast $1 } 2276: | glr_term PLUS { `GLR_plus $1 } 2277: 2278: glr_alternatives: 2279: | glr_sequence VBAR glr_alts { `GLR_alt ( $1::$3) } 2280: | glr_sequence { $1 } 2281: 2282: glr_alts: 2283: | glr_sequence VBAR glr_alts { $1 :: $3 } 2284: | glr_sequence { [$1] } 2285: 2286: glr_sequence: 2287: | glr_term glr_seqs { `GLR_seq ($1::$2) } 2288: | glr_term { $1 } 2289: 2290: glr_seqs: 2291: | glr_term glr_seqs { $1 :: $2 } 2292: | glr_term { [$1] } 2293: 2294: glr_entry: 2295: | NAME COLON glr_term { Some (snd $1), $3 } 2296: | glr_term { None, $1 } 2297: 2298: glr_entries: 2299: | glr_entry glr_entries { $1 :: $2 } 2300: | glr_entry { [$1] } 2301: 2302: glr_matching: 2303: | VBAR glr_entries EQRIGHTARROW expr { rstoken $1 $3, $2 , $4 } 2304: | VBAR EQRIGHTARROW expr { rstoken $1 $2, [] , $3 } 2305: 2306: glr_matchings: 2307: | glr_matching glr_matchings { $1 :: $2 } 2308: | glr_matching { [$1] } 2309: 2310: glr_production: 2311: | NONTERM NAME COLON expr EQUAL glr_matchings SEMI 2312: { 2313: let sr = rstoken $1 $7 in 2314: let t = typecode_of_expr $4 in 2315: `AST_glr (sr,snd $2, t, $6) 2316: } 2317: 2318: glr_parse: 2319: | PARSE expr WITH glr_matchings ENDMATCH 2320: { 2321: let sr = rstoken $1 $5 in 2322: `AST_parse (sr,$2,$4) 2323: } 2324: