本文整理汇总了Python中src.parser.parse函数的典型用法代码示例。如果您正苦于以下问题:Python parse函数的具体用法?Python parse怎么用?Python parse使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了parse函数的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Python代码示例。
示例1: test_calling_atom_raises_exception
def test_calling_atom_raises_exception():
"""A function call to a non-function should result in an error."""
with assert_raises_regexp(LispError, "not a function"):
evaluate(parse("(#t 'foo 'bar)"), Environment())
with assert_raises_regexp(LispError, "not a function"):
evaluate(parse("(42)"), Environment())
示例2: test_calling_with_wrong_number_of_arguments
def test_calling_with_wrong_number_of_arguments():
"""Functions should raise exceptions when called with wrong number of arguments."""
env = Environment()
evaluate(parse("(define fn (lambda (p1 p2) 'whatever))"), env)
error_msg = "wrong number of arguments, expected 2 got 3"
with assert_raises_regexp(LispError, error_msg):
evaluate(parse("(fn 1 2 3)"), env)
示例3: test_parse_exception_extra_paren
def test_parse_exception_extra_paren():
"""Another exception is raised if the expression is too large.
The parse function expects to receive only one single expression. Anything
more than this, should result in the proper exception."""
with assert_raises_regexp(LispError, 'Expected EOF'):
parse('(foo (bar x y)))')
示例4: test_parse_boolean
def test_parse_boolean():
"""Parsing single booleans.
Booleans are the special symbols #t and #f. In the ASTs they are represented
by Pythons True and False, respectively. """
assert_equals(True, parse('#t'))
assert_equals(False, parse('#f'))
示例5: test_lambda_arguments_are_lists
def test_lambda_arguments_are_lists():
"""The parameters of a `lambda` should be a list."""
closure = evaluate(parse("(lambda (x y) (+ x y))"), Environment())
assert_true(is_list(closure.params))
with assert_raises(LispError):
evaluate(parse("(lambda not-a-list (body of fn))"), Environment())
示例6: test_checking_whether_list_is_empty
def test_checking_whether_list_is_empty():
"""The `empty` form checks whether or not a list is empty."""
assert_equals(False, evaluate(parse("(empty '(1 2 3))"), Environment()))
assert_equals(False, evaluate(parse("(empty '(1))"), Environment()))
assert_equals(True, evaluate(parse("(empty '())"), Environment()))
assert_equals(True, evaluate(parse("(empty (tail '(1)))"), Environment()))
示例7: test_creating_longer_lists_with_only_cons
def test_creating_longer_lists_with_only_cons():
"""`cons` needs to evaluate it's arguments.
Like all the other special forms and functions in our language, `cons` is
call-by-value. This means that the arguments must be evaluated before we
create the list with their values."""
result = evaluate(parse("(cons 3 (cons (- 4 2) (cons 1 '())))"), Environment())
assert_equals(parse("(3 2 1)"), result)
示例8: test_parse_integer
def test_parse_integer():
"""Parsing single integer.
Integers are represented in the ASTs as Python ints.
Tip: String objects have a handy .isdigit() method.
"""
assert_equals(42, parse('42'))
assert_equals(1337, parse('1337'))
示例9: test_call_to_function_should_evaluate_arguments
def test_call_to_function_should_evaluate_arguments():
"""Call to function should evaluate all arguments.
When a function is applied, the arguments should be evaluated before being bound
to the parameter names."""
env = Environment()
closure = evaluate(parse("(lambda (a) (+ a 5))"), env)
ast = [closure, parse("(if #f 0 (+ 10 10))")]
assert_equals(25, evaluate(ast, env))
示例10: test_math_operators_only_work_on_numbers
def test_math_operators_only_work_on_numbers():
"""The math functions should only allow numbers as arguments."""
with assert_raises(LispError):
evaluate(parse("(+ 1 'foo)"), Environment())
with assert_raises(LispError):
evaluate(parse("(- 1 'foo)"), Environment())
with assert_raises(LispError):
evaluate(parse("(/ 1 'foo)"), Environment())
with assert_raises(LispError):
evaluate(parse("(mod 1 'foo)"), Environment())
示例11: test_creating_lists_by_quoting
def test_creating_lists_by_quoting():
"""One way to create lists is by quoting.
We have already implemented `quote` so this test should already be
passing.
The reason we need to use `quote` here is that otherwise the expression would
be seen as a call to the first element -- `1` in this case, which obviously isn't
even a function."""
assert_equals(parse("(1 2 3 #t)"),
evaluate(parse("'(1 2 3 #t)"), Environment()))
示例12: test_parse_list_of_symbols
def test_parse_list_of_symbols():
"""Parsing list of only symbols.
A list is represented by a number of elements surrounded by parens. Python lists
are used to represent lists as ASTs.
Tip: The useful helper function `find_matching_paren` is already provided in
`parse.py`.
"""
assert_equals(['foo', 'bar', 'baz'], parse('(foo bar baz)'))
assert_equals([], parse('()'))
示例13: test_calling_very_simple_function_in_environment
def test_calling_very_simple_function_in_environment():
"""A call to a symbol corresponds to a call to its value in the environment.
When a symbol is the first element of the AST list, it is resolved to its value in
the environment (which should be a function closure). An AST with the variables
replaced with its value should then be evaluated instead."""
env = Environment()
evaluate(parse("(define add (lambda (x y) (+ x y)))"), env)
assert_is_instance(env.lookup("add"), Closure)
result = evaluate(parse("(add 1 2)"), env)
assert_equals(3, result)
示例14: test_basic_if_statement
def test_basic_if_statement():
"""If statements are the basic control structures.
The `if` should first evaluate its first argument. If this evaluates to true, then
the second argument is evaluated and returned. Otherwise the third and last argument
is evaluated and returned instead."""
if_expression = parse("(if #t 42 1000)")
assert_equals(42, evaluate(if_expression, Environment()))
if_expression = parse("(if #f 42 1000)")
assert_equals(1000, evaluate(if_expression, Environment()))
if_expression = parse("(if #t #t #f)")
assert_equals(True, evaluate(if_expression, Environment()))
示例15: test_evaluating_eq_function
def test_evaluating_eq_function():
"""The `eq` form is used to check whether two expressions are the same atom."""
assert_equals(True, evaluate(["eq", 1, 1], Environment()))
assert_equals(False, evaluate(["eq", 1, 2], Environment()))
# From this point, the ASTs might sometimes be too long or cummbersome to
# write down explicitly, and we'll use `parse` to make them for us.
# Remember, if you need to have a look at exactly what is passed to `evaluate`,
# just add a print statement in the test (or in `evaluate`).
assert_equals(True, evaluate(parse("(eq 'foo 'foo)"), Environment()))
assert_equals(False, evaluate(parse("(eq 'foo 'bar)"), Environment()))
# Lists are never equal, because lists are not atoms
assert_equals(False, evaluate(parse("(eq '(1 2 3) '(1 2 3))"), Environment()))