| <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> |
| <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> |
| <head> |
| <meta http-equiv="content-type" content="text/html;charset=utf-8" /> |
| <title>t047treeparser</title> |
| |
| <!-- ANTLR includes --> |
| <script type="text/javascript" src="../../lib/antlr3-all.js"></script> |
| <script type="text/javascript" src="t047treeparserLexer.js"></script> |
| <script type="text/javascript" src="t047treeparserParser.js"></script> |
| <script type="text/javascript" src="t047treeparserWalker.js"></script> |
| |
| <!-- JsUnit include --> |
| <script type="text/javascript" src="../jsunit/app/jsUnitCore.js"></script> |
| |
| <!-- Test Code --> |
| <script type="text/javascript"> |
| var TLexer = function() { |
| TLexer.superclass.constructor.apply(this, arguments); |
| }; |
| org.antlr.lang.extend(TLexer, t047treeparserLexer, { |
| reportError: function(re) { |
| throw re; |
| } |
| }); |
| |
| var TParser = function() { |
| TParser.superclass.constructor.apply(this, arguments); |
| }; |
| org.antlr.lang.extend(TParser, t047treeparserParser, { |
| recover: function(re) { |
| throw new PrivateError(re); |
| } |
| }); |
| |
| var TWalker = function() { |
| TWalker.superclass.constructor.apply(this, arguments); |
| this.traces = []; |
| }; |
| org.antlr.lang.extend(TWalker, t047treeparserWalker, { |
| recover: function(re) { |
| throw new PrivateError(re); |
| }, |
| traceIn: function(ruleName, ruleIndex) { |
| this.traces.push(">"+ruleName); |
| }, |
| traceOut: function(ruleName, ruleIndex) { |
| this.traces.push("<"+ruleName); |
| } |
| }); |
| |
| function testWalker() { |
| var xinput = [ |
| "char c;", |
| "int x;", |
| "", |
| "void bar(int x);", |
| "", |
| "int foo(int y, char d) {", |
| " int i;", |
| " for (i=0; i<3; i=i+1) {", |
| " x=3;", |
| " y=5;", |
| " }", |
| "}" |
| ].join("\n"), |
| xoutput = "(VAR_DEF char c) (VAR_DEF int x) (FUNC_DECL (FUNC_HDR void bar (ARG_DEF int x))) (FUNC_DEF (FUNC_HDR int foo (ARG_DEF int y) (ARG_DEF char d)) (BLOCK (VAR_DEF int i) (for (= i 0) (< i 3) (= i (+ i 1)) (BLOCK (= x 3) (= y 5)))))", |
| traces = [ |
| '>program', '>declaration', '>variable', '>type', '<type', |
| '>declarator', '<declarator', '<variable', '<declaration', |
| '>declaration', '>variable', '>type', '<type', '>declarator', |
| '<declarator', '<variable', '<declaration', '>declaration', |
| '>functionHeader', '>type', '<type', '>formalParameter', |
| '>type', '<type', '>declarator', '<declarator', |
| '<formalParameter', '<functionHeader', '<declaration', |
| '>declaration', '>functionHeader', '>type', '<type', |
| '>formalParameter', '>type', '<type', '>declarator', |
| '<declarator', '<formalParameter', '>formalParameter', '>type', |
| '<type', '>declarator', '<declarator', '<formalParameter', |
| '<functionHeader', '>block', '>variable', '>type', '<type', |
| '>declarator', '<declarator', '<variable', '>stat', '>forStat', |
| '>expr', '>expr', '>atom', '<atom', '<expr', '<expr', '>expr', |
| '>expr', '>atom', '<atom', '<expr', '>expr', '>atom', '<atom', |
| '<expr', '<expr', '>expr', '>expr', '>expr', '>atom', '<atom', |
| '<expr', '>expr', '>atom', '<atom', '<expr', '<expr', '<expr', |
| '>block', '>stat', '>expr', '>expr', '>atom', '<atom', '<expr', |
| '<expr', '<stat', '>stat', '>expr', '>expr', '>atom', '<atom', |
| '<expr', '<expr', '<stat', '<block', '<forStat', '<stat', |
| '<block', '<declaration', '<program' |
| ]; |
| |
| |
| var cstream = new org.antlr.runtime.ANTLRStringStream(xinput), |
| lexer = new TLexer(cstream), |
| tstream = new org.antlr.runtime.CommonTokenStream(lexer), |
| parser = new TParser(tstream); |
| var r = parser.program(); |
| |
| assertEquals(r.getTree().toStringTree(), xoutput); |
| |
| var nodes = new org.antlr.runtime.tree.CommonTreeNodeStream(r.getTree()); |
| nodes.setTokenStream(tstream); |
| var walker = new TWalker(nodes); |
| walker.program(); |
| |
| assertArrayEquals(walker.traces, traces); |
| } |
| |
| function testRuleLabelPropertyRefText() { |
| var cstream = new org.antlr.runtime.ANTLRStringStream("\nchar c;\n"), |
| lexer = new TLexer(cstream), |
| tstream = new org.antlr.runtime.CommonTokenStream(lexer), |
| parser = new TParser(tstream), |
| r = parser.variable(); |
| |
| var nodes = new org.antlr.runtime.tree.CommonTreeNodeStream(r.getTree()); |
| nodes.setTokenStream(tstream); |
| var walker = new TWalker(nodes); |
| r = walker.variable(); |
| |
| assertEquals(r, 'c'); |
| } |
| </script> |
| |
| </head> |
| <body> |
| <h1>t047treeparser</h1> |
| </body> |
| </html> |