grammar CSVParser; @header{ //package cruise.runtime.main.generated; //import cruise.runtime.*; } start[Runner rn] : id=flightID ',' arTime=depTime ',' dTime=arrTime',' sym=symbol ',' code1=code','name1=name','code2=code',' name2=name',' valDat= validDates',' plane=planeType','freq=frequency { rn.createEntry($id.text, $arTime.text, $dTime.text, $sym.text, $code1.text, $name1.text, $code2.text, $name2.text, $valDat.text, $plane.text, $freq.text); } ; flightID: NUMBER; depTime : NUMBER; arrTime : (.)+; symbol : IDENTIFIER; code : IDENTIFIER; name : ((.)+|StringLiteral); validDates : ((.)*|StringLiteral); planeType : (.)+; frequency : (.)+; //1,1320,1505+1,A,YYZ,Toronto (Pearson) ON ,NRT,Tokyo (Narita) Japan ,,77W,Daily 0 LPAR : '('; RPAR : ')'; PLUS : '+'; POINT : '.'; MINUS : '-'; APPOS : '\''; SLASH : '/'; DATE : NUMBER'/'NUMBER; StringLiteral : '"' (.)+ '"'; IDENTIFIER : LETTER (LETTER|DIGIT|'_')*; //FILENAME: IDENTIFIER'.'IDENTIFIER; NUMBER : DIGIT(DIGIT)*; FLOATINGPOINT : DIGIT+('.')DIGIT+; fragment LETTER : ('a'..'z'|'A'..'Z'); fragment DIGIT : ('0'..'9'); WS : (' '|'\r'|'\t') {$channel=HIDDEN;} ; COMMENT : '/*' .* '*/' {$channel=HIDDEN;} ; LINE_COMMENT : '//' ~('\n'|'\r')* '\r'? '\n' {$channel=HIDDEN;} ;