3 parse_mdx : toplevel_spec
5 toplevel_spec : select_spec eof
8 select_spec : /select/i axis_spec(1..2 /,/) using_spec(?) where_spec(?) ';'
10 'head' => 'mdx_query',
12 'using' => $item[3][0],
13 'slice' => $item[4][0] }}
15 axis_spec : (/non empty/i)(?) mdx_elt /on/i axis_name
19 'flag' => (defined $item[1][0]) ? 1 : 0 }}
23 { $return = $item[1] }
25 using_spec : /using/i mdx_eid
26 { $return = $item[2] }
28 where_spec : /where/i mdx_elt
29 { $return = $item[2] }
31 fun_literal : /[[:alpha:]][[:alnum:]]*/
32 { $return = $item[1] }
34 mdx_mth : mdx_eid '->' mdx_fun
37 'func' => $item[3]->{'func'},
38 'tail' => [ $item[1], @{$item[3]->{'tail'}} ] }}
39 | mdx_eid '->' fun_literal
43 'tail' => [ $item[1] ] }}
45 mdx_fun : fun_literal '(' mdx_elt(s? /,/) ')'
51 mdx_set : mdx_eid ':' mdx_eid
53 'head' => 'mdx_range',
56 | '{' mdx_elt(s? /,/) '}'
61 mdx_tup : '(' mdx_elt(s? /,/) ')'
66 eid_literal : /([[:alpha:]][[:alnum:]]*)/
67 | /\[((?:\]\]|[^\]])+)\]/
70 mdx_eid : eid_literal(s /\./)
75 mdx_str : /"(?:\\"|[^"])*"/
87 { $return = $item[1] }