ajlisp 0.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (88) hide show
  1. data/LICENSE +23 -0
  2. data/README.md +33 -0
  3. data/ajlisp.gemspec +20 -0
  4. data/lib/ajlisp.rb +128 -0
  5. data/lib/ajlisp/at_constant_atom.rb +30 -0
  6. data/lib/ajlisp/context.rb +27 -0
  7. data/lib/ajlisp/dot_verb_atom.rb +31 -0
  8. data/lib/ajlisp/file_source.rb +10 -0
  9. data/lib/ajlisp/fprimitive.rb +23 -0
  10. data/lib/ajlisp/fprimitive_closure.rb +48 -0
  11. data/lib/ajlisp/fprimitive_define.rb +30 -0
  12. data/lib/ajlisp/fprimitive_definef.rb +30 -0
  13. data/lib/ajlisp/fprimitive_definem.rb +30 -0
  14. data/lib/ajlisp/fprimitive_do.rb +25 -0
  15. data/lib/ajlisp/fprimitive_flambda.rb +21 -0
  16. data/lib/ajlisp/fprimitive_if.rb +34 -0
  17. data/lib/ajlisp/fprimitive_lambda.rb +21 -0
  18. data/lib/ajlisp/fprimitive_let.rb +38 -0
  19. data/lib/ajlisp/fprimitive_macro_closure.rb +13 -0
  20. data/lib/ajlisp/fprimitive_mlambda.rb +21 -0
  21. data/lib/ajlisp/fprimitive_quote.rb +19 -0
  22. data/lib/ajlisp/input_source.rb +37 -0
  23. data/lib/ajlisp/lexer.rb +132 -0
  24. data/lib/ajlisp/list.rb +106 -0
  25. data/lib/ajlisp/named_atom.rb +34 -0
  26. data/lib/ajlisp/nil_atom.rb +39 -0
  27. data/lib/ajlisp/parser.rb +80 -0
  28. data/lib/ajlisp/primitive.rb +19 -0
  29. data/lib/ajlisp/primitive_add.rb +29 -0
  30. data/lib/ajlisp/primitive_closure.rb +49 -0
  31. data/lib/ajlisp/primitive_comparisons.rb +84 -0
  32. data/lib/ajlisp/primitive_cons.rb +19 -0
  33. data/lib/ajlisp/primitive_divide.rb +25 -0
  34. data/lib/ajlisp/primitive_eval.rb +19 -0
  35. data/lib/ajlisp/primitive_first.rb +19 -0
  36. data/lib/ajlisp/primitive_list.rb +19 -0
  37. data/lib/ajlisp/primitive_load.rb +34 -0
  38. data/lib/ajlisp/primitive_multiply.rb +25 -0
  39. data/lib/ajlisp/primitive_predicates.rb +58 -0
  40. data/lib/ajlisp/primitive_rest.rb +19 -0
  41. data/lib/ajlisp/primitive_subtract.rb +25 -0
  42. data/lib/ajlisp/string_source.rb +28 -0
  43. data/lib/ajlisp/token.rb +23 -0
  44. data/lib/core.lsp +40 -0
  45. data/test/and.lsp +1 -0
  46. data/test/append.lsp +1 -0
  47. data/test/backquote.lsp +7 -0
  48. data/test/cond.lsp +1 -0
  49. data/test/define123.lsp +4 -0
  50. data/test/definem.lsp +1 -0
  51. data/test/dodefine123.lsp +5 -0
  52. data/test/mapcond.lsp +13 -0
  53. data/test/mapfirst.lsp +10 -0
  54. data/test/mycons.lsp +3 -0
  55. data/test/test.rb +42 -0
  56. data/test/test_at_constant_atom.rb +34 -0
  57. data/test/test_context.rb +37 -0
  58. data/test/test_dot_verb_atom.rb +29 -0
  59. data/test/test_evaluate.rb +289 -0
  60. data/test/test_evaluate_files.rb +136 -0
  61. data/test/test_file_source.rb +11 -0
  62. data/test/test_fprimitive_closure.rb +29 -0
  63. data/test/test_fprimitive_define.rb +65 -0
  64. data/test/test_fprimitive_definef.rb +20 -0
  65. data/test/test_fprimitive_definem.rb +20 -0
  66. data/test/test_fprimitive_do.rb +18 -0
  67. data/test/test_fprimitive_flambda.rb +15 -0
  68. data/test/test_fprimitive_if.rb +29 -0
  69. data/test/test_fprimitive_lambda.rb +15 -0
  70. data/test/test_fprimitive_let.rb +18 -0
  71. data/test/test_fprimitive_macro_closure.rb +17 -0
  72. data/test/test_fprimitive_mlambda.rb +12 -0
  73. data/test/test_fprimitive_quote.rb +35 -0
  74. data/test/test_lexer.rb +208 -0
  75. data/test/test_list.rb +102 -0
  76. data/test/test_load.rb +74 -0
  77. data/test/test_named_atom.rb +33 -0
  78. data/test/test_parser.rb +252 -0
  79. data/test/test_primitive_add.rb +26 -0
  80. data/test/test_primitive_closure.rb +29 -0
  81. data/test/test_primitive_cons.rb +39 -0
  82. data/test/test_primitive_eval.rb +13 -0
  83. data/test/test_primitive_first.rb +25 -0
  84. data/test/test_primitive_list.rb +27 -0
  85. data/test/test_primitive_rest.rb +29 -0
  86. data/test/test_string_source.rb +10 -0
  87. data/test/test_token.rb +14 -0
  88. 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
@@ -0,0 +1,10 @@
1
+
2
+ require 'ajlisp'
3
+ require 'test/unit'
4
+
5
+ class TestStringSource < Test::Unit::TestCase
6
+ def test_next_char
7
+ source = AjLisp::StringSource.new "a"
8
+ assert 'a', source.nextChar
9
+ end
10
+ end
@@ -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: []