Home | History | Annotate | Download | only in pyxelator

Lines Matching defs:Lexer

12 from lexer import Lexer
102 def parse(self,lexer,symbols):
105 #lexer.get_token()
106 if lexer.tok != ')':
107 if not lexer.tok:
108 self.parse_error(lexer)
109 #lexer.unget_token() # unget start of decl
110 while lexer.tok != ')':
112 node.parse(lexer,symbols)
114 if lexer.tok != ')' and lexer.tok != ',':
115 self.parse_error(lexer)
116 if lexer.tok == ',':
117 lexer.get_token()
118 lexer.get_token()
133 def parse(self,lexer,symbols):
134 lexer.get_token() # a number or ']'
140 while lexer.tok != ']':
141 #self.append( lexer.kind )
142 toks.append( lexer.tok )
143 lexer.get_token()
148 lexer.get_token() # read past the ']'
162 def parse(self,lexer,symbols):
165 if lexer.tok != '{':
166 tag = lexer.tok
168 self.parse_error(lexer ,"expected tag, got '%s'"%tag )
169 lexer.get_token()
175 if lexer.tok == '{':
177 lexer.get_token()
178 if lexer.tok != '}':
179 if not lexer.tok: self.parse_error(lexer)
180 while lexer.tok != '}':
182 node.parse(lexer,symbols)
185 lexer.get_token()
205 def parse(self,lexer,symbols):
207 if lexer.tok != '{':
208 tag = lexer.tok
210 self.parse_error(lexer ,"expected tag, got '%s'"%tag )
211 lexer.get_token()
217 if lexer.tok == '{':
218 lexer.get_token()
219 if lexer.tok != '}': # XX dopey control flow
220 if not lexer.tok: # XX dopey control flow
221 self.parse_error(lexer) # XX dopey control flow
222 while lexer.tok != '}': # XX dopey control flow
223 if lexer.kind is not None:
224 self.expected_error(lexer ,"identifier" )
225 ident = Identifier(lexer.tok)
227 self.parse_error(lexer,"%s already defined."%ident[0])
230 lexer.get_token()
231 if lexer.tok == '=':
232 lexer.get_token()
235 while lexer.tok!=',' and lexer.tok!='}':
236 lexer.get_token()
237 # if type( lexer.kind ) is not int:
238 # #self.parse_error(lexer ,"expected integer" )
240 # while lexer.tok!=',' and lexer.tok!='}':
241 # lexer.get_token()
244 # ident.append( lexer.kind )
245 # lexer.get_token()
246 if lexer.tok != '}':
247 if lexer.tok != ',':
248 self.expected_error(lexer,"}",",")
249 lexer.get_token() # ','
250 lexer.get_token()
263 def parse(self,lexer,symbols):
264 #Parser.parse_enter(self,lexer)
267 self.ident = self.parse_identifier(lexer,symbols,stack)
273 self.parse_declarator(lexer,symbols,stack)
274 #Parser.parse_leave(self,lexer)
276 def parse_identifier(self,lexer,symbols,stack):
280 if lexer.tok != ';':
281 while lexer.tok and lexer.kind is not None:
282 stack.append( (lexer.tok, lexer.kind) )
283 lexer.get_token()
284 if lexer.tok:
285 ident = Identifier( lexer.tok )
287 lexer.get_token()
292 def parse_declarator(self,lexer,symbols,stack,level=0):
296 if lexer.tok == '[':
297 while lexer.tok == '[':
299 node.parse(lexer,symbols)
301 if lexer.tok == '(':
302 self.parse_error(lexer ,"array of functions" )
303 elif lexer.tok == '(':
304 lexer.get_token()
306 node.parse(lexer,symbols)
308 if lexer.tok == '(':
309 self.parse_error(lexer ,"function returns a function" )
310 if lexer.tok == '[':
311 self.parse_error(lexer ,"function returns an array" )
316 self.consume(lexer,')')
317 self.parse_declarator(lexer,symbols,stack,level+1)
332 def parse_identifier(self,lexer,symbols,stack):
338 if lexer.tok == ';':
339 self.parse_error(lexer)
340 if lexer.tok == ')':
342 if lexer.tok == ',':
344 if lexer.tok == '[':
346 if lexer.kind is None:
348 ident = Identifier( lexer.tok )
349 lexer.get_token()
352 stack.append( (lexer.tok, lexer.kind) )
353 lexer.get_token()
366 def parse(self,lexer,symbols):
367 if lexer.tok != ':':
368 Declarator.parse(self,lexer,symbols)
369 if lexer.tok == ':':
370 lexer.get_token()
372 length = int(lexer.tok)
375 lexer.get_token()
395 def parse(self,lexer,symbols):
396 self.parse_spec(lexer,symbols)
399 def parse_spec(self,lexer,symbols):
401 while lexer.tok:
402 if isinstance( lexer.kind, TypeAlias ) or\
403 isinstance( lexer.kind, BasicType ):
405 self.parse_error(lexer ,"type already specified as %s"\
407 typespec=lexer.kind
408 self.append( lexer.kind )
409 lexer.get_token()
410 elif isinstance( lexer.kind, Qualifier ):
411 self.append( lexer.kind )
412 lexer.get_token()
413 elif isinstance( lexer.kind, StorageClass ):
414 self.append( lexer.kind )
415 lexer.get_token()
416 elif lexer.tok=='struct':
417 lexer.get_token()
418 self.parse_struct(lexer,symbols)
420 elif lexer.tok=='union':
421 lexer.get_token()
422 self.parse_union(lexer,symbols)
424 elif lexer.tok=='enum':
425 lexer.get_token()
426 self.parse_enum(lexer,symbols)
428 elif lexer.kind is None:
434 def parse_struct(self,lexer,symbols):
438 node.parse(lexer,symbols)
444 self.parse_error(lexer,"tag defined as wrong kind")
447 self.parse_error(lexer,"tag already defined as %s"%_node)
464 def parse_union(self,lexer,symbols):
468 node.parse(lexer,symbols)
474 self.parse_error(lexer,"tag %s defined as wrong kind"%repr(node.tag))
477 self.parse_error(lexer,"tag already defined as %s"%_node)
489 def parse_enum(self,lexer,symbols):
493 node.parse(lexer,symbols)
499 self.parse_error(lexer,"tag defined as wrong kind")
502 self.parse_error(lexer,"tag already defined as %s"%_node)
532 def parse_spec(self,lexer,symbols):
534 while lexer.tok:
535 if isinstance( lexer.kind, TypeAlias ) or\
536 isinstance( lexer.kind, BasicType ):
538 self.parse_error(lexer ,"type already specified as %s"\
540 typespec=lexer.kind
541 self.append( lexer.kind )
542 lexer.get_token()
543 elif isinstance( lexer.kind, Qualifier ):
544 self.append( lexer.kind )
545 lexer.get_token()
546 elif isinstance( lexer.kind, StorageClass ):
547 self.parse_error(lexer ,"'%s' cannot appear here"%lexer.tok )
548 elif lexer.tok=='struct':
549 lexer.get_token()
550 self.parse_struct(lexer,symbols)
552 elif lexer.tok=='union':
553 lexer.get_token()
554 self.parse_union(lexer,symbols)
556 elif lexer.tok=='enum':
557 lexer.get_token()
558 self.parse_enum(lexer,symbols)
560 elif lexer.kind is None:
573 def parse(self,lexer,symbols):
574 self.parse_error(lexer,"not implemented")
593 def parse(self,lexer,symbols):
594 if not lexer.tok:
596 Parser.parse_enter(self,lexer)
598 declspec.parse(lexer,symbols)
600 if lexer.tok == ';':
601 lexer.get_token()
604 self.parse_error(lexer,
605 "expected specifiers, got '%s'"%lexer.tok )
609 decl.parse(lexer,symbols)
612 self.parse_error(lexer,
613 "expected declarator, got '%s'"%lexer.tok )
628 self.parse_error(lexer,
633 #lexer.mktypedef( ident[0], self )
635 lexer.mktypedef( ident[0], tp )
638 if lexer.tok == '=':
640 lexer.get_token()
642 init.parse(lexer,symbols)
645 if lexer.tok == ';':
648 if lexer.tok == '{':
651 # "WARNING: function body found at line %s\n"%lexer.lno )
654 lexer.get_brace_token()
655 if lexer.tok == '}':
657 if lexer.tok == '{':
659 lexer.get_token()
660 Parser.parse_leave(self,lexer)
662 self.consume(lexer,',')
663 self.consume(lexer,';')
664 Parser.parse_leave(self,lexer)
675 def parse(self,lexer,symbols):
677 typespec.parse(lexer,symbols)
680 decl.parse(lexer,symbols)
686 self.parse_error(lexer,
695 def parse(self,lexer,symbols):
696 if not lexer.tok:
699 declspec.parse(lexer,symbols)
702 if lexer.tok == ';':
703 lexer.get_token()
706 self.parse_error(lexer,
707 "expected specifiers, got '%s'"%lexer.tok )
710 decl.parse(lexer,symbols)
712 self.parse_error(lexer,
713 "expected declarator, got '%s'"%lexer.tok )
719 self.parse_error(lexer ,
723 self.parse_error(lexer,"typedef in struct or union")
726 if lexer.tok == ';':
728 self.consume(lexer,',')
729 self.consume(lexer,';')
740 self.lexer = Lexer(s,verbose=verbose) #,host=__module__)
742 while self.lexer.tok:
744 node.parse(self.lexer,self.symbols)
745 #sys.stderr.write( "# line %s\n"%self.lexer.lno )
788 psyco.bind( Lexer.get_token )
813 node.parse( Lexer(cstr,True), Symbols() )