Changeset 1154 for proto/RE2PBS


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

Minor template fixes.

Location:
proto/RE2PBS
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • proto/RE2PBS/Makefile

    r1145 r1154  
    33ANTLRWORKS_JAR  = lib/antlrworks-1.4.2.jar
    44RE2PBS_OUT_DIR  = bin
    5 RE2PBS_SRC_FILE = test/CCCharRef.txt
     5RE2PBS_SRC_FILE = test/HexCharRefDef.txt
    66
    77PABLO_SRC_FILE  = compilable.py
  • proto/RE2PBS/bin/re2pbs.py

    r1144 r1154  
    1313      print 'Debug node.'
    1414
    15 # TODO - Implement RE alternation.
    16 
    17 #
    18 # class Union:
    19 #
     15class RE(Node):
     16    def __init__(self):
     17      self.union = Union()
     18     
     19    def debug(self):
     20      return 'RE()->(%s)' % (self.union.debug())
     21
     22class Union(Node):
     23    def __init__(self):
     24      self.concatenation_list = []
     25
     26    def debug(self):
     27      lst = []
     28      for c in self.concatenation_list:
     29        lst.append(c.debug())
     30      return 'Union() -> (%s)' % ((',').join(lst))
    2031
    2132class Concatenation(Node):
     
    2435     
    2536    def debug(self):
    26       return 'Concatentation() -> (%s) ' % (self.atom_list)
     37      return 'Concatentation() -> (%s)' % (self.atom_list)
    2738
    2839class Atom(Node):
     
    131142        self.error = self.error_base + '_' + str(self.error_count)
    132143        return self.error
    133        
    134     def make_lexical_items(self, strm_lst):
     144             
     145    def make_init_stmts(self, strm):
     146      print self.__class__.__name__ + ' not implemented.'
     147      sys.exit(1)
     148   
     149    def make_match_stmts(self, strm, quantifier, follow_set_strm=None):
     150      print self.__class__.__name__ + ' not implemented.'
     151      sys.exit(1)
     152   
     153    def make_optional_stmts(self, strm, follow_set_strm=None):
     154      print self.__class__.__name__ + ' not implemented.'
     155      sys.exit(1)
     156   
     157    def make_kleene_star_stmts(self, strm, follow_set_strm=None):
     158      print self.__class__.__name__ + ' not implemented.'
     159      sys.exit(1)
     160   
     161    def make_kleene_cross_stmts(self, strm, follow_set_strm=None):
     162      print self.__class__.__name__ + ' not implemented.'
     163      sys.exit(1)
     164
     165    def make_single_stmts(self, strm, follow_set_strm=None):
     166      print self.__class__.__name__ + ' not implemented.'
     167      sys.exit(1)
     168     
     169    def make_finalization_stmts(self): 
     170      print self.__class__.__name__ + ' not implemented.'
     171      sys.exit(1)
     172     
     173    def make_debug_stmts(self):
     174      print self.__class__.__name__ + ' not implemented.'
     175      sys.exit(1)
     176     
     177    @classmethod         
     178    def make_lexical_items(cls, strm_lst, level=1):
    135179        strms = ""
    136180        for strm in strm_lst:
    137           strms += self.indent_level + PabloCode.Assign(strm,'0')  +'\n'         
     181          strms += PabloCode.indent(level) + PabloCode.Assign(strm, '0')  +'\n'   
    138182        return strms 
    139183     
    140     def make_init_stmts(self, strm):
    141       print self.__class__.__name__ + ' not implemented.'
    142       sys.exit(1)
    143    
    144     def make_match_stmts(self, strm, quantifier, follow_set_strm=None):
    145       print self.__class__.__name__ + ' not implemented.'
    146       sys.exit(1)
    147    
    148     def make_optional_stmts(self, strm, follow_set_strm=None):
    149       print self.__class__.__name__ + ' not implemented.'
    150       sys.exit(1)
    151    
    152     def make_kleene_star_stmts(self, strm, follow_set_strm=None):
    153       print self.__class__.__name__ + ' not implemented.'
    154       sys.exit(1)
    155    
    156     def make_kleene_cross_stmts(self, strm, follow_set_strm=None):
    157       print self.__class__.__name__ + ' not implemented.'
    158       sys.exit(1)
    159 
    160     def make_single_stmts(self, strm, follow_set_strm=None):
    161       print self.__class__.__name__ + ' not implemented.'
    162       sys.exit(1)
    163      
    164     def make_finalization_stmts(self): 
    165       print self.__class__.__name__ + ' not implemented.'
    166       sys.exit(1)
    167      
    168     def make_debug_stmts(self):
    169       print self.__class__.__name__ + ' not implemented.'
    170       sys.exit(1)
    171184     
    172185class PostValidator(Generator):
     
    249262      self.debug = debug
    250263      if (self.debug):
    251         self.re2pbs_debug_generator = DebugGenerator()
     264        self.re2pbs_debug_generator = DebugGenerator(level)
    252265   
    253266    def make_init_stmts(self, strm):
     
    259272
    260273      if (self.debug):
    261                 self.re2pbs_debug_generator.add_stmt('Init')
    262                 self.re2pbs_debug_generator.add_stmt(op, self.error)
     274                label = self.indent_level + 'Init'
     275                self.re2pbs_debug_generator.add_stmt(label)
     276                label = self.indent_level + self.error
     277                self.re2pbs_debug_generator.add_stmt(label, self.error)
    263278
    264279      #----- op 2 -----
     
    267282
    268283      if (self.debug):
    269                 self.re2pbs_debug_generator.add_stmt(strm, strm)
     284                label = self.indent_level + strm
     285                self.re2pbs_debug_generator.add_stmt(label, strm)
    270286                self.re2pbs_debug_generator.add_stmt(op, self.cursor)
    271287
     
    291307      #----- op 1 -----
    292308      if (self.debug):
    293                 self.re2pbs_debug_generator.add_stmt('Single Character')
    294                 self.re2pbs_debug_generator.add_stmt(self.cursor, self.cursor)
    295                 self.re2pbs_debug_generator.add_stmt(strm, strm)
     309                label = self.indent_level + 'Single Character'
     310                self.re2pbs_debug_generator.add_stmt(label)
     311                label = self.indent_level + self.cursor
     312                self.re2pbs_debug_generator.add_stmt(label, self.cursor)
     313                label = self.indent_level + strm
     314                self.re2pbs_debug_generator.add_stmt(label, strm)
    296315     
    297316      cursor = self.cursor
     
    328347      #----- op 1 -----
    329348      if (self.debug):
    330                 self.re2pbs_debug_generator.add_stmt('Optional Character')
    331                 self.re2pbs_debug_generator.add_stmt(self.cursor, self.cursor)
    332                 self.re2pbs_debug_generator.add_stmt(strm, strm)
     349                label = self.indent_level + 'Optional Character'
     350                self.re2pbs_debug_generator.add_stmt(label)
     351                label = self.indent_level + self.cursor
     352                self.re2pbs_debug_generator.add_stmt(label, self.cursor)
     353                label = self.indent_level + strm
     354                self.re2pbs_debug_generator.add_stmt(label, strm)
    333355
    334356      cursor = self.cursor
     
    347369      #----- op 1 -----
    348370      if (self.debug):
    349                 self.re2pbs_debug_generator.add_stmt('Kleene Star')
    350                 self.re2pbs_debug_generator.add_stmt(self.cursor, self.cursor)
    351                 self.re2pbs_debug_generator.add_stmt(strm, strm)
     371                label = self.indent_level + 'Kleene Star'
     372                self.re2pbs_debug_generator.add_stmt(label)
     373                label = self.indent_level + self.cursor
     374                self.re2pbs_debug_generator.add_stmt(label, self.cursor)
     375                label = self.indent_level + strm
     376                self.re2pbs_debug_generator.add_stmt(label, strm)
    352377
    353378      cursor = self.cursor
     
    368393
    369394      if (self.debug):
    370                 self.re2pbs_debug_generator.add_stmt('Kleene Cross')
     395                label = self.indent_level + 'Kleene Cross'
     396                self.re2pbs_debug_generator.add_stmt(label)
    371397
    372398      code = self.make_single_stmts(strm)
     
    400426      code = ""
    401427      if(self.debug):
    402         code = self.re2pbs_debug_generator.make_debug_stmts()
     428        code = self.indent_level + self.re2pbs_debug_generator.make_debug_stmts()
    403429
    404430      return code
     
    406432class DebugGenerator:
    407433    def __init__(self, level=0):
    408       self.header = 'bitutil.print_aligned_streams([(\'Input Data\', u8data), \n'
     434      self.indent_level = PabloCode.indent(level)
     435      self.header = 'bitutil.print_aligned_streams([(\''+ self.indent_level + 'Input Data\', u8data), \n'
    409436      self.footer = '])'
    410       self.indent_level = PabloCode.indent(level)
    411437      self.stmts = []
    412438 
     
    416442     
    417443    def make_debug_stmts(self):
    418       return self.indent_level + self.header + ',\n'.join(self.stmts) + self.footer + '\n'
     444      return self.header + ',\n'.join(self.stmts) + self.footer + '\n'
    419445
    420446def readfile(filename):
     
    441467      self.contents = string.replace(self.contents, '@cc_code', cc_code)
    442468      self.contents = string.replace(self.contents, '@pbs_code', pbs_code)
    443       self.contents = string.replace(self.contents, '@pbs_code', pbs_debug)
     469      self.contents = string.replace(self.contents, '@pbs_debug', pbs_debug)
    444470      writefile(self.prototype, self.contents)
    445471
     
    450476    re2pbs_code_generator = factory.build_pre_validator()
    451477    pbs_code = re2pbs_code_generator.make_init_stmts('lex.Ampersand')                           # init   '&'
    452     pbs_code += re2pbs_code_generator.make_match_stmts('lex.Ampersand', None, 'lex.Hash')               # expect '&'
    453     pbs_code += re2pbs_code_generator.make_match_stmts('lex.Hash', None, 'lex.Digit')                   # expect '#'
    454     pbs_code += re2pbs_code_generator.make_match_stmts('lex.Digit', '+', 'lex.Semi')                    # expect '[0-9]'
     478    pbs_code += re2pbs_code_generator.make_match_stmts('lex.Ampersand', None, 'lex.Hash')       # expect '&'
     479    pbs_code += re2pbs_code_generator.make_match_stmts('lex.Hash', None, 'lex.Digit')           # expect '#'
     480    pbs_code += re2pbs_code_generator.make_match_stmts('lex.Digit', '+', 'lex.Semi')            # expect '[0-9]'
    455481    pbs_code += re2pbs_code_generator.make_match_stmts('lex.Semi', None, None)                  # expect ';'   
    456482    pbs_code += re2pbs_code_generator.make_finalization_stmts()
  • proto/RE2PBS/prototype.py

    r1149 r1154  
    1313#
    1414#----------------------------------------------------------------------------
     15
     16import sys
     17import bitutil
    1518
    1619u8data = ""
     
    3538
    3639
    37 def classify_bytes(bit):
     40def classify_bytes(basis_bits):
    3841        lex = Lex()
    3942
     
    6568        return lex
    6669
    67 def demo(u8data):
     70def demo(u8data, lex):
    6871        global lgth
    6972        lgth = len(u8data)
    7073       
     74        error_1_0 = (0)
     75        cursor_1_0 = ((lex.s38) &~ (bitutil.Advance(lex.s38)))
     76        error_1_1 = ((cursor_1_0) &~ (lex.s38))
     77        cursor_1_1 = ((cursor_1_0) &~ (error_1_1))
     78        cursor_1_2 = (bitutil.Advance(cursor_1_1))
     79        error_1_2 = ((cursor_1_2) &~ (lex.s35))
     80        cursor_1_3 = ((cursor_1_2) &~ (error_1_2))
     81        cursor_1_4 = (bitutil.Advance(cursor_1_3))
     82        error_1_3 = ((cursor_1_4) &~ (lex.s120))
     83        cursor_1_5 = ((cursor_1_4) &~ (error_1_3))
     84        cursor_1_6 = (bitutil.Advance(cursor_1_5))
     85        error_1_4 = ((cursor_1_6) &~ (lex.s48__57))
     86        cursor_1_7 = ((cursor_1_6) &~ (error_1_4))
     87        cursor_1_8 = (bitutil.Advance(cursor_1_7))
     88        cursor_1_9 = (bitutil.ScanThru(cursor_1_8,lex.s48__57))
     89        error_1_5 = ((cursor_1_9) &~ (lex.s59))
     90        cursor_1_10 = ((cursor_1_9) &~ (error_1_5))
     91        cursor_1_11 = (bitutil.Advance(cursor_1_10))
     92        error_1_6 = (error_1_0)
     93        error_1_6 |= (error_1_1)
     94        error_1_6 |= (error_1_2)
     95        error_1_6 |= (error_1_3)
     96        error_1_6 |= (error_1_4)
     97        error_1_6 |= (error_1_5)
    7198
    72 @pbs_debug
     99        bitutil.print_aligned_streams([('       Input Data', u8data),
     100        ('      Init', bitutil.bitstream2string(0, lgth+1)),
     101        ('      error_1_0', bitutil.bitstream2string(error_1_0, lgth+1)),
     102        ('      lex.s38', bitutil.bitstream2string(lex.s38, lgth+1)),
     103        ('      cursor_1_0 = ((lex.s38) &~ (bitutil.Advance(lex.s38)))', bitutil.bitstream2string(cursor_1_0, lgth+1)),
     104        ('      Single Character', bitutil.bitstream2string(0, lgth+1)),
     105        ('      cursor_1_0', bitutil.bitstream2string(cursor_1_0, lgth+1)),
     106        ('      lex.s38', bitutil.bitstream2string(lex.s38, lgth+1)),
     107        ('      error_1_1 = ((cursor_1_0) &~ (lex.s38))', bitutil.bitstream2string(error_1_1, lgth+1)),
     108        ('      cursor_1_1 = ((cursor_1_0) &~ (error_1_1))', bitutil.bitstream2string(cursor_1_1, lgth+1)),
     109        ('      cursor_1_2 = (bitutil.Advance(cursor_1_1))', bitutil.bitstream2string(cursor_1_2, lgth+1)),
     110        ('      Single Character', bitutil.bitstream2string(0, lgth+1)),
     111        ('      cursor_1_2', bitutil.bitstream2string(cursor_1_2, lgth+1)),
     112        ('      lex.s35', bitutil.bitstream2string(lex.s35, lgth+1)),
     113        ('      error_1_2 = ((cursor_1_2) &~ (lex.s35))', bitutil.bitstream2string(error_1_2, lgth+1)),
     114        ('      cursor_1_3 = ((cursor_1_2) &~ (error_1_2))', bitutil.bitstream2string(cursor_1_3, lgth+1)),
     115        ('      cursor_1_4 = (bitutil.Advance(cursor_1_3))', bitutil.bitstream2string(cursor_1_4, lgth+1)),
     116        ('      Single Character', bitutil.bitstream2string(0, lgth+1)),
     117        ('      cursor_1_4', bitutil.bitstream2string(cursor_1_4, lgth+1)),
     118        ('      lex.s120', bitutil.bitstream2string(lex.s120, lgth+1)),
     119        ('      error_1_3 = ((cursor_1_4) &~ (lex.s120))', bitutil.bitstream2string(error_1_3, lgth+1)),
     120        ('      cursor_1_5 = ((cursor_1_4) &~ (error_1_3))', bitutil.bitstream2string(cursor_1_5, lgth+1)),
     121        ('      cursor_1_6 = (bitutil.Advance(cursor_1_5))', bitutil.bitstream2string(cursor_1_6, lgth+1)),
     122        ('      Kleene Cross', bitutil.bitstream2string(0, lgth+1)),
     123        ('      Single Character', bitutil.bitstream2string(0, lgth+1)),
     124        ('      cursor_1_6', bitutil.bitstream2string(cursor_1_6, lgth+1)),
     125        ('      lex.s48__57', bitutil.bitstream2string(lex.s48__57, lgth+1)),
     126        ('      error_1_4 = ((cursor_1_6) &~ (lex.s48__57))', bitutil.bitstream2string(error_1_4, lgth+1)),
     127        ('      cursor_1_7 = ((cursor_1_6) &~ (error_1_4))', bitutil.bitstream2string(cursor_1_7, lgth+1)),
     128        ('      cursor_1_8 = (bitutil.Advance(cursor_1_7))', bitutil.bitstream2string(cursor_1_8, lgth+1)),
     129        ('      Kleene Star', bitutil.bitstream2string(0, lgth+1)),
     130        ('      cursor_1_8', bitutil.bitstream2string(cursor_1_8, lgth+1)),
     131        ('      lex.s48__57', bitutil.bitstream2string(lex.s48__57, lgth+1)),
     132        ('      cursor_1_9 = (bitutil.ScanThru(cursor_1_8,lex.s48__57))', bitutil.bitstream2string(cursor_1_9, lgth+1)),
     133        ('      Single Character', bitutil.bitstream2string(0, lgth+1)),
     134        ('      cursor_1_9', bitutil.bitstream2string(cursor_1_9, lgth+1)),
     135        ('      lex.s59', bitutil.bitstream2string(lex.s59, lgth+1)),
     136        ('      error_1_5 = ((cursor_1_9) &~ (lex.s59))', bitutil.bitstream2string(error_1_5, lgth+1)),
     137        ('      cursor_1_10 = ((cursor_1_9) &~ (error_1_5))', bitutil.bitstream2string(cursor_1_10, lgth+1)),
     138        ('      cursor_1_11 = (bitutil.Advance(cursor_1_10))', bitutil.bitstream2string(cursor_1_11, lgth+1)),
     139        ('      error_1_6 = (error_1_0)', bitutil.bitstream2string(error_1_6, lgth+1)),
     140        ('      error_1_6 |= (error_1_1)', bitutil.bitstream2string(error_1_6, lgth+1)),
     141        ('      error_1_6 |= (error_1_2)', bitutil.bitstream2string(error_1_6, lgth+1)),
     142        ('      error_1_6 |= (error_1_3)', bitutil.bitstream2string(error_1_6, lgth+1)),
     143        ('      error_1_6 |= (error_1_4)', bitutil.bitstream2string(error_1_6, lgth+1)),
     144        ('      error_1_6 |= (error_1_5)', bitutil.bitstream2string(error_1_6, lgth+1))])
     145
    73146
    74147        return
     
    85158        (bits, EOF_mask) = bitutil.transpose_streams(u8data)
    86159       
     160        basis_bits = Basis_bits()
    87161        basis_bits.bit_0 = bits[0]
    88162        basis_bits.bit_1 = bits[1]
  • proto/RE2PBS/prototype_template.py

    r1149 r1154  
    1313#
    1414#----------------------------------------------------------------------------
     15
     16import sys
     17import bitutil
    1518
    1619u8data = ""
     
    3033@lex_strms
    3134
    32 def classify_bytes(bit):
     35def classify_bytes(basis_bits):
    3336        lex = Lex()
    3437
     
    3639        return lex
    3740
    38 def demo(u8data):
     41def demo(u8data, lex):
    3942        global lgth
    4043        lgth = len(u8data)
     
    5659        (bits, EOF_mask) = bitutil.transpose_streams(u8data)
    5760       
     61        basis_bits = Basis_bits()
    5862        basis_bits.bit_0 = bits[0]
    5963        basis_bits.bit_1 = bits[1]
  • 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.