Exemple #1
0
    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'))