| 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;} |
| ; |