| grammar t046rewrite; |
| options { |
| language=JavaScript; |
| } |
| |
| program |
| @init { |
| var start = this.input.LT(1); |
| } |
| : method+ |
| { |
| this.input.insertBefore(start,"public class Wrapper {\n") |
| this.input.insertAfter($method.stop, "\n}\n") |
| } |
| ; |
| |
| method |
| : m='method' ID '(' ')' body |
| {this.input.replace($m, "public void");} |
| ; |
| |
| body |
| scope { |
| decls |
| } |
| @init { |
| $body::decls = {}; |
| } |
| : lcurly='{' stat* '}' |
| { |
| var it; |
| for (it in $body::decls) { |
| this.input.insertAfter($lcurly, "\nint "+it+";") |
| } |
| } |
| ; |
| |
| stat: ID '=' expr ';' {$body::decls[$ID.text] = true;} |
| ; |
| |
| expr: mul ('+' mul)* |
| ; |
| |
| mul : atom ('*' atom)* |
| ; |
| |
| atom: ID |
| | INT |
| ; |
| |
| ID : ('a'..'z'|'A'..'Z')+ ; |
| |
| INT : ('0'..'9')+ ; |
| |
| WS : (' '|'\t'|'\n')+ {$channel=HIDDEN;} |
| ; |