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.
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: []