1*16467b97STreehugger Robotlexer grammar t020fuzzyLexer; 2*16467b97STreehugger Robotoptions { 3*16467b97STreehugger Robot language=Cpp; 4*16467b97STreehugger Robot filter=true; 5*16467b97STreehugger Robot} 6*16467b97STreehugger Robot 7*16467b97STreehugger Robot@lexer::includes 8*16467b97STreehugger Robot{ 9*16467b97STreehugger Robot#include "UserTestTraits.hpp" 10*16467b97STreehugger Robot} 11*16467b97STreehugger Robot@lexer::namespace 12*16467b97STreehugger Robot{ Antlr3Test } 13*16467b97STreehugger Robot 14*16467b97STreehugger Robot@header { 15*16467b97STreehugger Robotfrom io import StringIO 16*16467b97STreehugger Robot} 17*16467b97STreehugger Robot 18*16467b97STreehugger Robot@init { 19*16467b97STreehugger Robotself.output = StringIO() 20*16467b97STreehugger Robot} 21*16467b97STreehugger Robot 22*16467b97STreehugger RobotIMPORT 23*16467b97STreehugger Robot : 'import' WS name=QIDStar WS? ';' 24*16467b97STreehugger Robot ; 25*16467b97STreehugger Robot 26*16467b97STreehugger Robot/** Avoids having "return foo;" match as a field */ 27*16467b97STreehugger RobotRETURN 28*16467b97STreehugger Robot : 'return' (options {greedy=false;}:.)* ';' 29*16467b97STreehugger Robot ; 30*16467b97STreehugger Robot 31*16467b97STreehugger RobotCLASS 32*16467b97STreehugger Robot : 'class' WS name=ID WS? ('extends' WS QID WS?)? 33*16467b97STreehugger Robot ('implements' WS QID WS? (',' WS? QID WS?)*)? '{' 34*16467b97STreehugger Robot {self.output.write("found class "+$name.text+"\n")} 35*16467b97STreehugger Robot ; 36*16467b97STreehugger Robot 37*16467b97STreehugger RobotMETHOD 38*16467b97STreehugger Robot : TYPE WS name=ID WS? '(' ( ARG WS? (',' WS? ARG WS?)* )? ')' WS? 39*16467b97STreehugger Robot ('throws' WS QID WS? (',' WS? QID WS?)*)? '{' 40*16467b97STreehugger Robot {self.output.write("found method "+$name.text+"\n");} 41*16467b97STreehugger Robot ; 42*16467b97STreehugger Robot 43*16467b97STreehugger RobotFIELD 44*16467b97STreehugger Robot : TYPE WS name=ID '[]'? WS? (';'|'=') 45*16467b97STreehugger Robot {self.output.write("found var "+$name.text+"\n");} 46*16467b97STreehugger Robot ; 47*16467b97STreehugger Robot 48*16467b97STreehugger RobotSTAT: ('if'|'while'|'switch'|'for') WS? '(' ; 49*16467b97STreehugger Robot 50*16467b97STreehugger RobotCALL 51*16467b97STreehugger Robot : name=QID WS? '(' 52*16467b97STreehugger Robot {self.output.write("found call "+$name.text+"\n");} 53*16467b97STreehugger Robot ; 54*16467b97STreehugger Robot 55*16467b97STreehugger RobotCOMMENT 56*16467b97STreehugger Robot : '/*' (options {greedy=false;} : . )* '*/' 57*16467b97STreehugger Robot {self.output.write("found comment "+self.getText()+"\n");} 58*16467b97STreehugger Robot ; 59*16467b97STreehugger Robot 60*16467b97STreehugger RobotSL_COMMENT 61*16467b97STreehugger Robot : '//' (options {greedy=false;} : . )* '\n' 62*16467b97STreehugger Robot {self.output.write("found // comment "+self.getText()+"\n");} 63*16467b97STreehugger Robot ; 64*16467b97STreehugger Robot 65*16467b97STreehugger RobotSTRING 66*16467b97STreehugger Robot : '"' (options {greedy=false;}: ESC | .)* '"' 67*16467b97STreehugger Robot ; 68*16467b97STreehugger Robot 69*16467b97STreehugger RobotCHAR 70*16467b97STreehugger Robot : '\'' (options {greedy=false;}: ESC | .)* '\'' 71*16467b97STreehugger Robot ; 72*16467b97STreehugger Robot 73*16467b97STreehugger RobotWS : (' '|'\t'|'\n')+ 74*16467b97STreehugger Robot ; 75*16467b97STreehugger Robot 76*16467b97STreehugger Robotfragment 77*16467b97STreehugger RobotQID : ID ('.' ID)* 78*16467b97STreehugger Robot ; 79*16467b97STreehugger Robot 80*16467b97STreehugger Robot/** QID cannot see beyond end of token so using QID '.*'? somewhere won't 81*16467b97STreehugger Robot * ever match since k=1 lookahead in the QID loop of '.' will make it loop. 82*16467b97STreehugger Robot * I made this rule to compensate. 83*16467b97STreehugger Robot */ 84*16467b97STreehugger Robotfragment 85*16467b97STreehugger RobotQIDStar 86*16467b97STreehugger Robot : ID ('.' ID)* '.*'? 87*16467b97STreehugger Robot ; 88*16467b97STreehugger Robot 89*16467b97STreehugger Robotfragment 90*16467b97STreehugger RobotTYPE: QID '[]'? 91*16467b97STreehugger Robot ; 92*16467b97STreehugger Robot 93*16467b97STreehugger Robotfragment 94*16467b97STreehugger RobotARG : TYPE WS ID 95*16467b97STreehugger Robot ; 96*16467b97STreehugger Robot 97*16467b97STreehugger Robotfragment 98*16467b97STreehugger RobotID : ('a'..'z'|'A'..'Z'|'_') ('a'..'z'|'A'..'Z'|'_'|'0'..'9')* 99*16467b97STreehugger Robot ; 100*16467b97STreehugger Robot 101*16467b97STreehugger Robotfragment 102*16467b97STreehugger RobotESC : '\\' ('"'|'\''|'\\') 103*16467b97STreehugger Robot ; 104