blob: c045437860e6bcbf7dd6928ca036f036bdab3a66 [file] [log] [blame]
/**
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.mrql;
import java_cup.runtime.*;
terminal TRUE, FALSE, NULL, COLON, COMMA, O_BEGIN, O_END, A_BEGIN, A_END;
terminal String STRING;
terminal Long INTEGER;
terminal Double DOUBLE;
non terminal MRData top, json, pair, value;
non terminal Bag members, elements;
precedence left O_BEGIN, O_END, A_BEGIN, A_END;
precedence left COMMA;
precedence left COLON;
start with top;
top ::= json:e {: RESULT = e; :}
;
json ::= O_BEGIN O_END {: RESULT = new Union((byte)0,new Bag()); :}
| O_BEGIN members:m O_END {: RESULT = new Union((byte)0,m); :}
| A_BEGIN A_END {: RESULT = new Union((byte)1,new Bag()); :}
| A_BEGIN elements:m A_END {: RESULT = new Union((byte)1,m); :}
| O_BEGIN O_BEGIN INTEGER:n O_END O_END {: RESULT = new MR_variable((int)n.longValue()); :}
;
members ::= pair:p {: RESULT = new Bag(p); :}
| members:m COMMA pair:p {: RESULT = m.add_element(p); :}
;
pair ::= STRING:s COLON value:v {: RESULT = (new Tuple(2)).set(0,new MR_string(s)).set(1,v); :}
;
elements ::= value:v {: RESULT = new Bag(v); :}
| elements:es COMMA value:v {: RESULT = es.add_element(v); :}
;
value ::= json:e {: RESULT = e; :}
| STRING:s {: RESULT = new Union((byte)2,new MR_string(s)); :}
| INTEGER:n {: RESULT = new Union((byte)3,new MR_long(n.longValue())); :}
| DOUBLE:n {: RESULT = new Union((byte)4,new MR_double(n.doubleValue())); :}
| TRUE {: RESULT = new Union((byte)5,new MR_bool(true)); :}
| FALSE {: RESULT = new Union((byte)5,new MR_bool(false)); :}
| NULL {: RESULT = new Union((byte)6,new Tuple(0)); :}
;