1*16467b97STreehugger Robotgrammar t013parser; 2*16467b97STreehugger Robotoptions { 3*16467b97STreehugger Robot language = JavaScript; 4*16467b97STreehugger Robot} 5*16467b97STreehugger Robot 6*16467b97STreehugger Robot@parser::members { 7*16467b97STreehugger Robotthis.identifiers = []; 8*16467b97STreehugger Robotthis.reportedErrors = []; 9*16467b97STreehugger Robot 10*16467b97STreehugger Robotthis.foundIdentifier = function(name) { 11*16467b97STreehugger Robot this.identifiers.push(name); 12*16467b97STreehugger Robot}; 13*16467b97STreehugger Robot 14*16467b97STreehugger Robotthis.emitErrorMessage = function(msg) { 15*16467b97STreehugger Robot this.reportedErrors.push(msg); 16*16467b97STreehugger Robot}; 17*16467b97STreehugger Robot} 18*16467b97STreehugger Robot 19*16467b97STreehugger Robotdocument: 20*16467b97STreehugger Robot t=IDENTIFIER {this.foundIdentifier($t.text)} 21*16467b97STreehugger Robot ; 22*16467b97STreehugger Robot 23*16467b97STreehugger RobotIDENTIFIER: ('a'..'z'|'A'..'Z'|'_') ('a'..'z'|'A'..'Z'|'0'..'9'|'_')*; 24