def program(self): self.eat(TokenType.PROGRAM) var_node = self.variable() prog_name = var_node.value self.eat(TokenType.SEMI) block_node = self.block() program_node = Program(prog_name, block_node) self.eat(TokenType.DOT) return program_node
function = SForward( 'function', lambda s, loc, toks: create_function(toks[0].name, toks[0].args, toks[1:]) ) simport = SForward( 'import', lambda s, loc, toks: create_import(toks[1]) ) function_header = SForward( 'function_header', lambda s, loc, toks: FunctionHeader(toks[1], toks[3:-1]) ) arguments = SForward('arguments') statement = SForward('statement') # .setFailAction( # syntax_error('Invalid statement') # ) statements = SForward('statements', listify) block_statement = SForward('block_statement') normal_statement = SForward('normal_statement') string = SForward('string') comment = SForward('comment') imports = SForward('imports', listify) functions = SForward('functions', listify) program = ( SForward('program', lambda s, loc, toks: Program(toks[0], toks[1])) .ignore(comment) ) # forloop.setFailAction(lambda loc: syntax_error(loc, 'Invalid for loop'))