Changeset 1154 for proto/RE2PBS/re2pbs.g


Ignore:
Timestamp:
Apr 25, 2011, 1:37:41 AM (8 years ago)
Author:
ksherdy
Message:

Minor template fixes.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • proto/RE2PBS/re2pbs.g

    r1149 r1154  
    6767                return defs
    6868
    69 # TODO - Implement
    70         def generate_pbs_eqns(atoms):
    71                 pass
    72                
     69        # TODO - relocate
     70        def generate_pbs_code_concatenations(generator_factory, concatenations, prefix='', level=1, debug=True):
     71                pbs_code = ''
     72                pbs_debug = ''
     73                lgth = len(concatenations)
     74
     75                for i in range(0,lgth):
     76                        pre_validator_generator = generator_factory.build_pre_validator(level, 'cursor','error') 
     77                        (code, debug) = generate_pbs_code_atoms(pre_validator_generator, concatenations[i].atom_list, prefix)
     78                        pbs_code += code
     79                        pbs_debug += debug
     80
     81                #TODO - glue concatenation list pbs code, glue debug code
     82
     83                return (pbs_code, pbs_debug)
     84
     85        # TODO - relocate
     86        def generate_pbs_code_atoms(generator, atoms, prefix='', debug=True):
     87                pbs_code = ''
     88                pbs_debug = ''
     89                lgth = len(atoms)
     90
     91                if lgth > 0:
     92                        pbs_code = generator.make_init_stmts(prefix + atoms[0].strm_name)
     93               
     94                        for i in range(0,lgth):
     95                                pbs_code += generator.make_match_stmts(prefix + atoms[i].strm_name, atoms[i].quantifier, None)
     96
     97                        pbs_code += generator.make_finalization_stmts()
     98                        pbs_debug += generator.make_debug_stmts()
     99
     100                return (pbs_code, pbs_debug)
    73101}
    74102
    75103@members {
    76104        symbol_table = CodePointSymbolTable()
    77         lex_strms = ""
    78         cc_code = ""
    79         pbs_code = ""
    80105}
    81106
     
    86111}
    87112
    88 prog    :       re EOF
     113prog    :       r = re EOF
    89114{
     115        lex_strms = ''
     116        cc_code = ''
     117        pbs_code = ''
     118        pbs_debug = ''
     119
    90120        factory = GeneratorFactory()
    91         re2pbs_code_generator = factory.build_pre_validator(1, 'cursor','error') 
    92 
    93         self.lex_strms = re2pbs_code_generator.make_lexical_items(self.symbol_table.symbols.keys())
    94         self.cc_code = chardeflist2py(generate_chardefsets(self.symbol_table.symbols.items(), 'lex.'))
    95 
    96         print self.lex_strms
    97         print self.cc_code
    98 
     121
     122        lex_strms = Generator.make_lexical_items(self.symbol_table.symbols.keys())
     123        cc_code = chardeflist2py(generate_chardefsets(self.symbol_table.symbols.items(), 'lex.'))
     124        #print cc_code
     125
     126        (pbs_code, pbs_debug) = generate_pbs_code_concatenations(factory, r.union.concatenation_list, 'lex.')   
     127
     128        print lex_strms
     129        print cc_code
     130        print pbs_code
     131        print pbs_debug
     132       
    99133        prototype = Program()
    100         prototype.generate(self.lex_strms, self.cc_code, self.pbs_code)
    101 
    102 }
    103         ;
    104                
    105 re      :       union?
    106         ;       
    107        
    108 union   :       concatenation           
     134        prototype.generate(lex_strms, cc_code, pbs_code, pbs_debug)
     135
     136}
     137        ;
     138               
     139re      returns [object]
     140@init {
     141        object = RE()
     142}
     143@after {
     144        # print object.debug()
     145}
     146        :       (union
     147                        {       
     148                                object.union = $union.object
     149                        }
     150                )?
     151        ;       
     152       
     153union   returns [object]
     154@init {
     155        object = Union()       
     156}
     157@after {
     158        #print object.debug()
     159}
     160        :       c0 = concatenation             
    109161                {
    110  
     162                        # initialize an object
     163                        object.concatenation_list.append(c0)
    111164
    112165                }
    113166                (
    114                 Or concatenation       
     167                Or ck = concatenation   
    115168                {
    116 
     169                        # initialize an object
     170                        object.concatenation_list.append(ck)
    117171                } 
    118172                )*
    119173        ;
    120174       
    121 concatenation
     175concatenation returns [object]
    122176@init {
    123177        object = Concatenation()
     
    126180        #print object.debug()
    127181}
    128         : (atom {object.atom_list.append($atom.object.debug())})+
     182        : (atom {object.atom_list.append($atom.object)})+
    129183        ;       
    130184
Note: See TracChangeset for help on using the changeset viewer.