1*16467b97STreehugger Robotgrammar t030specialStates; 2*16467b97STreehugger Robotoptions { 3*16467b97STreehugger Robot language = Python; 4*16467b97STreehugger Robot} 5*16467b97STreehugger Robot 6*16467b97STreehugger Robot@init { 7*16467b97STreehugger Robotself.cond = True 8*16467b97STreehugger Robot} 9*16467b97STreehugger Robot 10*16467b97STreehugger Robot@members { 11*16467b97STreehugger Robotdef recover(self, input, re): 12*16467b97STreehugger Robot # no error recovery yet, just crash! 13*16467b97STreehugger Robot raise re 14*16467b97STreehugger Robot} 15*16467b97STreehugger Robot 16*16467b97STreehugger Robotr 17*16467b97STreehugger Robot : ( {self.cond}? NAME 18*16467b97STreehugger Robot | {not self.cond}? NAME WS+ NAME 19*16467b97STreehugger Robot ) 20*16467b97STreehugger Robot ( WS+ NAME )? 21*16467b97STreehugger Robot EOF 22*16467b97STreehugger Robot ; 23*16467b97STreehugger Robot 24*16467b97STreehugger RobotNAME: ('a'..'z') ('a'..'z' | '0'..'9')+; 25*16467b97STreehugger RobotNUMBER: ('0'..'9')+; 26*16467b97STreehugger RobotWS: ' '+; 27