Changeset 24515

Show
Ignore:
Timestamp:
11/20/08 23:57:43 (7 weeks ago)
Author:
hiratara
Message:

OOP的になってなかったので修正
(なんか巻き戻ったので、再コミット)

Location:
lang/python/dfareg/branches/PLY200811/dfareg
Files:
3 modified

Legend:

Unmodified
Added
Removed
  • lang/python/dfareg/branches/PLY200811/dfareg/__init__.py

    r24197 r24515  
    66""" 
    77import nfa2dfa 
    8 import parser 
     8from parser  import Parser 
     9from lexer   import Lexer 
    910 
    1011class Regexp(object): 
     
    1516 
    1617    def _compile(self, debug=False): 
    17         nfa = parser.parse(self.regexp) 
     18        # コンパイル 
     19        lexer_        = Lexer(self.regexp) 
     20        parser_       = Parser(lexer_) 
     21        nfa           = parser_.expression() 
    1822        # 部分集合構成法 
    1923        self.dfa      = nfa2dfa.nfa2dfa(nfa) 
  • lang/python/dfareg/branches/PLY200811/dfareg/lexer.py

    r24513 r24515  
    4040    raise t 
    4141 
    42 lex.lex() 
     42class Lexer(object): 
     43    def __init__(self, regexp): 
     44        self.lexer = lex.lex() 
     45        self.lexer.input(regexp) 
  • lang/python/dfareg/branches/PLY200811/dfareg/parser.py

    r24513 r24515  
    1414 
    1515def p_subexpr1(p): 
    16     'subexpr : seq OPE_UNION subexpr' 
     16    'subexpr : subexpr OPE_UNION seq' 
    1717    p[0] = Union(p[1], p[3]) 
    1818 
     
    3030 
    3131def p_subseq1(p): 
    32     'subseq : star subseq' 
     32    'subseq : subseq star' 
    3333    p[0] = Concat(p[1], p[2]) 
    3434 
     
    5656    raise Exception("syntax error") 
    5757 
    58 yacc.yacc() 
    59  
    60  
    61 from nfabuilder import Context 
    62 def parse(regexp): 
    63     # コンパイル 
    64     node = yacc.parse(regexp) 
    65     # 構文木から変更 
    66     context  = Context() 
    67     fragment = node.assemble(context) 
    68     return fragment.build() 
     58class Parser(object): 
     59    def __init__(self, lexer): 
     60        self.yacc  = yacc.yacc() 
     61        self.lexer = lexer 
     62    def expression(self): 
     63        # コンパイル 
     64        node = self.yacc.parse(lexer=self.lexer.lexer) 
     65        # 構文木から変更 
     66        context  = Context() 
     67        fragment = node.assemble(context) 
     68        return fragment.build()