Home | History | Annotate | Download | only in functional
      1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
      2 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
      3 <head>
      4 <meta http-equiv="content-type" content="text/html;charset=utf-8" />
      5 <title>t053hetero</title>
      6 
      7 <!-- ANTLR includes -->
      8 <script type="text/javascript" src="../../lib/antlr3-all.js"></script>
      9 
     10 <script type="text/javascript" src="t053heteroT1Lexer.js"></script>
     11 <script type="text/javascript" src="t053heteroT1Parser.js"></script>
     12 
     13 <script type="text/javascript" src="t053heteroT2Lexer.js"></script>
     14 <script type="text/javascript" src="t053heteroT2Parser.js"></script>
     15 
     16 <script type="text/javascript" src="t053heteroT3Lexer.js"></script>
     17 <script type="text/javascript" src="t053heteroT3Parser.js"></script>
     18 
     19 <script type="text/javascript" src="t053heteroT4Lexer.js"></script>
     20 <script type="text/javascript" src="t053heteroT4Parser.js"></script>
     21 
     22 <script type="text/javascript" src="t053heteroT5Lexer.js"></script>
     23 <script type="text/javascript" src="t053heteroT5Parser.js"></script>
     24 
     25 <script type="text/javascript" src="t053heteroT6Lexer.js"></script>
     26 <script type="text/javascript" src="t053heteroT6Parser.js"></script>
     27 
     28 <script type="text/javascript" src="t053heteroT7Lexer.js"></script>
     29 <script type="text/javascript" src="t053heteroT7Parser.js"></script>
     30 
     31 <script type="text/javascript" src="t053heteroT8Lexer.js"></script>
     32 <script type="text/javascript" src="t053heteroT8Parser.js"></script>
     33 
     34 <script type="text/javascript" src="t053heteroT9Lexer.js"></script>
     35 <script type="text/javascript" src="t053heteroT9Parser.js"></script>
     36 
     37 <script type="text/javascript" src="t053heteroT10Lexer.js"></script>
     38 <script type="text/javascript" src="t053heteroT10Parser.js"></script>
     39 
     40 <script type="text/javascript" src="t053heteroT11Lexer.js"></script>
     41 <script type="text/javascript" src="t053heteroT11Parser.js"></script>
     42 
     43 <script type="text/javascript" src="t053heteroT12Lexer.js"></script>
     44 <script type="text/javascript" src="t053heteroT12Parser.js"></script>
     45 
     46 <script type="text/javascript" src="t053heteroT13Lexer.js"></script>
     47 <script type="text/javascript" src="t053heteroT13Parser.js"></script>
     48 <script type="text/javascript" src="t053heteroTP13Parser.js"></script>
     49 
     50 <script type="text/javascript" src="t053heteroT14Lexer.js"></script>
     51 <script type="text/javascript" src="t053heteroT14Parser.js"></script>
     52 <script type="text/javascript" src="t053heteroTP14Parser.js"></script>
     53 
     54 <script type="text/javascript" src="t053heteroT15Lexer.js"></script>
     55 <script type="text/javascript" src="t053heteroT15Parser.js"></script>
     56 <script type="text/javascript" src="t053heteroTP15Parser.js"></script>
     57 
     58 <script type="text/javascript" src="t053heteroT16Lexer.js"></script>
     59 <script type="text/javascript" src="t053heteroT16Parser.js"></script>
     60 <script type="text/javascript" src="t053heteroTP16Parser.js"></script>
     61 
     62 <script type="text/javascript" src="t053heteroT17Lexer.js"></script>
     63 <script type="text/javascript" src="t053heteroT17Parser.js"></script>
     64 <script type="text/javascript" src="t053heteroTP17Parser.js"></script>
     65 
     66 <script type="text/javascript" src="t053heteroT18Lexer.js"></script>
     67 <script type="text/javascript" src="t053heteroT18Parser.js"></script>
     68 <script type="text/javascript" src="t053heteroTP18Parser.js"></script>
     69 
     70 <script type="text/javascript" src="t053heteroT18Lexer.js"></script>
     71 <script type="text/javascript" src="t053heteroT18Parser.js"></script>
     72 <script type="text/javascript" src="t053heteroTP18Parser.js"></script>
     73 
     74 <script type="text/javascript" src="t053heteroTLexer.js"></script>
     75 <script type="text/javascript" src="t053heteroTParser.js"></script>
     76 <script type="text/javascript" src="t053heteroTPParser.js"></script>
     77 
     78 <!-- JsUnit include -->
     79 <script type="text/javascript" src="../jsunit/app/jsUnitCore.js"></script>
     80 
     81 <!-- Test Code -->
     82 <script type="text/javascript">
     83     // Parser Tests
     84 
     85     function execParser(lexerCls, parserCls, grammarEntry, xinput) {
     86         var cstream = new org.antlr.runtime.ANTLRStringStream(xinput),
     87             lexer = new (EnhancedParser(lexerCls))(cstream),
     88             tstream = new org.antlr.runtime.CommonTokenStream(lexer),
     89             parser = new (EnhancedParser(parserCls))(tstream);
     90         var r = parser[grammarEntry]();
     91 
     92         if (r) {
     93             return r.getTree().toStringTree();
     94         }
     95         return "";
     96     }
     97 
     98     function execTreeParser(lexerCls, parserCls, grammarEntry, walkerCls, treeEntry, xinput)
     99     {
    100         var cstream = new org.antlr.runtime.ANTLRStringStream(xinput),
    101             lexer = new (EnhancedParser(lexerCls))(cstream),
    102             tstream = new org.antlr.runtime.CommonTokenStream(lexer),
    103             parser = new (EnhancedParser(parserCls))(tstream);
    104         var r = parser[grammarEntry]();
    105 
    106         var nodes = new org.antlr.runtime.tree.CommonTreeNodeStream(r.getTree());
    107         nodes.setTokenStream(tstream);
    108         var walker = new walkerCls(nodes);
    109         r = walker[treeEntry]();
    110 
    111         if (r) {
    112             return r.getTree().toStringTree();
    113         }
    114         return "";
    115     }
    116 
    117 
    118     function EnhancedParser(base) {
    119         var T = function() {
    120             T.superclass.constructor.apply(this, arguments);
    121             this.traces = [];
    122             this.buf = "";
    123         };
    124 
    125         org.antlr.lang.extend(T, base, {
    126             capture: function(t) {
    127                 this.buf += t;
    128             },
    129             traceIn: function(ruleName, ruleIndex) {
    130                 this.traces.push(">"+ruleName);
    131             },
    132             traceOut: function(ruleName, ruleIndex) {
    133                 this.traces.push("<"+ruleName);
    134             },
    135             reportError: function(input, re) {
    136                 throw re;
    137             }
    138         });
    139 
    140         return T;
    141     }
    142 
    143     // PARSERS -- AUTO AST
    144 
    145     function testToken() {
    146         var found = execParser(
    147                 t053heteroT1Lexer,
    148                 t053heteroT1Parser,
    149                 "a",
    150                 "a");
    151         assertEquals("a<V>", found);
    152     }
    153 
    154     function testTokenWithLabel() {
    155         var found = execParser(
    156                 t053heteroT2Lexer,
    157                 t053heteroT2Parser,
    158                 "a",
    159                 "a");
    160         assertEquals("a<V>", found);
    161     }
    162 
    163     function testTokenWithListLabel() {
    164         var found = execParser(
    165                 t053heteroT3Lexer,
    166                 t053heteroT3Parser,
    167                 "a",
    168                 "a");
    169         assertEquals("a<V>", found);
    170     }
    171 
    172     function testTokenRoot() {
    173         var found = execParser(
    174                 t053heteroT4Lexer,
    175                 t053heteroT4Parser,
    176                 "a",
    177                 "a");
    178         assertEquals("a<V>", found);
    179     }
    180 
    181     function testTokenRootWithListLabel() {
    182         var found = execParser(
    183                 t053heteroT5Lexer,
    184                 t053heteroT5Parser,
    185                 "a",
    186                 "a");
    187         assertEquals("a<V>", found);
    188     }
    189 
    190     function testString() {
    191         var found = execParser(
    192                 t053heteroT6Lexer,
    193                 t053heteroT6Parser,
    194                 "a",
    195                 "begin");
    196         assertEquals("begin<V>", found);
    197     }
    198 
    199     function testStringRoot() {
    200         var found = execParser(
    201                 t053heteroT7Lexer,
    202                 t053heteroT7Parser,
    203                 "a",
    204                 "begin");
    205         assertEquals("begin<V>", found);
    206     }
    207 
    208     // PARSERS -- REWRITE AST
    209 
    210     function testRewriteToken() {
    211         var found = execParser(
    212                 t053heteroT8Lexer,
    213                 t053heteroT8Parser,
    214                 "a",
    215                 "a");
    216         assertEquals("a<V>", found);
    217     }
    218 
    219     function testrewritetokenwithargs() {
    220         var found = execParser(
    221                 t053heteroT9Lexer,
    222                 t053heteroT9Parser,
    223                 "a",
    224                 "a");
    225         assertEquals("<V>;421930 a<V>;9900", found);
    226     }
    227 
    228     function testRewriteTokenRoot() {
    229         var found = execParser(
    230                 t053heteroT10Lexer,
    231                 t053heteroT10Parser,
    232                 "a",
    233                 "a 2");
    234         assertEquals("(a<V> 2)", found);
    235     }
    236 
    237     function testRewriteString() {
    238         var found = execParser(
    239                 t053heteroT11Lexer,
    240                 t053heteroT11Parser,
    241                 "a",
    242                 "begin");
    243         assertEquals("begin<V>", found);
    244     }
    245 
    246     function testRewriteStringRoot() {
    247         var found = execParser(
    248                 t053heteroT12Lexer,
    249                 t053heteroT12Parser,
    250                 "a",
    251                 "begin 2");
    252         assertEquals("(begin<V> 2)", found);
    253     }
    254 
    255     // TREE PARSERS -- REWRITE AST
    256 
    257     function testTreeParserRewriteFlatList() {
    258         var found = execTreeParser(
    259                 t053heteroT13Lexer,
    260                 t053heteroT13Parser,
    261                 "a",
    262                 t053heteroTP13Parser,
    263                 "a",
    264                 "abc 34");
    265         assertEquals("34<V> abc<W>", found);
    266     }
    267 
    268     function testTreeParserRewriteTree() {
    269         var found = execTreeParser(
    270                 t053heteroT14Lexer,
    271                 t053heteroT14Parser,
    272                 "a",
    273                 t053heteroTP14Parser,
    274                 "a",
    275                 "abc 34");
    276         assertEquals("(34<V> abc<W>)", found);
    277     }
    278 
    279     function testTreeParserRewriteImaginary() {
    280         var found = execTreeParser(
    281                 t053heteroT15Lexer,
    282                 t053heteroT15Parser,
    283                 "a",
    284                 t053heteroTP15Parser,
    285                 "a",
    286                 "abc");
    287         assertEquals("ROOT<V> abc", found);
    288     }
    289 
    290     function testTreeParserRewriteImaginaryWithArgs() {
    291         var found = execTreeParser(
    292                 t053heteroT16Lexer,
    293                 t053heteroT16Parser,
    294                 "a",
    295                 t053heteroTP16Parser,
    296                 "a",
    297                 "abc");
    298         assertEquals("ROOT<V>;42 abc", found);
    299     }
    300 
    301     function testTreeParserRewriteImaginaryRoot() {
    302         var found = execTreeParser(
    303                 t053heteroT17Lexer,
    304                 t053heteroT17Parser,
    305                 "a",
    306                 t053heteroTP17Parser,
    307                 "a",
    308                 "abc");
    309         assertEquals("(ROOT<V> abc)", found);
    310     }
    311 
    312     function testTreeParserRewriteImaginaryFromReal() {
    313         var found = execTreeParser(
    314                 t053heteroT18Lexer,
    315                 t053heteroT18Parser,
    316                 "a",
    317                 t053heteroTP18Parser,
    318                 "a",
    319                 "abc");
    320         assertEquals("ROOT<V>@1", found);
    321     }
    322 
    323     function testTreeParserAutoHeteroAST() {
    324         var found = execTreeParser(
    325                 t053heteroTLexer,
    326                 t053heteroTParser,
    327                 "a",
    328                 t053heteroTPParser,
    329                 "a",
    330                 "abc;");
    331         assertEquals("abc<V> ;<V>", found);
    332     }
    333 </script>
    334 
    335 </head>
    336 <body>
    337     <h1>t053hetero</h1>
    338 </body>
    339 </html>
    340