Changeset 118
- Timestamp:
- 03/19/06 08:00:38 (7 years ago)
- Location:
- pyyaml/trunk
- Files:
-
- 8 edited
-
lib/yaml/composer.py (modified) (2 diffs)
-
lib/yaml/events.py (modified) (1 diff)
-
lib/yaml/parser.py (modified) (6 diffs)
-
lib/yaml/scanner.py (modified) (4 diffs)
-
lib/yaml/tokens.py (modified) (1 diff)
-
tests/test_appliance.py (modified) (4 diffs)
-
tests/test_structure.py (modified) (1 diff)
-
tests/test_tokens.py (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
-
pyyaml/trunk/lib/yaml/composer.py
r116 r118 16 16 self.complete_anchors = {} 17 17 18 # Drop the STREAM-START event. 19 self.parser.get() 20 18 21 def check(self): 19 22 # If there are more documents available? … … 31 34 32 35 def compose_document(self): 36 37 # Drop the DOCUMENT-START event. 38 self.parser.get() 39 40 # Compose the root node. 33 41 node = self.compose_node() 42 43 # Drop the DOCUMENT-END event. 44 self.parser.get() 45 34 46 self.all_anchors = {} 35 47 self.complete_anchors = {} -
pyyaml/trunk/lib/yaml/events.py
r116 r118 45 45 pass 46 46 47 class DocumentStartEvent(Event): 48 pass 49 50 class DocumentEndEvent(Event): 51 pass 52 53 class StreamStartEvent(Event): 54 pass 55 47 56 class StreamEndEvent(Event): 48 57 pass -
pyyaml/trunk/lib/yaml/parser.py
r116 r118 3 3 # 4 4 # We use the following production rules: 5 # stream ::= implicit_document? explicit_document* STREAM-END5 # stream ::= STREAM-START implicit_document? explicit_document* STREAM-END 6 6 # explicit_document ::= DIRECTIVE* DOCUMENT-START block_node? DOCUMENT-END? 7 7 # implicit_document ::= block_node DOCUMENT-END? … … 43 43 44 44 # FIRST sets: 45 # stream: FIRST(block_node) + { DIRECTIVE DOCUMENT-START }45 # stream: { STREAM-START } 46 46 # explicit_document: { DIRECTIVE DOCUMENT-START } 47 47 # implicit_document: FIRST(block_node) … … 127 127 128 128 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) 130 134 131 135 # Parse implicit document. … … 133 137 StreamEndToken): 134 138 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) 135 142 for event in self.parse_block_node(): 136 143 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) 137 150 138 151 # Parse explicit documents. 139 152 while not self.scanner.check(StreamEndToken): 153 token = self.scanner.peek() 154 start_mark = token.start_mark 140 155 self.process_directives() 141 156 if not self.scanner.check(DocumentStartToken): … … 145 160 self.scanner.peek().start_mark) 146 161 token = self.scanner.get() 162 end_mark = token.end_mark 163 yield DocumentStartEvent(start_mark, end_mark) 147 164 if self.scanner.check(DirectiveToken, 148 165 DocumentStartToken, DocumentEndToken, StreamEndToken): … … 151 168 for event in self.parse_block_node(): 152 169 yield event 170 token = self.scanner.peek() 171 start_mark = end_mark = token.start_mark 153 172 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) 155 176 156 177 # Parse end of stream. -
pyyaml/trunk/lib/yaml/scanner.py
r117 r118 1 1 2 2 # Scanner produces tokens of the following types: 3 # STREAM-START 4 # STREAM-END 3 5 # DIRECTIVE(name, value) 4 6 # DOCUMENT-START 5 7 # DOCUMENT-END 6 # STREAM-END7 8 # BLOCK-SEQUENCE-START 8 9 # BLOCK-MAPPING-START … … 69 70 self.tokens = [] 70 71 72 # Add the STREAM-START token. 73 self.fetch_stream_start() 74 71 75 # Number of tokens that were emitted through the `get_token` method. 72 76 self.tokens_taken = 0 … … 369 373 # Fetchers. 370 374 375 def fetch_stream_start(self): 376 # We always add STREAM-START as the first token and STREAM-END as the 377 # last token. 378 379 # Read the token. 380 mark = self.reader.get_mark() 381 382 # Add STREAM-END. 383 self.tokens.append(StreamStartToken(mark, mark)) 384 385 371 386 def fetch_stream_end(self): 372 387 … … 381 396 mark = self.reader.get_mark() 382 397 383 # Add END.398 # Add STREAM-END. 384 399 self.tokens.append(StreamEndToken(mark, mark)) 385 400 -
pyyaml/trunk/lib/yaml/tokens.py
r116 r118 28 28 class DocumentEndToken(Token): 29 29 id = '<document end>' 30 31 class StreamStartToken(Token): 32 id = '<stream start>' 30 33 31 34 class StreamEndToken(Token): -
pyyaml/trunk/tests/test_appliance.py
r54 r118 48 48 #print self.data[self.index:] 49 49 tokens = [] 50 tokens.append(StreamStartToken(None, None)) 50 51 while True: 51 52 self.find_token() … … 207 208 self.events = [] 208 209 209 # stream: document*END210 # stream: STREAM-START document* STREAM-END 210 211 def parse_stream(self): 212 self.consume_token(StreamStartToken) 213 self.events.append(StreamStartEvent(None, None)) 211 214 while not self.test_token(StreamEndToken): 212 215 if self.test_token(DirectiveToken, DocumentStartToken): … … 214 217 else: 215 218 raise Error("document is expected, got "+repr(self.tokens[self.index])) 219 self.consume_token(StreamEndToken) 216 220 self.events.append(StreamEndEvent(None, None)) 217 221 … … 222 226 self.consume_token(DirectiveToken) 223 227 self.consume_token(DocumentStartToken) 228 self.events.append(DocumentStartEvent(None, None)) 224 229 self.parse_node() 230 self.events.append(DocumentEndEvent(None, None)) 225 231 226 232 # node: ALIAS | ANCHOR? TAG? (SCALAR|sequence|mapping) -
pyyaml/trunk/tests/test_structure.py
r57 r118 13 13 node1 = [] 14 14 while not parser.check(StreamEndEvent): 15 node1.append(self._convert(parser)) 15 if not parser.check(StreamStartEvent, DocumentStartEvent, DocumentEndEvent): 16 node1.append(self._convert(parser)) 17 else: 18 parser.get() 16 19 parser.get() 17 20 if len(node1) == 1: -
pyyaml/trunk/tests/test_tokens.py
r51 r118 55 55 tokens1 = [] 56 56 for token in scanner: 57 if not isinstance(token, StreamEndToken):57 if not isinstance(token, (StreamStartToken, StreamEndToken)): 58 58 tokens1.append(token) 59 59 tokens1 = [self.replaces[t.__class__] for t in tokens1] … … 78 78 tokens = [] 79 79 for token in scanner: 80 if not isinstance(token, StreamEndToken):80 if not isinstance(token, (StreamStartToken, StreamEndToken)): 81 81 tokens.append(token.__class__.__name__) 82 82 except:
Note: See TracChangeset
for help on using the changeset viewer.
