You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
55 lines
832 B
55 lines
832 B
4 months ago
|
grammar t046rewrite;
|
||
|
options {
|
||
|
language=Python;
|
||
|
}
|
||
|
|
||
|
program
|
||
|
@init {
|
||
|
start = self.input.LT(1)
|
||
|
}
|
||
|
: method+
|
||
|
{
|
||
|
self.input.insertBefore(start,"public class Wrapper {\n")
|
||
|
self.input.insertAfter($method.stop, "\n}\n")
|
||
|
}
|
||
|
;
|
||
|
|
||
|
method
|
||
|
: m='method' ID '(' ')' body
|
||
|
{self.input.replace($m, "public void");}
|
||
|
;
|
||
|
|
||
|
body
|
||
|
scope {
|
||
|
decls
|
||
|
}
|
||
|
@init {
|
||
|
$body::decls = set()
|
||
|
}
|
||
|
: lcurly='{' stat* '}'
|
||
|
{
|
||
|
for it in $body::decls:
|
||
|
self.input.insertAfter($lcurly, "\nint "+it+";")
|
||
|
}
|
||
|
;
|
||
|
|
||
|
stat: ID '=' expr ';' {$body::decls.add($ID.text);}
|
||
|
;
|
||
|
|
||
|
expr: mul ('+' mul)*
|
||
|
;
|
||
|
|
||
|
mul : atom ('*' atom)*
|
||
|
;
|
||
|
|
||
|
atom: ID
|
||
|
| INT
|
||
|
;
|
||
|
|
||
|
ID : ('a'..'z'|'A'..'Z')+ ;
|
||
|
|
||
|
INT : ('0'..'9')+ ;
|
||
|
|
||
|
WS : (' '|'\t'|'\n')+ {$channel=HIDDEN;}
|
||
|
;
|