xref: /aosp_15_r20/external/antlr/runtime/Cpp/tests/t046rewrite.g (revision 16467b971bd3e2009fad32dd79016f2c7e421deb)
1*16467b97STreehugger Robotgrammar t046rewrite;
2*16467b97STreehugger Robotoptions {
3*16467b97STreehugger Robot    language=Cpp;
4*16467b97STreehugger Robot}
5*16467b97STreehugger Robot
6*16467b97STreehugger Robot@lexer::includes
7*16467b97STreehugger Robot{
8*16467b97STreehugger Robot#include "UserTestTraits.hpp"
9*16467b97STreehugger Robot}
10*16467b97STreehugger Robot@lexer::namespace
11*16467b97STreehugger Robot{ Antlr3Test }
12*16467b97STreehugger Robot
13*16467b97STreehugger Robot@parser::includes {
14*16467b97STreehugger Robot#include "UserTestTraits.hpp"
15*16467b97STreehugger Robot}
16*16467b97STreehugger Robot@parser::namespace
17*16467b97STreehugger Robot{ Antlr3Test }
18*16467b97STreehugger Robot
19*16467b97STreehugger Robotprogram
20*16467b97STreehugger Robot@init {
21*16467b97STreehugger Robot    start = self.input.LT(1)
22*16467b97STreehugger Robot}
23*16467b97STreehugger Robot    :   method+
24*16467b97STreehugger Robot        {
25*16467b97STreehugger Robot        self.input.insertBefore(start,"public class Wrapper {\n")
26*16467b97STreehugger Robot        self.input.insertAfter($method.stop, "\n}\n")
27*16467b97STreehugger Robot        }
28*16467b97STreehugger Robot    ;
29*16467b97STreehugger Robot
30*16467b97STreehugger Robotmethod
31*16467b97STreehugger Robot    :   m='method' ID '(' ')' body
32*16467b97STreehugger Robot        {self.input.replace($m, "public void");}
33*16467b97STreehugger Robot    ;
34*16467b97STreehugger Robot
35*16467b97STreehugger Robotbody
36*16467b97STreehugger Robotscope {
37*16467b97STreehugger Robot    decls
38*16467b97STreehugger Robot}
39*16467b97STreehugger Robot@init {
40*16467b97STreehugger Robot    $body::decls = set()
41*16467b97STreehugger Robot}
42*16467b97STreehugger Robot    :   lcurly='{' stat* '}'
43*16467b97STreehugger Robot        {
44*16467b97STreehugger Robot        for it in $body::decls:
45*16467b97STreehugger Robot            self.input.insertAfter($lcurly, "\nint "+it+";")
46*16467b97STreehugger Robot        }
47*16467b97STreehugger Robot    ;
48*16467b97STreehugger Robot
49*16467b97STreehugger Robotstat:   ID '=' expr ';' {$body::decls.add($ID.text);}
50*16467b97STreehugger Robot    ;
51*16467b97STreehugger Robot
52*16467b97STreehugger Robotexpr:   mul ('+' mul)*
53*16467b97STreehugger Robot    ;
54*16467b97STreehugger Robot
55*16467b97STreehugger Robotmul :   atom ('*' atom)*
56*16467b97STreehugger Robot    ;
57*16467b97STreehugger Robot
58*16467b97STreehugger Robotatom:   ID
59*16467b97STreehugger Robot    |   INT
60*16467b97STreehugger Robot    ;
61*16467b97STreehugger Robot
62*16467b97STreehugger RobotID  :   ('a'..'z'|'A'..'Z')+ ;
63*16467b97STreehugger Robot
64*16467b97STreehugger RobotINT :   ('0'..'9')+ ;
65*16467b97STreehugger Robot
66*16467b97STreehugger RobotWS  :   (' '|'\t'|'\n')+ {$channel=HIDDEN;}
67*16467b97STreehugger Robot    ;
68