xref: /aosp_15_r20/external/antlr/runtime/Cpp/tests/t020fuzzyLexer.g (revision 16467b971bd3e2009fad32dd79016f2c7e421deb)
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