/* * 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. */ /** * Grammar file for Pig tree parser (visitor for printing Pig script from Ast). * * NOTE: THIS FILE IS BASED ON QueryParser.g, SO IF YOU CHANGE THAT FILE, YOU WILL * PROBABLY NEED TO MAKE CORRESPONDING CHANGES TO THIS FILE AS WELL. */ tree grammar AstPrinter; options { tokenVocab=QueryParser; ASTLabelType=CommonTree; output=AST; backtrack=true; } @header { package org.apache.pig.parser; } @members { public String getResult() { return sb.toString(); } private StringBuilder sb = new StringBuilder(); } // End of @members @rulecatch { catch(RecognitionException re) { throw re; } } query : ^( QUERY statement* ) ; statement : general_statement | split_statement { sb.append(";\n"); } | import_statement { sb.append(";\n"); } | register_statement { sb.append(";\n"); } | assert_statement { sb.append(";\n"); } | realias_statement ; split_statement : split_clause ; realias_statement : realias_clause ; import_statement : ^( IMPORT QUOTEDSTRING ) { sb.append(" ").append($IMPORT.text).append(" ").append($QUOTEDSTRING.text); } ; register_statement : ^( REGISTER QUOTEDSTRING { sb.append($REGISTER.text).append(" ").append($QUOTEDSTRING.text); } scripting_udf_clause? ) ; assert_statement : assert_clause ; scripting_udf_clause : scripting_language_clause scripting_namespace_clause ; scripting_language_clause : (USING IDENTIFIER) { sb.append(" ").append($USING.text).append(" ").append($IDENTIFIER.text); } ; scripting_namespace_clause : (AS IDENTIFIER) { sb.append(" ").append($AS.text).append(" ").append($IDENTIFIER.text); } ; // For foreach statement that with complex inner plan. general_statement : ^( STATEMENT ( alias { sb.append(" = "); } )? op_clause parallel_clause? ) { sb.append(";\n"); } ; realias_clause : ^(REALIAS alias IDENTIFIER) ; parallel_clause : ^( PARALLEL INTEGER ) { sb.append(" ").append($PARALLEL.text).append(" ").append($INTEGER.text); } ; alias : IDENTIFIER { sb.append($IDENTIFIER.text); } ; op_clause : define_clause | load_clause | group_clause | store_clause | filter_clause | distinct_clause | limit_clause | sample_clause | order_clause | rank_clause | cross_clause | join_clause | union_clause | stream_clause | mr_clause | split_clause | foreach_clause | cube_clause | assert_clause ; define_clause : ^( DEFINE IDENTIFIER { sb.append($DEFINE.text).append(" ").append($IDENTIFIER.text).append(" "); } ( cmd | func_clause ) ) ; cmd : ^( EXECCOMMAND { sb.append($EXECCOMMAND.text); } ( ship_clause | cache_clause | input_clause | output_clause | error_clause )* ) ; ship_clause : ^( SHIP { sb.append(" ").append($SHIP.text).append(" ("); } path_list? { sb.append(")"); } ) ; path_list : a=QUOTEDSTRING { sb.append(" ").append($a.text); } (b=QUOTEDSTRING { sb.append(", ").append($b.text); } )* ; cache_clause : ^( CACHE { sb.append(" ").append($CACHE.text).append(" ("); } path_list { sb.append(")"); } ) ; input_clause : ^( INPUT { sb.append(" ").append($INPUT.text).append("("); } stream_cmd ( { sb.append(", "); } stream_cmd)* { sb.append(")"); } ) ; stream_cmd : ^( STDIN { sb.append($STDIN.text).append(" USING "); } func_clause? ) | ^( STDOUT { sb.append($STDOUT.text).append(" USING "); } func_clause? ) | ^( QUOTEDSTRING { sb.append($QUOTEDSTRING.text).append(" USING "); } func_clause? ) ; output_clause : ^( OUTPUT { sb.append(" ").append($OUTPUT.text).append(" ("); } stream_cmd ( { sb.append(","); } stream_cmd)* { sb.append(")"); } ) ; error_clause : ^( STDERROR { sb.append(" ").append($STDERROR.text).append(" ("); } ( QUOTEDSTRING { sb.append($QUOTEDSTRING.text); } (INTEGER { sb.append(" LIMIT ").append($INTEGER); } )? )? { sb.append(")"); } ) ; load_clause : ^( LOAD { sb.append($LOAD.text).append(" "); } filename ( { sb.append(" USING "); } func_clause)? as_clause? ) ; filename : QUOTEDSTRING { sb.append($QUOTEDSTRING.text); } ; as_clause : ^( AS { sb.append(" ").append($AS.text).append(" "); } field_def_list ) ; field_def : ^( FIELD_DEF IDENTIFIER { sb.append($IDENTIFIER.text); } ( {sb.append(":"); } type)? ) | ^( FIELD_DEF type ) ; field_def_list : { sb.append("("); } field_def ( { sb.append(", "); } field_def )+ { sb.append(")"); } | field_def ; type : simple_type | tuple_type | bag_type | map_type ; simple_type : BOOLEAN { sb.append($BOOLEAN.text); } | INT { sb.append($INT.text); } | LONG { sb.append($LONG.text); } | FLOAT { sb.append($FLOAT.text); } | DOUBLE { sb.append($DOUBLE.text); } | BIGINTEGER { sb.append($BIGINTEGER.text); } | BIGDECIMAL { sb.append($BIGDECIMAL.text); } | DATETIME { sb.append($DATETIME.text); } | CHARARRAY { sb.append($CHARARRAY.text); } | BYTEARRAY { sb.append($BYTEARRAY.text); } ; tuple_type : ^( TUPLE_TYPE field_def_list? ) ; bag_type : ^( BAG_TYPE { sb.append("bag{"); } ( { sb.append("T:"); } IDENTIFIER? tuple_type )? ) { sb.append("}"); } ; map_type : ^( MAP_TYPE { sb.append("map["); } IDENTIFIER? type? ) { sb.append("]"); } ; func_clause : ^( FUNC_REF func_name ) | ^( FUNC func_name { sb.append("("); } func_args? { sb.append(")"); } ) ; func_name : eid ( ( PERIOD { sb.append($PERIOD.text); } | DOLLAR { sb.append($DOLLAR.text); } ) eid )* ; func_args : func_first_arg_clause (func_next_arg_clause)* ; func_first_arg_clause : QUOTEDSTRING { sb.append($QUOTEDSTRING.text); } | MULTILINE_QUOTEDSTRING { sb.append($MULTILINE_QUOTEDSTRING.text); } ; func_next_arg_clause : QUOTEDSTRING { sb.append(", ").append($QUOTEDSTRING.text); } | MULTILINE_QUOTEDSTRING { sb.append(", ").append($MULTILINE_QUOTEDSTRING.text); } ; cube_clause : ^( CUBE { sb.append($CUBE.text).append(" "); } cube_item ) ; cube_item : rel ( cube_by_clause ) ; cube_by_clause : ^( BY { sb.append(" ").append($BY.text); } cube_or_rollup ) ; cube_or_rollup : cube_rollup_list ( { sb.append(", "); } cube_rollup_list )* ; cube_rollup_list : ^( ( CUBE { sb.append($CUBE.text).append("("); } | ROLLUP { sb.append($ROLLUP.text).append("("); } ) cube_by_expr_list { sb.append(")"); }) ; cube_by_expr_list : ( cube_by_expr ( { sb.append(", "); } cube_by_expr )* ) ; cube_by_expr : col_range | expr | STAR { sb.append($STAR.text); } ; group_clause : ^( ( GROUP { sb.append($GROUP.text).append(" "); } | COGROUP { sb.append($COGROUP.text).append(" "); } ) group_item ( { sb.append(", "); } group_item )* ( { sb.append(" USING "); } group_type )? partition_clause? ) ; group_type : QUOTEDSTRING { sb.append($QUOTEDSTRING.text); } ; group_item : rel ( join_group_by_clause | ALL { sb.append(" ").append($ALL.text); } | ANY { sb.append(" ").append($ANY.text); } ) ( INNER { sb.append(" ").append($INNER.text); } | OUTER { sb.append(" ").append($OUTER.text); } )? ; rel : alias | ( { sb.append(" ("); } op_clause parallel_clause? { sb.append(") "); } ) ; flatten_generated_item : ( flatten_clause | col_range | expr | STAR { sb.append(" ").append($STAR.text); } ) ( { sb.append(" AS "); } field_def_list)? ; flatten_clause : ^( FLATTEN { sb.append($FLATTEN.text).append("("); } expr { sb.append(") "); } ) ; store_clause : ^( STORE { sb.append($STORE.text).append(" "); } rel { sb.append(" INTO "); } filename ( { sb.append(" USING "); } func_clause)? ) ; comment : QUOTEDSTRING { sb.append($QUOTEDSTRING.text); } ; assert_clause : ^( ASSERT { sb.append($ASSERT.text).append(" "); } rel {sb.append(" BY ("); } cond { sb.append(")"); } ( { sb.append(" comment: "); } comment)? ) ; filter_clause : ^( FILTER { sb.append($FILTER.text).append(" "); } rel { sb.append(" BY ("); } cond { sb.append(")"); } ) ; cond : ^( OR { sb.append("("); } cond { sb.append(") ").append($OR.text).append(" ("); } cond { sb.append(")"); } ) | ^( AND { sb.append("("); } cond { sb.append(") ").append($AND.text).append(" ("); } cond { sb.append(")"); } ) | ^( NOT { sb.append(" ").append($NOT.text).append(" ("); } cond { sb.append(")"); } ) | ^( NULL expr { sb.append(" IS "); } (NOT { sb.append($NOT.text).append(" "); } )? { sb.append($NULL.text); } ) | ^( rel_op expr { sb.append(" ").append($rel_op.result).append(" "); } expr ) | in_eval | func_eval | ^( BOOL_COND expr ) ; in_eval : ^( IN { sb.append(" " + $IN.text + "("); } ( ^( IN_LHS expr ) ^( IN_RHS { sb.append(", "); } expr ) ) ( ^( IN_LHS { sb.append(", "); } expr ) ^( IN_RHS { sb.append(", "); } expr ) )* { sb.append(") "); } ) ; func_eval : ^( FUNC_EVAL func_name { sb.append("("); } real_arg ( { sb.append(", "); } real_arg)* { sb.append(")"); } ) | ^( FUNC_EVAL func_name { sb.append("()"); } ) ; real_arg : expr | STAR { sb.append($STAR.text); } | col_range ; expr : ^( PLUS expr { sb.append(" ").append($PLUS.text).append(" "); } expr ) | ^( MINUS expr { sb.append(" ").append($MINUS.text).append(" "); } expr ) | ^( STAR expr { sb.append(" ").append($STAR.text).append(" "); } expr ) | ^( DIV expr { sb.append(" ").append($DIV.text).append(" "); } expr ) | ^( PERCENT expr { sb.append(" ").append($PERCENT.text).append(" "); } expr ) | ^( CAST_EXPR { sb.append("("); } type { sb.append(")"); } expr ) | const_expr | var_expr | ^( NEG { sb.append($NEG.text); } expr ) | ^( CAST_EXPR { sb.append("("); } type_cast { sb.append(")"); } expr ) | ^( EXPR_IN_PAREN { sb.append("("); } expr { sb.append(")"); } ) ; type_cast : simple_type | map_type | tuple_type_cast | bag_type_cast ; tuple_type_cast : ^( TUPLE_TYPE_CAST { sb.append("tuple("); } type_cast ( {sb.append(", "); } type_cast)* {sb.append(")"); } ) | ^( TUPLE_TYPE_CAST { sb.append("tuple("); } type_cast? {sb.append(")"); } ) ; bag_type_cast : ^( BAG_TYPE_CAST { sb.append("bag{"); } tuple_type_cast? {sb.append("}"); } ) ; var_expr : projectable_expr ( dot_proj | pound_proj )* ; projectable_expr : func_eval | col_ref | bin_expr | case_expr | case_cond ; dot_proj : ^( PERIOD { sb.append(".("); } col_alias_or_index ( { sb.append(", "); } col_alias_or_index)* { sb.append(")"); } ) ; col_alias_or_index : col_alias | col_index ; col_alias : GROUP { sb.append($GROUP.text); } | CUBE { sb.append($CUBE.text); } | IDENTIFIER { sb.append($IDENTIFIER.text); } ; col_index : DOLLARVAR { sb.append($DOLLARVAR.text); } ; col_range : ^(COL_RANGE col_ref? { sb.append(".."); } DOUBLE_PERIOD col_ref?) ; pound_proj : ^( POUND { sb.append($POUND.text); } ( QUOTEDSTRING { sb.append($QUOTEDSTRING.text); } | NULL { sb.append($NULL.text); } ) ) ; bin_expr : ^( BIN_EXPR { sb.append(" ("); } cond { sb.append(" ? "); } expr { sb.append(" : "); } expr { sb.append(") "); } ) ; case_expr : ^( CASE_EXPR { sb.append(" CASE ("); } ( ^( CASE_EXPR_LHS expr ) ( ^( CASE_EXPR_RHS { sb.append(", "); } expr ) )+ ) ( ^( CASE_EXPR_LHS { sb.append(", "); } expr ) ( ^( CASE_EXPR_RHS { sb.append(", "); } expr ) )+ )* { sb.append(")"); } ) ; case_cond : ^( CASE_COND { sb.append(" CASE ("); } ^( WHEN cond ( { sb.append(", "); } cond )* { sb.append(", "); } ) ^( THEN expr ( { sb.append(", "); } expr )* { sb.append(") "); } ) ) ; limit_clause : ^( LIMIT { sb.append($LIMIT.text).append(" "); } rel ( INTEGER { sb.append(" ").append($INTEGER.text); } | LONGINTEGER { sb.append(" ").append($LONGINTEGER.text); } | expr ) ) ; sample_clause : ^( SAMPLE { sb.append($SAMPLE.text).append(" "); } rel ( DOUBLENUMBER { sb.append(" ").append($DOUBLENUMBER.text); } | expr ) ) ; rank_clause : ^( RANK { sb.append($RANK.text).append(" "); } rel ( rank_by_statement )? ) ; rank_by_statement : ^( BY { sb.append(" ").append($BY.text); } rank_by_clause ( DENSE { sb.append(" ").append($DENSE.text); } )? ) ; rank_by_clause : STAR { sb.append($STAR.text); } ( ASC { sb.append(" ").append($ASC.text); } | DESC { sb.append(" ").append($DESC.text); } )? | rank_col ( { sb.append(", "); } rank_col )* ; rank_col : ( col_range | col_ref ) ( ASC { sb.append(" ").append($ASC.text); } | DESC { sb.append(" ").append($DESC.text); } )? ; order_clause : ^( ORDER { sb.append($ORDER.text).append(" "); } rel { sb.append(" BY "); } order_by_clause ( { sb.append(" USING "); } func_clause )? ) ; order_by_clause : STAR { sb.append($STAR.text); } ( ASC { sb.append(" ").append($ASC.text); } | DESC { sb.append(" ").append($DESC.text); } )? | order_col ( { sb.append(", "); } order_col)* ; order_col : (col_range | col_ref) ( ASC { sb.append(" ").append($ASC.text); } | DESC { sb.append(" ").append($DESC.text); } )? ; distinct_clause : ^( DISTINCT { sb.append($DISTINCT.text).append(" "); } rel partition_clause? ) ; partition_clause : ^( PARTITION { sb.append(" ").append($PARTITION.text).append(" BY "); } func_name ) ; cross_clause : ^( CROSS { sb.append($CROSS.text).append(" "); } rel_list partition_clause? ) ; rel_list : rel ( { sb.append(", "); } rel)* ; join_clause : ^( JOIN { sb.append($JOIN.text).append(" "); } join_sub_clause ( { sb.append(" USING "); } join_type )? ( partition_clause )? ) ; join_type : QUOTEDSTRING { sb.append($QUOTEDSTRING.text); } ; join_sub_clause : join_item ( LEFT { sb.append(" ").append($LEFT.text); } | RIGHT { sb.append(" ").append($RIGHT.text); } | FULL { sb.append(" ").append($FULL.text); } ) (OUTER { sb.append(" ").append($OUTER.text); } )? { sb.append(", "); } join_item | join_item ( { sb.append(", "); } join_item )* ; join_item : ^( JOIN_ITEM rel join_group_by_clause ) ; join_group_by_clause : ^( BY { sb.append(" ").append($BY.text).append(" ("); } join_group_by_expr ( { sb.append(", "); } join_group_by_expr )* { sb.append(")"); } ) ; join_group_by_expr : col_range | expr | STAR { sb.append($STAR.text); } ; union_clause : ^( UNION { sb.append($UNION.text).append(" "); } (ONSCHEMA { sb.append($ONSCHEMA.text).append(" "); } )? rel_list ) ; foreach_clause : ^( FOREACH { sb.append($FOREACH.text).append(" "); } rel foreach_plan ) ; foreach_plan : ^( FOREACH_PLAN_SIMPLE generate_clause ) | ^( FOREACH_PLAN_COMPLEX nested_blk ) ; nested_blk : { sb.append(" { "); } (nested_command { sb.append("; "); } )* generate_clause { sb.append("; } "); } ; generate_clause : ^( GENERATE { sb.append(" ").append($GENERATE.text).append(" "); } flatten_generated_item ( { sb.append(", "); } flatten_generated_item)* ) ; nested_command : ^( NESTED_CMD IDENTIFIER { sb.append($IDENTIFIER.text).append(" = "); } nested_op ) | ^( NESTED_CMD_ASSI IDENTIFIER { sb.append($IDENTIFIER.text).append(" = "); } expr ) ; nested_op : nested_proj | nested_filter | nested_sort | nested_distinct | nested_limit | nested_cross | nested_foreach ; nested_proj : ^( NESTED_PROJ col_ref { sb.append(".("); } col_ref ( { sb.append(", "); } col_ref)* { sb.append(")"); } ) ; nested_filter : ^( FILTER { sb.append($FILTER.text).append(" "); } nested_op_input { sb.append(" BY "); } cond ) ; nested_sort : ^( ORDER { sb.append($ORDER.text).append(" "); } nested_op_input { sb.append(" BY "); } order_by_clause ( { sb.append(" USING "); } func_clause)? ) ; nested_distinct : ^( DISTINCT { sb.append($DISTINCT.text).append(" "); } nested_op_input ) ; nested_limit : ^( LIMIT { sb.append($LIMIT.text).append(" "); } nested_op_input ( INTEGER { sb.append(" ").append($INTEGER.text); } | expr ) ) ; nested_cross : ^( CROSS { sb.append($CROSS.text).append(" "); } nested_op_input_list ) ; nested_foreach : ^( FOREACH { sb.append($FOREACH.text).append(" "); } nested_op_input generate_clause ) ; nested_op_input : col_ref | nested_proj ; nested_op_input_list : nested_op_input ( { sb.append(", "); } nested_op_input)* ; stream_clause : ^( STREAM { sb.append($STREAM.text).append(" "); } rel { sb.append(" THROUGH "); } ( EXECCOMMAND { sb.append($EXECCOMMAND.text); } | IDENTIFIER { sb.append($IDENTIFIER.text); } ) as_clause? ) ; mr_clause : ^( MAPREDUCE QUOTEDSTRING { sb.append($MAPREDUCE.text).append(" ").append($QUOTEDSTRING.text).append(" "); } ({ sb.append(" ("); } path_list { sb.append(") "); } )? store_clause { sb.append(" "); } load_clause (EXECCOMMAND { sb.append(" ").append($EXECCOMMAND.text); } )? ) ; split_clause : ^( SPLIT { sb.append($SPLIT.text).append(" "); } rel { sb.append(" INTO "); } split_branch ( { sb.append(", "); } split_branch )* ( { sb.append(", "); } split_otherwise )? ) ; split_branch : ^( SPLIT_BRANCH alias { sb.append(" IF "); } cond ) ; split_otherwise : ^( OTHERWISE alias { sb.append(" " + $OTHERWISE.text); } ( ALL { sb.append(" " + $ALL.text); } )? ) ; col_ref : alias_col_ref | dollar_col_ref ; alias_col_ref : GROUP { sb.append($GROUP.text); } | CUBE { sb.append($CUBE.text); } | IDENTIFIER { sb.append($IDENTIFIER.text); } ; dollar_col_ref : DOLLARVAR { sb.append($DOLLARVAR.text); } ; const_expr : literal ; literal : scalar | map | bag | tuple ; scalar : num_scalar | QUOTEDSTRING { sb.append($QUOTEDSTRING.text); } | NULL { sb.append($NULL.text); } | TRUE { sb.append($TRUE.text); } | FALSE { sb.append($FALSE.text); } ; num_scalar : ( MINUS { sb.append( "-" ); } )? ( INTEGER { sb.append($INTEGER.text); } | LONGINTEGER { sb.append($LONGINTEGER.text); } | FLOATNUMBER { sb.append($FLOATNUMBER.text); } | DOUBLENUMBER { sb.append($DOUBLENUMBER.text); } | BIGINTEGERNUMBER { sb.append($BIGINTEGERNUMBER.text); } | BIGDECIMALNUMBER { sb.append($BIGDECIMALNUMBER.text); } ) ; map : ^( MAP_VAL { sb.append("["); } keyvalue ( { sb.append(", "); } keyvalue)* { sb.append("]"); } ) | ^( MAP_VAL { sb.append("[]"); } ) ; keyvalue : ^( KEY_VAL_PAIR map_key { sb.append("#"); } const_expr ) ; map_key : QUOTEDSTRING { sb.append($QUOTEDSTRING.text); } ; bag : ^( BAG_VAL { sb.append("{"); } tuple ( { sb.append(", "); } tuple)* { sb.append("}"); } ) | ^( BAG_VAL { sb.append("{}"); } ) ; tuple : ^( TUPLE_VAL { sb.append("("); } literal ( { sb.append(", "); } literal)* { sb.append(")"); } ) | ^( TUPLE_VAL { sb.append("()"); } ) ; // extended identifier, handling the keyword and identifier conflicts. Ugly but there is no other choice. eid : rel_str_op | IMPORT { sb.append($IMPORT.text); } | RETURNS { sb.append($RETURNS.text); } | DEFINE { sb.append($DEFINE.text); } | LOAD { sb.append($LOAD.text); } | FILTER { sb.append($FILTER.text); } | FOREACH { sb.append($FOREACH.text); } | CUBE { sb.append($CUBE.text); } | ROLLUP { sb.append($ROLLUP.text); } | MATCHES { sb.append($MATCHES.text); } | ORDER { sb.append($ORDER.text); } | RANK { sb.append($RANK.text); } | DISTINCT { sb.append($DISTINCT.text); } | COGROUP { sb.append($COGROUP.text); } | JOIN { sb.append($JOIN.text); } | CROSS { sb.append($CROSS.text); } | UNION { sb.append($UNION.text); } | SPLIT { sb.append($SPLIT.text); } | INTO { sb.append($INTO.text); } | IF { sb.append($IF.text); } | ALL { sb.append($ALL.text); } | AS { sb.append($AS.text); } | BY { sb.append($BY.text); } | USING { sb.append($USING.text); } | INNER { sb.append($INNER.text); } | OUTER { sb.append($OUTER.text); } | PARALLEL { sb.append($PARALLEL.text); } | PARTITION { sb.append($PARTITION.text); } | GROUP { sb.append($GROUP.text); } | AND { sb.append($AND.text); } | OR { sb.append($OR.text); } | NOT { sb.append($NOT.text); } | GENERATE { sb.append($GENERATE.text); } | FLATTEN { sb.append($FLATTEN.text); } | EVAL { sb.append($EVAL.text); } | ASC { sb.append($ASC.text); } | DESC { sb.append($DESC.text); } | BOOLEAN { sb.append($BOOLEAN.text); } | INT { sb.append($INT.text); } | LONG { sb.append($LONG.text); } | FLOAT { sb.append($FLOAT.text); } | DOUBLE { sb.append($DOUBLE.text); } | BIGINTEGER{ sb.append($BIGINTEGER.text); } | BIGDECIMAL{ sb.append($BIGDECIMAL.text); } | DATETIME { sb.append($DATETIME.text); } | CHARARRAY { sb.append($CHARARRAY.text); } | BYTEARRAY { sb.append($BYTEARRAY.text); } | BAG { sb.append($BAG.text); } | TUPLE { sb.append($TUPLE.text); } | MAP { sb.append($MAP.text); } | IS { sb.append($IS.text); } | NULL { sb.append($NULL.text); } | TRUE { sb.append($TRUE.text); } | FALSE { sb.append($FALSE.text); } | STREAM { sb.append($STREAM.text); } | THROUGH { sb.append($THROUGH.text); } | STORE { sb.append($STORE.text); } | MAPREDUCE { sb.append($MAPREDUCE.text); } | SHIP { sb.append($SHIP.text); } | CACHE { sb.append($CACHE.text); } | INPUT { sb.append($INPUT.text); } | OUTPUT { sb.append($OUTPUT.text); } | STDERROR { sb.append($STDERROR.text); } | STDIN { sb.append($STDIN.text); } | STDOUT { sb.append($STDOUT.text); } | LIMIT { sb.append($LIMIT.text); } | SAMPLE { sb.append($SAMPLE.text); } | LEFT { sb.append($LEFT.text); } | RIGHT { sb.append($RIGHT.text); } | FULL { sb.append($FULL.text); } | IDENTIFIER { sb.append($IDENTIFIER.text); } | TOBAG { sb.append($TOBAG.text); } | TOMAP { sb.append($TOMAP.text); } | TOTUPLE { sb.append($TOTUPLE.text); } | IN { sb.append($IN.text); } | CASE { sb.append($CASE.text); } | ASSERT { sb.append($ASSERT.text); } ; // relational operator rel_op returns[String result] : rel_op_eq { $result = $rel_op_eq.result; } | rel_op_ne { $result = $rel_op_ne.result; } | rel_op_gt { $result = $rel_op_gt.result; } | rel_op_gte { $result = $rel_op_gte.result; } | rel_op_lt { $result = $rel_op_lt.result; } | rel_op_lte { $result = $rel_op_lte.result; } | STR_OP_MATCHES { $result = $STR_OP_MATCHES.text; } ; rel_op_eq returns[String result] : STR_OP_EQ { $result = $STR_OP_EQ.text; } | NUM_OP_EQ { $result = $NUM_OP_EQ.text; } ; rel_op_ne returns[String result] : STR_OP_NE { $result = $STR_OP_NE.text; } | NUM_OP_NE { $result = $NUM_OP_NE.text; } ; rel_op_gt returns[String result] : STR_OP_GT { $result = $STR_OP_GT.text; } | NUM_OP_GT { $result = $NUM_OP_GT.text; } ; rel_op_gte returns[String result] : STR_OP_GTE { $result = $STR_OP_GTE.text; } | NUM_OP_GTE { $result = $NUM_OP_GTE.text; } ; rel_op_lt returns[String result] : STR_OP_LT { $result = $STR_OP_LT.text; } | NUM_OP_LT { $result = $NUM_OP_LT.text; } ; rel_op_lte returns[String result] : STR_OP_LTE { $result = $STR_OP_LTE.text; } | NUM_OP_LTE { $result = $NUM_OP_LTE.text; } ; rel_str_op : STR_OP_EQ { sb.append($STR_OP_EQ.text); } | STR_OP_NE { sb.append($STR_OP_NE.text); } | STR_OP_GT { sb.append($STR_OP_GT.text); } | STR_OP_LT { sb.append($STR_OP_LT.text); } | STR_OP_GTE { sb.append($STR_OP_GTE.text); } | STR_OP_LTE { sb.append($STR_OP_LTE.text); } | STR_OP_MATCHES { sb.append($STR_OP_MATCHES.text); } ;