コード例 #1
0
ファイル: interpreter.py プロジェクト: mberkanbicer/serval
 def _eval_definition(self, expr, env):
     define_variable(
         definition.definition_variable(expr),
         self._eval(definition.definition_value(expr), env),
         env
         )
     return Symbol('ok')
コード例 #2
0
ファイル: parser.py プロジェクト: mberkanbicer/serval
    def _abbreviation(self):
        self._match(tokens.QUOTE)

        if self._lookahead_type(0) == tokens.LPAREN:
            expr = self._list()
        else:
            expr = self._simple_datum()

        return Pair(Symbol('quote'), Pair(expr, EmptyList))
コード例 #3
0
ファイル: parser.py プロジェクト: mberkanbicer/serval
    def _simple_datum(self):
        token = self._lookahead_token(0)

        if token.type == tokens.NUMBER:
            expr = Number(int(token.text))

        elif token.type == tokens.BOOLEAN:
            expr = Boolean(True if token.text == '#t' else False)

        elif token.type == tokens.CHARACTER:
            expr = Character(token.text[2:])

        elif token.type == tokens.STRING:
            expr = String(token.text.strip('"'))

        elif token.type == tokens.ID:
            expr = Symbol(token.text)

        else:
            raise ParserException('No viable alternative')

        self._match(token.type)
        return expr
コード例 #4
0
def is_cond_else_clause(clause):
    return cond_predicate(clause) == Symbol('else')
コード例 #5
0
def is_cond(expr):
    return is_tagged_list(expr, Symbol('cond'))
コード例 #6
0
ファイル: sequence.py プロジェクト: mberkanbicer/serval
def make_begin(seq):
    return cons(Symbol('begin'), seq)
コード例 #7
0
def is_assignment(expr):
    return is_tagged_list(expr, Symbol('set!'))
コード例 #8
0
def is_primitive_procedure(expr):
    return is_tagged_list(expr, Symbol('primitive'))
コード例 #9
0
def primitive_procedure_values():
    return [Pair(Symbol('primitive'), Pair(proc, EmptyList))
            for _, proc in BUILTIN_PROCEDURES]
コード例 #10
0
def make_procedure(params, body, env):
    """Create a list"""
    return cons(Symbol('procedure'),
                cons(params, cons(body, cons(env, EmptyList))))
コード例 #11
0
def is_compound_procedure(expr):
    return is_tagged_list(expr, Symbol('procedure'))
コード例 #12
0
ファイル: definition.py プロジェクト: mberkanbicer/serval
def is_definition(expr):
    return is_tagged_list(expr, Symbol('define'))
コード例 #13
0
ファイル: binding.py プロジェクト: mberkanbicer/serval
def is_let_binding(expr):
    return is_tagged_list(expr, Symbol('let'))
コード例 #14
0
ファイル: quote.py プロジェクト: mberkanbicer/serval
def is_quoted(expr):
    return is_tagged_list(expr, Symbol('quote'))
コード例 #15
0
def is_lambda(expr):
    return is_tagged_list(expr, Symbol('lambda'))
コード例 #16
0
def is_if(expr):
    return is_tagged_list(expr, Symbol('if'))
コード例 #17
0
def make_lambda(params, body):
    return cons(Symbol('lambda'), cons(params, body))
コード例 #18
0
def make_if(predicate, consequent, alternative):
    return tolist(Symbol('if'), predicate, consequent, alternative)
コード例 #19
0
ファイル: util.py プロジェクト: mberkanbicer/serval
def is_load(expr):
    return is_tagged_list(expr, Symbol('load'))
コード例 #20
0
def is_or(expr):
    return is_tagged_list(expr, Symbol('or'))
コード例 #21
0
ファイル: interpreter.py プロジェクト: mberkanbicer/serval
 def _eval_assignment(self, expr, env):
     env.set_variable_value(
         assignment.assignment_variable(expr),
         self._eval(assignment.assignment_value(expr), env)
         )
     return Symbol('ok')
コード例 #22
0
ファイル: sequence.py プロジェクト: mberkanbicer/serval
def is_begin(expr):
    return is_tagged_list(expr, Symbol('begin'))