// $ANTLR 3.4 ar/com/javacuriosities/antlr/csv/CSVParser.g 2015-12-26 13:30:40 package ar.com.javacuriosities.antlr.csv; import ar.com.javacuriosities.antlr.csv.ast.Record; import ar.com.javacuriosities.antlr.csv.ast.CSVFile; import org.antlr.runtime.*; import java.util.Stack; import java.util.List; import java.util.ArrayList; @SuppressWarnings({"all", "warnings", "unchecked"}) public class CSVParser extends Parser { public static final String[] tokenNames = new String[] { "<invalid>", "<EOR>", "<DOWN>", "<UP>", "Comma", "LineBreak", "QuotedValue", "SimpleValue" }; public static final int EOF=-1; public static final int Comma=4; public static final int LineBreak=5; public static final int QuotedValue=6; public static final int SimpleValue=7; // delegates public Parser[] getDelegates() { return new Parser[] {}; } // delegators public CSVParser(TokenStream input) { this(input, new RecognizerSharedState()); } public CSVParser(TokenStream input, RecognizerSharedState state) { super(input, state); } public String[] getTokenNames() { return CSVParser.tokenNames; } public String getGrammarFileName() { return "ar/com/javacuriosities/antlr/csv/CSVParser.g"; } // $ANTLR start "file" // ar/com/javacuriosities/antlr/csv/CSVParser.g:16:1: file returns [CSVFile file] : (record= row )+ EOF ; public final CSVFile file() throws RecognitionException { CSVFile file = null; Record record =null; file = new CSVFile(); try { // ar/com/javacuriosities/antlr/csv/CSVParser.g:20:2: ( (record= row )+ EOF ) // ar/com/javacuriosities/antlr/csv/CSVParser.g:20:4: (record= row )+ EOF { // ar/com/javacuriosities/antlr/csv/CSVParser.g:20:4: (record= row )+ int cnt1=0; loop1: do { int alt1=2; switch ( input.LA(1) ) { case QuotedValue: case SimpleValue: { alt1=1; } break; } switch (alt1) { case 1 : // ar/com/javacuriosities/antlr/csv/CSVParser.g:20:5: record= row { pushFollow(FOLLOW_row_in_file34); record=row(); state._fsp--; file.add(record); } break; default : if ( cnt1 >= 1 ) break loop1; EarlyExitException eee = new EarlyExitException(1, input); throw eee; } cnt1++; } while (true); match(input,EOF,FOLLOW_EOF_in_file40); } } catch (RecognitionException re) { reportError(re); recover(input,re); } finally { // do for sure before leaving } return file; } // $ANTLR end "file" // $ANTLR start "row" // ar/com/javacuriosities/antlr/csv/CSVParser.g:28:1: row returns [Record record] : data= value ( Comma data= value )* ( LineBreak | EOF ) ; public final Record row() throws RecognitionException { Record record = null; String data =null; // Este bloque es ejecutado antes de hacer el matching de cualquier rule record = new Record(); try { // ar/com/javacuriosities/antlr/csv/CSVParser.g:33:4: (data= value ( Comma data= value )* ( LineBreak | EOF ) ) // ar/com/javacuriosities/antlr/csv/CSVParser.g:33:6: data= value ( Comma data= value )* ( LineBreak | EOF ) { pushFollow(FOLLOW_value_in_row66); data=value(); state._fsp--; record.add(data); // ar/com/javacuriosities/antlr/csv/CSVParser.g:36:3: ( Comma data= value )* loop2: do { int alt2=2; switch ( input.LA(1) ) { case Comma: { alt2=1; } break; } switch (alt2) { case 1 : // ar/com/javacuriosities/antlr/csv/CSVParser.g:36:4: Comma data= value { match(input,Comma,FOLLOW_Comma_in_row74); pushFollow(FOLLOW_value_in_row78); data=value(); state._fsp--; record.add(data); } break; default : break loop2; } } while (true); if ( input.LA(1)==EOF||input.LA(1)==LineBreak ) { input.consume(); state.errorRecovery=false; } else { MismatchedSetException mse = new MismatchedSetException(null,input); throw mse; } } } catch (RecognitionException re) { reportError(re); recover(input,re); } finally { // do for sure before leaving } return record; } // $ANTLR end "row" // $ANTLR start "value" // ar/com/javacuriosities/antlr/csv/CSVParser.g:47:1: value returns [String value] : ( SimpleValue | QuotedValue ); public final String value() throws RecognitionException { String value = null; Token SimpleValue1=null; Token QuotedValue2=null; try { // ar/com/javacuriosities/antlr/csv/CSVParser.g:48:2: ( SimpleValue | QuotedValue ) int alt3=2; switch ( input.LA(1) ) { case SimpleValue: { alt3=1; } break; case QuotedValue: { alt3=2; } break; default: NoViableAltException nvae = new NoViableAltException("", 3, 0, input); throw nvae; } switch (alt3) { case 1 : // ar/com/javacuriosities/antlr/csv/CSVParser.g:48:4: SimpleValue { SimpleValue1=(Token)match(input,SimpleValue,FOLLOW_SimpleValue_in_value111); // Por medio del $[NombreDelToken] podemos acceder a los valores del mismo, el atributo "text" contiene el texto que genero ese token value = (SimpleValue1!=null?SimpleValue1.getText():null); } break; case 2 : // ar/com/javacuriosities/antlr/csv/CSVParser.g:53:4: QuotedValue { QuotedValue2=(Token)match(input,QuotedValue,FOLLOW_QuotedValue_in_value120); value = (QuotedValue2!=null?QuotedValue2.getText():null); value = value.substring(1, value.length()-1); // Removemos las comillas del comienzo y final value = value.replace("\"\"", "\""); // Reemplazamos todos los '""' por '"' } break; } } catch (RecognitionException re) { reportError(re); recover(input,re); } finally { // do for sure before leaving } return value; } // $ANTLR end "value" // Delegated rules public static final BitSet FOLLOW_row_in_file34 = new BitSet(new long[]{0x00000000000000C0L}); public static final BitSet FOLLOW_EOF_in_file40 = new BitSet(new long[]{0x0000000000000002L}); public static final BitSet FOLLOW_value_in_row66 = new BitSet(new long[]{0x0000000000000030L}); public static final BitSet FOLLOW_Comma_in_row74 = new BitSet(new long[]{0x00000000000000C0L}); public static final BitSet FOLLOW_value_in_row78 = new BitSet(new long[]{0x0000000000000030L}); public static final BitSet FOLLOW_set_in_row87 = new BitSet(new long[]{0x0000000000000002L}); public static final BitSet FOLLOW_SimpleValue_in_value111 = new BitSet(new long[]{0x0000000000000002L}); public static final BitSet FOLLOW_QuotedValue_in_value120 = new BitSet(new long[]{0x0000000000000002L}); }