babel_bridge 0.5.1 → 0.5.3

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 (40) hide show
  1. data/CHANGE_LOG +165 -0
  2. data/Gemfile +4 -0
  3. data/Guardfile +7 -0
  4. data/LICENCE +24 -0
  5. data/README.md +244 -0
  6. data/Rakefile +8 -2
  7. data/TODO +100 -0
  8. data/babel_bridge.gemspec +11 -3
  9. data/examples/json/json_parser.rb +23 -0
  10. data/examples/json/json_parser2.rb +37 -0
  11. data/lib/babel_bridge.rb +3 -2
  12. data/lib/{nodes.rb → babel_bridge/nodes.rb} +0 -0
  13. data/lib/{nodes → babel_bridge/nodes}/empty_node.rb +0 -0
  14. data/lib/{nodes → babel_bridge/nodes}/node.rb +1 -1
  15. data/lib/{nodes → babel_bridge/nodes}/non_terminal_node.rb +0 -8
  16. data/lib/{nodes → babel_bridge/nodes}/root_node.rb +0 -0
  17. data/lib/{nodes → babel_bridge/nodes}/rule_node.rb +0 -0
  18. data/lib/{nodes → babel_bridge/nodes}/terminal_node.rb +0 -0
  19. data/lib/{parser.rb → babel_bridge/parser.rb} +7 -14
  20. data/lib/{pattern_element.rb → babel_bridge/pattern_element.rb} +27 -25
  21. data/lib/babel_bridge/pattern_element_hash.rb +22 -0
  22. data/lib/{rule.rb → babel_bridge/rule.rb} +0 -0
  23. data/lib/{rule_variant.rb → babel_bridge/rule_variant.rb} +0 -4
  24. data/lib/{shell.rb → babel_bridge/shell.rb} +0 -0
  25. data/lib/{string.rb → babel_bridge/string.rb} +0 -0
  26. data/lib/{tools.rb → babel_bridge/tools.rb} +0 -0
  27. data/lib/babel_bridge/version.rb +3 -0
  28. data/spec/advanced_parsers_spec.rb +1 -0
  29. data/spec/basic_parsing_spec.rb +43 -0
  30. data/spec/bb_spec.rb +19 -0
  31. data/spec/compound_patterns_spec.rb +61 -0
  32. data/spec/node_spec.rb +3 -3
  33. data/spec/pattern_generators_spec.rb +4 -4
  34. data/spec/spec_helper.rb +3 -0
  35. metadata +115 -33
  36. data/README +0 -144
  37. data/examples/turing/examples.turing +0 -33
  38. data/examples/turing/notes.rb +0 -111
  39. data/examples/turing/turing_demo.rb +0 -71
  40. data/lib/version.rb +0 -4
@@ -1,33 +0,0 @@
1
- # this language doesn't support comments, should copy-paste the examples between
2
- # the comments
3
-
4
- # calculate 2^[0]
5
- [0]=10;[1]=1;while [0]>0 do [0]=[0]-1;[1]=[1]*2 end;[1]
6
-
7
- # return the [0]th number in the fibonancci sequence:
8
- # [0] == fib number to output
9
- # [1] == current fib number
10
- # [2] == fib[[1]]
11
- # [3] == fib[[1]-1]
12
- # [4] == temp
13
- [0]=5;[1]=2;[2]=[3]=1;while [1]<[0] do [4]=[2]+[3];[2]=[3];[3]=[4];[1]=[1]+1 end;[3]
14
-
15
- # simulate a turing machine
16
- # [0] == current state
17
- # [1] == head position
18
- # [2] == number of symbols this machine recognizes
19
- # [3] == current state + read value offset
20
- # [state*[2]*3+10] == write at the current head position(nil or any number)
21
- # [state*[2]*3+11] == move head amount (-1, 0, 1)
22
- # [state*[2]*3+12] == next-state (states starting from 0)
23
- # [10000+] == tape - pick a large enough constant that the turing machine doesn't corrupt your states
24
- # -1 is the stop-state
25
- # Assumes you initalized your turing program for all your states.
26
- [0]=-1;
27
- [1]=10000;
28
- while [0]>=0 do
29
- [3] = 10 + ([0]*[2]+[[1]]) * 3;
30
- [[1]] = [[3]];
31
- [1] = [1] + [[3]+1];
32
- [0] = [[3]+2];
33
- end
@@ -1,111 +0,0 @@
1
- turing0: #babel-bridge setup
2
- turing1: #introducing rules -> show interactive shell in action
3
- rule :int, /[-]?[0-9]+/
4
-
5
- turing2: #the "add" rule (with 2 variants to support recursive matching)
6
- rule :add, :int, "+", :add
7
- rule :add, :int
8
-
9
- turing3: #add evaluate methods
10
- rule :add, :int, "+", :add do
11
- def evaluate
12
- int.evaluate + add.evaluate
13
- end
14
- end
15
- rule :add, :int
16
-
17
- rule :int, /[-]?[0-9]+/ do
18
- def evaluate
19
- to_s.to_i
20
- end
21
- end
22
-
23
- turing4: #multiple operators, but "3*10+2" or "2+10*3" breaks!
24
- # add :operator rule, update evaluate
25
- rule :add, :int, /[-+\/*]/, :add do
26
- def evaluate
27
- int.evaluate.send match[1].to_s.to_sym, add.evaluate
28
- end
29
- end
30
-
31
- turing5: # binary_operators_rule
32
- # replace all but the int rule with:
33
- binary_operators_rule :statement, :int, [[:/, :*], [:+, :-]] do
34
- def evaluate
35
- left.evaluate.send operator, right.evaluate
36
- end
37
- end
38
-
39
- turing6: # add parenthesis
40
- # rename :int to :operand
41
- rule :operand, "(", :statement, ")"
42
-
43
- turing7: # show "5 + 2" fails -> ignore_whitespace
44
- ignore_whitespace
45
-
46
- turing8: # add comparators
47
- binary_operators_rule :statement, :operand, [[:/, :*], [:+, :-],
48
- [:<, :<=, :>, :>=, :==]] do
49
- def evaluate
50
- case operator
51
- when :<, :<=, :>, :>=, :==
52
- (left.evaluate.send operator, right.evaluate) ? 1 : nil
53
- else
54
- left.evaluate.send operator, right.evaluate
55
- end
56
- end
57
- end
58
-
59
- turing9: # add if
60
- rule :statement, "if", :statement, "then", :statement, :else_clause?, "end" do
61
- def evaluate
62
- if matches[1].evaluate
63
- matches[3].evaluate
64
- else
65
- else_clause.evaluate if else_clause
66
- end
67
- end
68
- end
69
- rule :else_clause, "else", :statement
70
-
71
- turing10: #add store
72
-
73
- def store
74
- @store||=[]
75
- end
76
-
77
- rule :operand, "[", :statement, "]", "=", :statement do
78
- def evaluate
79
- parser.store[statement[0].evaluate] = statement[1].evaluate
80
- end
81
- end
82
-
83
- rule :operand, "[", :statement, "]" do
84
- def evaluate
85
- parser.store[statement.evaluate]
86
- end
87
- end
88
-
89
- turing11: #statements
90
- # update "if" bodies to have statements
91
-
92
- rule :statements, many(:statement,";"), match?(";") do
93
- def evaluate
94
- ret = nil
95
- statement.each do |s|
96
- ret = s.evaluate
97
- end
98
- ret
99
- end
100
- end
101
-
102
- turing12: # while
103
-
104
- rule :statement, "while", :statement, "do", :statements, "end" do
105
- def evaluate
106
- while statement.evaluate
107
- statements.evaluate
108
- end
109
- end
110
- end
111
-
@@ -1,71 +0,0 @@
1
- require "babel_bridge"
2
-
3
- class TuringParser < BabelBridge::Parser
4
- ignore_whitespace
5
-
6
- def store
7
- @store||=[]
8
- end
9
-
10
- rule :statements, many(:statement,";"), match?(";") do
11
- def evaluate
12
- ret = nil
13
- statement.each do |s|
14
- ret = s.evaluate
15
- end
16
- ret
17
- end
18
- end
19
-
20
- rule :statement, "if", :statement, "then", :statements, :else_clause?, "end" do
21
- def evaluate
22
- if matches[1].evaluate
23
- matches[3].evaluate
24
- else
25
- else_clause.evaluate if else_clause
26
- end
27
- end
28
- end
29
- rule :else_clause, "else", :statements
30
-
31
- rule :statement, "while", :statement, "do", :statements, "end" do
32
- def evaluate
33
- while statement.evaluate
34
- statements.evaluate
35
- end
36
- end
37
- end
38
-
39
- binary_operators_rule :statement, :operand, [[:/, :*], [:+, :-], [:<, :<=, :>, :>=, :==]] do
40
- def evaluate
41
- res = left.evaluate.send operator, right.evaluate
42
- case operator
43
- when :<, :<=, :>, :>=, :==
44
- res ? 1 : nil
45
- else
46
- res
47
- end
48
- end
49
- end
50
-
51
- rule :operand, "[", :statement, "]", "=", :statement do
52
- def evaluate
53
- parser.store[statement[0].evaluate] = statement[1].evaluate
54
- end
55
- end
56
-
57
- rule :operand, "[", :statement, "]" do
58
- def evaluate
59
- parser.store[statement.evaluate]
60
- end
61
- end
62
-
63
- rule :operand, "(", :statement, ")"
64
- rule :operand, /[-]?[0-9]+/ do
65
- def evaluate
66
- to_s.to_i
67
- end
68
- end
69
- end
70
-
71
- BabelBridge::Shell.new(TuringParser.new).start
data/lib/version.rb DELETED
@@ -1,4 +0,0 @@
1
- module BabelBridge
2
- # last release: 0.4.1
3
- VERSION = "0.5.1"
4
- end