ajlisp 0.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/LICENSE +23 -0
- data/README.md +33 -0
- data/ajlisp.gemspec +20 -0
- data/lib/ajlisp.rb +128 -0
- data/lib/ajlisp/at_constant_atom.rb +30 -0
- data/lib/ajlisp/context.rb +27 -0
- data/lib/ajlisp/dot_verb_atom.rb +31 -0
- data/lib/ajlisp/file_source.rb +10 -0
- data/lib/ajlisp/fprimitive.rb +23 -0
- data/lib/ajlisp/fprimitive_closure.rb +48 -0
- data/lib/ajlisp/fprimitive_define.rb +30 -0
- data/lib/ajlisp/fprimitive_definef.rb +30 -0
- data/lib/ajlisp/fprimitive_definem.rb +30 -0
- data/lib/ajlisp/fprimitive_do.rb +25 -0
- data/lib/ajlisp/fprimitive_flambda.rb +21 -0
- data/lib/ajlisp/fprimitive_if.rb +34 -0
- data/lib/ajlisp/fprimitive_lambda.rb +21 -0
- data/lib/ajlisp/fprimitive_let.rb +38 -0
- data/lib/ajlisp/fprimitive_macro_closure.rb +13 -0
- data/lib/ajlisp/fprimitive_mlambda.rb +21 -0
- data/lib/ajlisp/fprimitive_quote.rb +19 -0
- data/lib/ajlisp/input_source.rb +37 -0
- data/lib/ajlisp/lexer.rb +132 -0
- data/lib/ajlisp/list.rb +106 -0
- data/lib/ajlisp/named_atom.rb +34 -0
- data/lib/ajlisp/nil_atom.rb +39 -0
- data/lib/ajlisp/parser.rb +80 -0
- data/lib/ajlisp/primitive.rb +19 -0
- data/lib/ajlisp/primitive_add.rb +29 -0
- data/lib/ajlisp/primitive_closure.rb +49 -0
- data/lib/ajlisp/primitive_comparisons.rb +84 -0
- data/lib/ajlisp/primitive_cons.rb +19 -0
- data/lib/ajlisp/primitive_divide.rb +25 -0
- data/lib/ajlisp/primitive_eval.rb +19 -0
- data/lib/ajlisp/primitive_first.rb +19 -0
- data/lib/ajlisp/primitive_list.rb +19 -0
- data/lib/ajlisp/primitive_load.rb +34 -0
- data/lib/ajlisp/primitive_multiply.rb +25 -0
- data/lib/ajlisp/primitive_predicates.rb +58 -0
- data/lib/ajlisp/primitive_rest.rb +19 -0
- data/lib/ajlisp/primitive_subtract.rb +25 -0
- data/lib/ajlisp/string_source.rb +28 -0
- data/lib/ajlisp/token.rb +23 -0
- data/lib/core.lsp +40 -0
- data/test/and.lsp +1 -0
- data/test/append.lsp +1 -0
- data/test/backquote.lsp +7 -0
- data/test/cond.lsp +1 -0
- data/test/define123.lsp +4 -0
- data/test/definem.lsp +1 -0
- data/test/dodefine123.lsp +5 -0
- data/test/mapcond.lsp +13 -0
- data/test/mapfirst.lsp +10 -0
- data/test/mycons.lsp +3 -0
- data/test/test.rb +42 -0
- data/test/test_at_constant_atom.rb +34 -0
- data/test/test_context.rb +37 -0
- data/test/test_dot_verb_atom.rb +29 -0
- data/test/test_evaluate.rb +289 -0
- data/test/test_evaluate_files.rb +136 -0
- data/test/test_file_source.rb +11 -0
- data/test/test_fprimitive_closure.rb +29 -0
- data/test/test_fprimitive_define.rb +65 -0
- data/test/test_fprimitive_definef.rb +20 -0
- data/test/test_fprimitive_definem.rb +20 -0
- data/test/test_fprimitive_do.rb +18 -0
- data/test/test_fprimitive_flambda.rb +15 -0
- data/test/test_fprimitive_if.rb +29 -0
- data/test/test_fprimitive_lambda.rb +15 -0
- data/test/test_fprimitive_let.rb +18 -0
- data/test/test_fprimitive_macro_closure.rb +17 -0
- data/test/test_fprimitive_mlambda.rb +12 -0
- data/test/test_fprimitive_quote.rb +35 -0
- data/test/test_lexer.rb +208 -0
- data/test/test_list.rb +102 -0
- data/test/test_load.rb +74 -0
- data/test/test_named_atom.rb +33 -0
- data/test/test_parser.rb +252 -0
- data/test/test_primitive_add.rb +26 -0
- data/test/test_primitive_closure.rb +29 -0
- data/test/test_primitive_cons.rb +39 -0
- data/test/test_primitive_eval.rb +13 -0
- data/test/test_primitive_first.rb +25 -0
- data/test/test_primitive_list.rb +27 -0
- data/test/test_primitive_rest.rb +29 -0
- data/test/test_string_source.rb +10 -0
- data/test/test_token.rb +14 -0
- metadata +131 -0
@@ -0,0 +1,26 @@
|
|
1
|
+
|
2
|
+
require 'ajlisp'
|
3
|
+
require 'test/unit'
|
4
|
+
|
5
|
+
class TestPrimitiveAdd < Test::Unit::TestCase
|
6
|
+
def test_simple_apply
|
7
|
+
add = AjLisp::PrimitiveAdd.instance
|
8
|
+
result = add.apply(nil, [1, 2])
|
9
|
+
assert result.is_a? Fixnum
|
10
|
+
assert_equal 3, result
|
11
|
+
end
|
12
|
+
|
13
|
+
def test_simple_to_one_number
|
14
|
+
add = AjLisp::PrimitiveAdd.instance
|
15
|
+
result = add.apply(nil, [1])
|
16
|
+
assert result.is_a? Fixnum
|
17
|
+
assert_equal 1, result
|
18
|
+
end
|
19
|
+
|
20
|
+
def test_simple_to_no_number
|
21
|
+
add = AjLisp::PrimitiveAdd.instance
|
22
|
+
result = add.apply(nil, [])
|
23
|
+
assert result.is_a? Fixnum
|
24
|
+
assert_equal 0, result
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
require 'ajlisp'
|
2
|
+
require 'test/unit'
|
3
|
+
|
4
|
+
class TestPrimitiveClosure < Test::Unit::TestCase
|
5
|
+
def test_new_with_no_context
|
6
|
+
arguments = AjLisp::List.make [ :a, :b ]
|
7
|
+
body = AjLisp::List.make [[ :cons, :a, :b ]]
|
8
|
+
closure = AjLisp::PrimitiveClosure.new arguments, body
|
9
|
+
assert_equal arguments, closure.arguments
|
10
|
+
assert_equal body, closure.body
|
11
|
+
assert_nil closure.context
|
12
|
+
end
|
13
|
+
|
14
|
+
def test_evaluate_simple_body
|
15
|
+
arguments = AjLisp::List.make [ :a, :b ]
|
16
|
+
body = [ AjLisp::List.make([ :cons, :a, :b ])]
|
17
|
+
closure = AjLisp::PrimitiveClosure.new arguments, body
|
18
|
+
list = AjLisp::List.make [closure, "a", [:quote, [:b, :c]]]
|
19
|
+
|
20
|
+
result = closure.evaluate(AjLisp::context, list)
|
21
|
+
|
22
|
+
assert_not_nil result
|
23
|
+
assert result.is_a? AjLisp::List
|
24
|
+
assert_equal "a", result.first
|
25
|
+
assert_equal :b, result.rest.first.name
|
26
|
+
assert_equal :c, result.rest.rest.first.name
|
27
|
+
assert_nil result.rest.rest.rest
|
28
|
+
end
|
29
|
+
end
|
@@ -0,0 +1,39 @@
|
|
1
|
+
|
2
|
+
require 'ajlisp'
|
3
|
+
require 'test/unit'
|
4
|
+
|
5
|
+
class TestPrimitiveCons < Test::Unit::TestCase
|
6
|
+
def test_simple_apply
|
7
|
+
cons = AjLisp::PrimitiveCons.instance
|
8
|
+
result = cons.apply(nil, ["a", nil])
|
9
|
+
assert result.is_a? AjLisp::List
|
10
|
+
assert_equal "a", result.first
|
11
|
+
assert_nil result.rest
|
12
|
+
end
|
13
|
+
|
14
|
+
def test_apply
|
15
|
+
list = AjLisp::List.new "b"
|
16
|
+
cons = AjLisp::PrimitiveCons.instance
|
17
|
+
result = cons.apply(nil, ["a", list])
|
18
|
+
assert result.is_a? AjLisp::List
|
19
|
+
assert_equal "a", result.first
|
20
|
+
assert_equal "b", result.rest.first
|
21
|
+
assert_nil result.rest.rest
|
22
|
+
end
|
23
|
+
|
24
|
+
def test_simple_evaluate
|
25
|
+
form = AjLisp::List.new(AjLisp::PrimitiveCons.instance, AjLisp::List.new("a"))
|
26
|
+
result = form.evaluate(nil)
|
27
|
+
assert result.is_a? AjLisp::List
|
28
|
+
assert_equal "a", result.first
|
29
|
+
assert_nil result.rest
|
30
|
+
end
|
31
|
+
|
32
|
+
def test_simple_evaluate_using_name
|
33
|
+
form = AjLisp::List.new(AjLisp::NamedAtom.new("cons"), AjLisp::List.new("a"))
|
34
|
+
result = form.evaluate(AjLisp::context)
|
35
|
+
assert result.is_a? AjLisp::List
|
36
|
+
assert_equal "a", result.first
|
37
|
+
assert_nil result.rest
|
38
|
+
end
|
39
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
|
2
|
+
require 'ajlisp'
|
3
|
+
require 'test/unit'
|
4
|
+
|
5
|
+
class TestPrimitiveEval < Test::Unit::TestCase
|
6
|
+
def test_simple_apply
|
7
|
+
eval = AjLisp::PrimitiveEval.instance
|
8
|
+
add = AjLisp::PrimitiveAdd.instance
|
9
|
+
result = eval.apply(nil, [AjLisp::List.make([add, 1, 2])])
|
10
|
+
assert result.is_a? Fixnum
|
11
|
+
assert_equal 3, result
|
12
|
+
end
|
13
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
|
2
|
+
require 'ajlisp'
|
3
|
+
require 'test/unit'
|
4
|
+
|
5
|
+
class TestPrimitiveFirst < Test::Unit::TestCase
|
6
|
+
def test_simple_apply
|
7
|
+
list = AjLisp::List.new("a")
|
8
|
+
first = AjLisp::PrimitiveFirst.instance
|
9
|
+
assert_equal("a", first.apply(nil, [list]))
|
10
|
+
end
|
11
|
+
|
12
|
+
def test_simple_evaluate
|
13
|
+
quote = AjLisp::List.make [AjLisp::FPrimitiveQuote.instance, ["a"]]
|
14
|
+
form = AjLisp::List.make [AjLisp::PrimitiveFirst.instance, quote]
|
15
|
+
result = form.evaluate(nil)
|
16
|
+
assert_equal("a", result)
|
17
|
+
end
|
18
|
+
|
19
|
+
def test_simple_evaluate_with_name
|
20
|
+
quote = AjLisp::List.make [AjLisp::FPrimitiveQuote.instance, ["a"]]
|
21
|
+
form = AjLisp::List.make [AjLisp::NamedAtom.new("first"), quote]
|
22
|
+
result = form.evaluate(AjLisp::context)
|
23
|
+
assert_equal("a", result)
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
|
2
|
+
require 'ajlisp'
|
3
|
+
require 'test/unit'
|
4
|
+
|
5
|
+
module AjLisp
|
6
|
+
|
7
|
+
class TestPrimitiveList < Test::Unit::TestCase
|
8
|
+
def test_simple_apply
|
9
|
+
list = PrimitiveList.instance
|
10
|
+
result = list.apply(nil, ["a", "b"])
|
11
|
+
assert result.is_a? List
|
12
|
+
assert_equal "a", result.first
|
13
|
+
assert_equal "b", result.rest.first
|
14
|
+
assert_nil result.rest.rest
|
15
|
+
end
|
16
|
+
|
17
|
+
def test_apply
|
18
|
+
list = PrimitiveList.instance
|
19
|
+
result = list.apply(nil, ["a", List.make(["b"])])
|
20
|
+
assert result.is_a? List
|
21
|
+
assert_equal "a", result.first
|
22
|
+
assert_equal "b", result.rest.first.first
|
23
|
+
assert_nil result.rest.rest
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
|
2
|
+
require 'ajlisp'
|
3
|
+
require 'test/unit'
|
4
|
+
|
5
|
+
class TestPrimitiveRest < Test::Unit::TestCase
|
6
|
+
def test_simple_apply
|
7
|
+
list = AjLisp::List.new("a", AjLisp::List.new("b"))
|
8
|
+
rest = AjLisp::PrimitiveRest.instance
|
9
|
+
assert_equal("b", rest.apply(nil, [list]).first)
|
10
|
+
end
|
11
|
+
|
12
|
+
def test_simple_evaluate
|
13
|
+
list = AjLisp::List.make [AjLisp::FPrimitiveQuote.instance, ["a", "b"]]
|
14
|
+
form = AjLisp::List.make [AjLisp::PrimitiveRest.instance, list]
|
15
|
+
result = form.evaluate(nil)
|
16
|
+
assert result.is_a? AjLisp::List
|
17
|
+
assert_equal "b", result.first
|
18
|
+
assert_nil result.rest
|
19
|
+
end
|
20
|
+
|
21
|
+
def test_simple_evaluate_using_name
|
22
|
+
list = AjLisp::List.make [AjLisp::FPrimitiveQuote.instance, ["a", "b"]]
|
23
|
+
form = AjLisp::List.make [AjLisp::NamedAtom.new("rest"), list]
|
24
|
+
result = form.evaluate(AjLisp::context)
|
25
|
+
assert result.is_a? AjLisp::List
|
26
|
+
assert_equal "b", result.first
|
27
|
+
assert_nil result.rest
|
28
|
+
end
|
29
|
+
end
|
data/test/test_token.rb
ADDED
@@ -0,0 +1,14 @@
|
|
1
|
+
require 'ajlisp'
|
2
|
+
require 'test/unit'
|
3
|
+
|
4
|
+
module AjLisp
|
5
|
+
|
6
|
+
class TestToken < Test::Unit::TestCase
|
7
|
+
def test_create_token
|
8
|
+
token = Token.new "atom", TokenType::ATOM
|
9
|
+
assert_equal "atom", token.value
|
10
|
+
assert_equal TokenType::ATOM, token.type
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
end
|
metadata
ADDED
@@ -0,0 +1,131 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: ajlisp
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.0
|
5
|
+
prerelease:
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- Angel 'Java' Lopez
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2013-03-09 00:00:00.000000000 Z
|
13
|
+
dependencies: []
|
14
|
+
description: Lisp interpreter that can access and invoke Ruby libraries and classes
|
15
|
+
email: webmaster@ajlopez.com
|
16
|
+
executables: []
|
17
|
+
extensions: []
|
18
|
+
extra_rdoc_files: []
|
19
|
+
files:
|
20
|
+
- LICENSE
|
21
|
+
- README.md
|
22
|
+
- lib/ajlisp/at_constant_atom.rb
|
23
|
+
- lib/ajlisp/context.rb
|
24
|
+
- lib/ajlisp/dot_verb_atom.rb
|
25
|
+
- lib/ajlisp/file_source.rb
|
26
|
+
- lib/ajlisp/fprimitive.rb
|
27
|
+
- lib/ajlisp/fprimitive_closure.rb
|
28
|
+
- lib/ajlisp/fprimitive_define.rb
|
29
|
+
- lib/ajlisp/fprimitive_definef.rb
|
30
|
+
- lib/ajlisp/fprimitive_definem.rb
|
31
|
+
- lib/ajlisp/fprimitive_do.rb
|
32
|
+
- lib/ajlisp/fprimitive_flambda.rb
|
33
|
+
- lib/ajlisp/fprimitive_if.rb
|
34
|
+
- lib/ajlisp/fprimitive_lambda.rb
|
35
|
+
- lib/ajlisp/fprimitive_let.rb
|
36
|
+
- lib/ajlisp/fprimitive_macro_closure.rb
|
37
|
+
- lib/ajlisp/fprimitive_mlambda.rb
|
38
|
+
- lib/ajlisp/fprimitive_quote.rb
|
39
|
+
- lib/ajlisp/input_source.rb
|
40
|
+
- lib/ajlisp/lexer.rb
|
41
|
+
- lib/ajlisp/list.rb
|
42
|
+
- lib/ajlisp/named_atom.rb
|
43
|
+
- lib/ajlisp/nil_atom.rb
|
44
|
+
- lib/ajlisp/parser.rb
|
45
|
+
- lib/ajlisp/primitive.rb
|
46
|
+
- lib/ajlisp/primitive_add.rb
|
47
|
+
- lib/ajlisp/primitive_closure.rb
|
48
|
+
- lib/ajlisp/primitive_comparisons.rb
|
49
|
+
- lib/ajlisp/primitive_cons.rb
|
50
|
+
- lib/ajlisp/primitive_divide.rb
|
51
|
+
- lib/ajlisp/primitive_eval.rb
|
52
|
+
- lib/ajlisp/primitive_first.rb
|
53
|
+
- lib/ajlisp/primitive_list.rb
|
54
|
+
- lib/ajlisp/primitive_load.rb
|
55
|
+
- lib/ajlisp/primitive_multiply.rb
|
56
|
+
- lib/ajlisp/primitive_predicates.rb
|
57
|
+
- lib/ajlisp/primitive_rest.rb
|
58
|
+
- lib/ajlisp/primitive_subtract.rb
|
59
|
+
- lib/ajlisp/string_source.rb
|
60
|
+
- lib/ajlisp/token.rb
|
61
|
+
- lib/ajlisp.rb
|
62
|
+
- lib/core.lsp
|
63
|
+
- ajlisp.gemspec
|
64
|
+
- test/and.lsp
|
65
|
+
- test/append.lsp
|
66
|
+
- test/backquote.lsp
|
67
|
+
- test/cond.lsp
|
68
|
+
- test/define123.lsp
|
69
|
+
- test/definem.lsp
|
70
|
+
- test/dodefine123.lsp
|
71
|
+
- test/mapcond.lsp
|
72
|
+
- test/mapfirst.lsp
|
73
|
+
- test/mycons.lsp
|
74
|
+
- test/test.rb
|
75
|
+
- test/test_at_constant_atom.rb
|
76
|
+
- test/test_context.rb
|
77
|
+
- test/test_dot_verb_atom.rb
|
78
|
+
- test/test_evaluate.rb
|
79
|
+
- test/test_evaluate_files.rb
|
80
|
+
- test/test_file_source.rb
|
81
|
+
- test/test_fprimitive_closure.rb
|
82
|
+
- test/test_fprimitive_define.rb
|
83
|
+
- test/test_fprimitive_definef.rb
|
84
|
+
- test/test_fprimitive_definem.rb
|
85
|
+
- test/test_fprimitive_do.rb
|
86
|
+
- test/test_fprimitive_flambda.rb
|
87
|
+
- test/test_fprimitive_if.rb
|
88
|
+
- test/test_fprimitive_lambda.rb
|
89
|
+
- test/test_fprimitive_let.rb
|
90
|
+
- test/test_fprimitive_macro_closure.rb
|
91
|
+
- test/test_fprimitive_mlambda.rb
|
92
|
+
- test/test_fprimitive_quote.rb
|
93
|
+
- test/test_lexer.rb
|
94
|
+
- test/test_list.rb
|
95
|
+
- test/test_load.rb
|
96
|
+
- test/test_named_atom.rb
|
97
|
+
- test/test_parser.rb
|
98
|
+
- test/test_primitive_add.rb
|
99
|
+
- test/test_primitive_closure.rb
|
100
|
+
- test/test_primitive_cons.rb
|
101
|
+
- test/test_primitive_eval.rb
|
102
|
+
- test/test_primitive_first.rb
|
103
|
+
- test/test_primitive_list.rb
|
104
|
+
- test/test_primitive_rest.rb
|
105
|
+
- test/test_string_source.rb
|
106
|
+
- test/test_token.rb
|
107
|
+
homepage: http://github.com/ajlopez/AjLispRuby
|
108
|
+
licenses: []
|
109
|
+
post_install_message:
|
110
|
+
rdoc_options: []
|
111
|
+
require_paths:
|
112
|
+
- lib
|
113
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
114
|
+
none: false
|
115
|
+
requirements:
|
116
|
+
- - ! '>='
|
117
|
+
- !ruby/object:Gem::Version
|
118
|
+
version: '0'
|
119
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
120
|
+
none: false
|
121
|
+
requirements:
|
122
|
+
- - ! '>='
|
123
|
+
- !ruby/object:Gem::Version
|
124
|
+
version: '0'
|
125
|
+
requirements: []
|
126
|
+
rubyforge_project:
|
127
|
+
rubygems_version: 1.8.11
|
128
|
+
signing_key:
|
129
|
+
specification_version: 3
|
130
|
+
summary: AjLisp Interpreter
|
131
|
+
test_files: []
|