Changeset 20742

Show
Ignore:
Timestamp:
10/05/08 02:05:11 (5 years ago)
Author:
hiratara
Message:

コメントの追加
文字の読み残しがあっても、構文エラーとならない不具合を修正。
コメントを追加

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • lang/python/dfareg/branches/codezine200809/dfareg/parser.py

    r20730 r20742  
    66class Parser(object): 
    77    """ 
    8     NFAを組み立てる 
     8    構文解析器 
    99    expression -> subexpr 
    1010    subexpr    -> seq '|' subexpr | seq 
     
    1717        self.lexer   = lexer 
    1818        self.look    = None 
     19        # 最初の文字を読む 
    1920        self.move() 
    2021 
    2122    def match(self, tag): 
    22         if self.look.kind != tag: raise "syntax error" 
     23        if self.look.kind != tag:  
     24            # 予期せぬトークンが来たら、エラー終了 
     25            raise "syntax error" 
    2326        self.move() 
    2427 
     
    2730 
    2831    def expression(self): 
     32        # expression -> subexpr 
    2933        node     = self.subexpr() 
     34 
     35        # トークンがすべて処理されたか 
     36        self.match(Talken.EOF) 
     37 
     38        # 構文木を実行し、NFAを作る 
    3039        context  = Context() 
    3140        fragment = node.assemble(context) 
     
    3342 
    3443    def subexpr(self): 
     44        # subexpr    -> seq '|' subexpr | seq 
    3545        node = self.seq() 
    3646        if self.look.kind == Talken.OPE_UNION: 
     
    4353        if self.look.kind == Talken.LPAREN \ 
    4454           or self.look.kind == Talken.CHARACTER: 
     55            # seq -> star seq 
    4556            node1 = self.star() 
    4657            node2 = self.seq() 
    4758            node  = Concat(node1, node2) 
    4859            return node 
    49         # NOP (ε) 
     60        # seq -> '' 
    5061        return Character("") 
    5162 
    5263    def star(self): 
     64        # star -> factor '*' | factor 
    5365        node = self.factor() 
    5466        if self.look.kind == Talken.OPE_STAR: 
     
    5971    def factor(self): 
    6072        if self.look.kind == Talken.LPAREN: 
     73            # factor -> '(' subexpr ')' 
    6174            self.match(Talken.LPAREN) 
    6275            node = self.subexpr() 
     
    6477            return node 
    6578        elif self.look.kind == Talken.CHARACTER: 
     79            # factor -> CHARACTER 
    6680            node = Character(self.look.value) 
    6781            self.match(Talken.CHARACTER);