Ignore:
Timestamp:
03/19/06 08:00:38 (8 years ago)
Author:
xi
Message:
  • Add the token STREAM-START.
  • Add parsing events: STREAM-START, DOCUMENT-START, DOCUMENT-END.
File:
1 edited

Legend:

Unmodified
Added
Removed
  • pyyaml/trunk/lib/yaml/parser.py

    r116 r118  
    33# 
    44# We use the following production rules: 
    5 # stream            ::= implicit_document? explicit_document* STREAM-END 
     5# stream            ::= STREAM-START implicit_document? explicit_document* STREAM-END 
    66# explicit_document ::= DIRECTIVE* DOCUMENT-START block_node? DOCUMENT-END? 
    77# implicit_document ::= block_node DOCUMENT-END? 
     
    4343 
    4444# FIRST sets: 
    45 # stream: FIRST(block_node) + { DIRECTIVE DOCUMENT-START } 
     45# stream: { STREAM-START } 
    4646# explicit_document: { DIRECTIVE DOCUMENT-START } 
    4747# implicit_document: FIRST(block_node) 
     
    127127 
    128128    def parse_stream(self): 
    129         # implicit_document? explicit_document* STREAM-END 
     129        # STREAM-START implicit_document? explicit_document* STREAM-END 
     130 
     131        # Parse start of stream. 
     132        token = self.scanner.get() 
     133        yield StreamStartEvent(token.start_mark, token.end_mark) 
    130134 
    131135        # Parse implicit document. 
     
    133137                StreamEndToken): 
    134138            self.tag_handles = self.DEFAULT_TAGS 
     139            token = self.scanner.peek() 
     140            start_mark = end_mark = token.start_mark 
     141            yield DocumentStartEvent(start_mark, end_mark) 
    135142            for event in self.parse_block_node(): 
    136143                yield event 
     144            token = self.scanner.peek() 
     145            start_mark = end_mark = token.start_mark 
     146            while self.scanner.check(DocumentEndToken): 
     147                token = self.scanner.get() 
     148                end_mark = token.end_mark 
     149            yield DocumentEndEvent(start_mark, end_mark) 
    137150 
    138151        # Parse explicit documents. 
    139152        while not self.scanner.check(StreamEndToken): 
     153            token = self.scanner.peek() 
     154            start_mark = token.start_mark 
    140155            self.process_directives() 
    141156            if not self.scanner.check(DocumentStartToken): 
     
    145160                        self.scanner.peek().start_mark) 
    146161            token = self.scanner.get() 
     162            end_mark = token.end_mark 
     163            yield DocumentStartEvent(start_mark, end_mark) 
    147164            if self.scanner.check(DirectiveToken, 
    148165                    DocumentStartToken, DocumentEndToken, StreamEndToken): 
     
    151168                for event in self.parse_block_node(): 
    152169                    yield event 
     170            token = self.scanner.peek() 
     171            start_mark = end_mark = token.start_mark 
    153172            while self.scanner.check(DocumentEndToken): 
    154                 self.scanner.get() 
     173                token = self.scanner.get() 
     174                end_mark = token.end_mark 
     175            yield DocumentEndEvent(start_mark, end_mark) 
    155176 
    156177        # Parse end of stream. 
Note: See TracChangeset for help on using the changeset viewer.