code-ruby 0.5.6 → 0.6.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 (218) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +1 -4
  3. data/Gemfile.lock +10 -22
  4. data/code-ruby.gemspec +4 -3
  5. data/lib/code/error.rb +16 -5
  6. data/lib/code/node/base_10.rb +4 -2
  7. data/lib/code/node/base_16.rb +3 -1
  8. data/lib/code/node/base_2.rb +3 -1
  9. data/lib/code/node/base_8.rb +3 -1
  10. data/lib/code/node/boolean.rb +4 -2
  11. data/lib/code/node/call.rb +35 -12
  12. data/lib/code/node/call_argument.rb +16 -5
  13. data/lib/code/node/code.rb +5 -4
  14. data/lib/code/node/decimal.rb +2 -0
  15. data/lib/code/node/{dictionnary.rb → dictionary.rb} +14 -5
  16. data/lib/code/node/function.rb +7 -4
  17. data/lib/code/node/function_parameter.rb +3 -1
  18. data/lib/code/node/if.rb +5 -3
  19. data/lib/code/node/left_operation.rb +63 -0
  20. data/lib/code/node/list.rb +2 -0
  21. data/lib/code/node/negation.rb +2 -0
  22. data/lib/code/node/not.rb +2 -0
  23. data/lib/code/node/nothing.rb +3 -1
  24. data/lib/code/node/number.rb +2 -0
  25. data/lib/code/node/right_operation.rb +70 -0
  26. data/lib/code/node/splat.rb +2 -0
  27. data/lib/code/node/square_bracket.rb +37 -0
  28. data/lib/code/node/statement.rb +13 -5
  29. data/lib/code/node/string.rb +3 -1
  30. data/lib/code/node/ternary.rb +5 -3
  31. data/lib/code/node/unary_minus.rb +2 -0
  32. data/lib/code/node/while.rb +6 -4
  33. data/lib/code/node.rb +11 -5
  34. data/lib/code/object/argument.rb +13 -7
  35. data/lib/code/object/boolean.rb +43 -5
  36. data/lib/code/object/class.rb +17 -0
  37. data/lib/code/object/context.rb +36 -0
  38. data/lib/code/object/decimal.rb +252 -100
  39. data/lib/code/object/dictionary.rb +641 -0
  40. data/lib/code/object/function.rb +54 -27
  41. data/lib/code/object/global.rb +65 -19
  42. data/lib/code/object/identifier_list.rb +47 -0
  43. data/lib/code/object/integer.rb +320 -137
  44. data/lib/code/object/list.rb +140 -138
  45. data/lib/code/object/nothing.rb +10 -4
  46. data/lib/code/object/number.rb +6 -1
  47. data/lib/code/object/range.rb +85 -88
  48. data/lib/code/object/ruby_function.rb +11 -6
  49. data/lib/code/object/string.rb +51 -48
  50. data/lib/code/object.rb +117 -139
  51. data/lib/code/parser/addition.rb +4 -2
  52. data/lib/code/parser/and_operator.rb +4 -2
  53. data/lib/code/parser/bitwise_and.rb +4 -2
  54. data/lib/code/parser/bitwise_or.rb +4 -2
  55. data/lib/code/parser/boolean.rb +3 -1
  56. data/lib/code/parser/call.rb +17 -11
  57. data/lib/code/parser/chained_call.rb +10 -22
  58. data/lib/code/parser/class.rb +9 -6
  59. data/lib/code/parser/code.rb +6 -4
  60. data/lib/code/parser/{dictionnary.rb → dictionary.rb} +16 -13
  61. data/lib/code/parser/equal.rb +9 -36
  62. data/lib/code/parser/equality.rb +4 -2
  63. data/lib/code/parser/function.rb +24 -9
  64. data/lib/code/parser/greater.rb +6 -3
  65. data/lib/code/parser/group.rb +4 -2
  66. data/lib/code/parser/if.rb +6 -4
  67. data/lib/code/parser/if_modifier.rb +5 -25
  68. data/lib/code/parser/left_operation.rb +40 -0
  69. data/lib/code/parser/list.rb +6 -5
  70. data/lib/code/parser/multiplication.rb +4 -2
  71. data/lib/code/parser/name.rb +19 -4
  72. data/lib/code/parser/negation.rb +4 -2
  73. data/lib/code/parser/not_keyword.rb +5 -3
  74. data/lib/code/parser/nothing.rb +3 -10
  75. data/lib/code/parser/number.rb +4 -2
  76. data/lib/code/parser/or_keyword.rb +4 -2
  77. data/lib/code/parser/or_operator.rb +4 -2
  78. data/lib/code/parser/power.rb +4 -28
  79. data/lib/code/parser/range.rb +4 -2
  80. data/lib/code/parser/rescue.rb +6 -26
  81. data/lib/code/parser/right_operation.rb +40 -0
  82. data/lib/code/parser/shift.rb +4 -2
  83. data/lib/code/parser/splat.rb +5 -3
  84. data/lib/code/parser/square_bracket.rb +48 -0
  85. data/lib/code/parser/statement.rb +3 -1
  86. data/lib/code/parser/string.rb +12 -10
  87. data/lib/code/parser/ternary.rb +10 -11
  88. data/lib/code/parser/unary_minus.rb +5 -3
  89. data/lib/code/parser/while.rb +5 -3
  90. data/lib/code/parser/whitespace.rb +2 -0
  91. data/lib/code/parser.rb +10 -3
  92. data/lib/code/ruby.rb +4 -2
  93. data/lib/code/type/hash.rb +38 -0
  94. data/lib/code/type/maybe.rb +29 -0
  95. data/lib/code/type/or.rb +38 -0
  96. data/lib/code/type/repeat.rb +38 -0
  97. data/lib/code/type/sig.rb +130 -0
  98. data/lib/code/type.rb +25 -0
  99. data/lib/code/version.rb +3 -0
  100. data/lib/code-ruby.rb +1 -2
  101. data/lib/code.rb +15 -16
  102. data/spec/code/node/call_spec.rb +39 -0
  103. data/spec/code/object/boolean_spec.rb +18 -0
  104. data/spec/code/object/decimal_spec.rb +51 -0
  105. data/spec/code/object/dictionary_spec.rb +98 -0
  106. data/spec/code/object/function_spec.rb +42 -0
  107. data/spec/code/object/integer_spec.rb +43 -0
  108. data/spec/code/object/nothing_spec.rb +14 -0
  109. data/spec/code/object/range_spec.rb +23 -0
  110. data/spec/code/parser/boolean_spec.rb +5 -10
  111. data/spec/code/parser/chained_call.rb +4 -5
  112. data/spec/code/parser/{dictionnary_spec.rb → dictionary_spec.rb} +5 -6
  113. data/spec/code/parser/function_spec.rb +4 -5
  114. data/spec/code/parser/group_spec.rb +5 -12
  115. data/spec/code/parser/if_modifier_spec.rb +18 -0
  116. data/spec/code/parser/list_spec.rb +4 -5
  117. data/spec/code/parser/number_spec.rb +4 -5
  118. data/spec/code/parser/string_spec.rb +4 -5
  119. data/spec/code/parser_spec.rb +22 -16
  120. data/spec/code/type_spec.rb +21 -0
  121. data/spec/code_spec.rb +171 -0
  122. data/spec/spec_helper.rb +1 -6
  123. metadata +61 -137
  124. data/.cherry.js +0 -21
  125. data/.editorconfig +0 -9
  126. data/.github/workflows/rspec.yml +0 -14
  127. data/.gitignore +0 -2
  128. data/.prettierrc +0 -3
  129. data/.tool-versions +0 -1
  130. data/CHANGELOG.md +0 -55
  131. data/LICENSE +0 -7
  132. data/README.md +0 -103
  133. data/TODO +0 -17
  134. data/bin/code +0 -76
  135. data/bin/format +0 -3
  136. data/bin/publish +0 -19
  137. data/bin/template +0 -85
  138. data/bin/test +0 -17
  139. data/docs/class.code +0 -9
  140. data/docs/euler/1.template +0 -10
  141. data/docs/euler/2.template +0 -16
  142. data/docs/euler/3.template +0 -16
  143. data/docs/euler/4.template +0 -10
  144. data/docs/euler/5.template +0 -13
  145. data/docs/fibonnaci.template +0 -14
  146. data/docs/meetup.code +0 -12
  147. data/docs/precedence.template +0 -36
  148. data/docs/rain.code +0 -22
  149. data/docs/slack.code +0 -17
  150. data/docs/stripe.code +0 -7
  151. data/docs/twitter.code +0 -9
  152. data/language-ruby.gemspec +0 -17
  153. data/lib/code/node/chained_call.rb +0 -23
  154. data/lib/code/node/equal.rb +0 -34
  155. data/lib/code/node/if_modifier.rb +0 -47
  156. data/lib/code/node/operation.rb +0 -38
  157. data/lib/code/node/power.rb +0 -20
  158. data/lib/code/node/rescue.rb +0 -17
  159. data/lib/code/object/dictionnary.rb +0 -96
  160. data/lib/code/parser/equality_lower.rb +0 -9
  161. data/lib/code/parser/operation.rb +0 -35
  162. data/lib/language/atom.rb +0 -342
  163. data/lib/language/output.rb +0 -130
  164. data/lib/language/parser/absent/present.rb +0 -8
  165. data/lib/language/parser/absent.rb +0 -6
  166. data/lib/language/parser/end_of_input.rb +0 -6
  167. data/lib/language/parser/interuption.rb +0 -38
  168. data/lib/language/parser/not_end_of_input.rb +0 -6
  169. data/lib/language/parser/str/not_found.rb +0 -16
  170. data/lib/language/parser/str.rb +0 -6
  171. data/lib/language/parser.rb +0 -53
  172. data/lib/language-ruby.rb +0 -10
  173. data/lib/language.rb +0 -80
  174. data/lib/template/node/code_part.rb +0 -13
  175. data/lib/template/node/part.rb +0 -19
  176. data/lib/template/node/template.rb +0 -15
  177. data/lib/template/node/text_part.rb +0 -13
  178. data/lib/template/node.rb +0 -4
  179. data/lib/template/parser/template.rb +0 -39
  180. data/lib/template/parser.rb +0 -19
  181. data/lib/template/version.rb +0 -3
  182. data/lib/template-ruby.rb +0 -10
  183. data/lib/template.rb +0 -50
  184. data/spec/code/addition_spec.rb +0 -13
  185. data/spec/code/and_operator_spec.rb +0 -13
  186. data/spec/code/bitwise_and_spec.rb +0 -13
  187. data/spec/code/bitwise_or_spec.rb +0 -13
  188. data/spec/code/boolean_spec.rb +0 -13
  189. data/spec/code/call_spec.rb +0 -21
  190. data/spec/code/chained_call_spec.rb +0 -16
  191. data/spec/code/code_spec.rb +0 -29
  192. data/spec/code/dictionnary_spec.rb +0 -17
  193. data/spec/code/equal_spec.rb +0 -26
  194. data/spec/code/equality_spec.rb +0 -13
  195. data/spec/code/function_spec.rb +0 -18
  196. data/spec/code/greater_spec.rb +0 -18
  197. data/spec/code/group_spec.rb +0 -12
  198. data/spec/code/if_modifier_spec.rb +0 -20
  199. data/spec/code/if_spec.rb +0 -25
  200. data/spec/code/list_spec.rb +0 -19
  201. data/spec/code/multiplication_spec.rb +0 -18
  202. data/spec/code/negation_spec.rb +0 -20
  203. data/spec/code/not_keyword_spec.rb +0 -13
  204. data/spec/code/nothing_spec.rb +0 -17
  205. data/spec/code/number_spec.rb +0 -22
  206. data/spec/code/or_keyword_spec.rb +0 -17
  207. data/spec/code/or_operator_spec.rb +0 -16
  208. data/spec/code/parser/call_spec.rb +0 -26
  209. data/spec/code/power_spec.rb +0 -13
  210. data/spec/code/range_spec.rb +0 -16
  211. data/spec/code/rescue_spec.rb +0 -13
  212. data/spec/code/shift_spec.rb +0 -13
  213. data/spec/code/splat_spec.rb +0 -13
  214. data/spec/code/string_spec.rb +0 -27
  215. data/spec/code/ternary_spec.rb +0 -18
  216. data/spec/code/unary_minus_spec.rb +0 -13
  217. data/spec/code/while_spec.rb +0 -18
  218. data/template-ruby.gemspec +0 -19
@@ -1,20 +1,22 @@
1
+ # frozen_string_literal: true
2
+
1
3
  class Code
2
4
  class Parser
3
5
  class Class < Language
4
6
  def statement
5
- ::Code::Parser::While
7
+ While
6
8
  end
7
9
 
8
10
  def name
9
- ::Code::Parser::Name
11
+ Name
10
12
  end
11
13
 
12
14
  def code
13
- ::Code::Parser::Code
15
+ Code
14
16
  end
15
17
 
16
18
  def whitespace
17
- ::Code::Parser::Whitespace
19
+ Whitespace
18
20
  end
19
21
 
20
22
  def whitespace?
@@ -36,8 +38,9 @@ class Code
36
38
  def root
37
39
  (
38
40
  class_keyword << whitespace? << name.aka(:name) <<
39
- (whitespace? << lesser << name.aka(:superclass)).maybe <<
40
- code.aka(:body) << end_keyword.maybe
41
+ (
42
+ whitespace? << lesser << whitespace? << name.aka(:superclass)
43
+ ).maybe << code.aka(:body) << end_keyword.maybe
41
44
  ).aka(:class) | statement
42
45
  end
43
46
  end
@@ -1,16 +1,18 @@
1
+ # frozen_string_literal: true
2
+
1
3
  class Code
2
4
  class Parser
3
5
  class Code < Language
4
6
  def whitespace
5
- ::Code::Parser::Whitespace
7
+ Whitespace
6
8
  end
7
9
 
8
- def whitespace?(&block)
9
- whitespace.maybe(&block)
10
+ def whitespace?
11
+ whitespace.maybe
10
12
  end
11
13
 
12
14
  def statement
13
- ::Code::Parser::Statement
15
+ Statement
14
16
  end
15
17
 
16
18
  def present
@@ -1,20 +1,22 @@
1
+ # frozen_string_literal: true
2
+
1
3
  class Code
2
4
  class Parser
3
- class Dictionnary < Language
4
- def code
5
- ::Code::Parser::Code.new.present
5
+ class Dictionary < Language
6
+ def code_present
7
+ Code.new.present
6
8
  end
7
9
 
8
10
  def statement
9
- ::Code::Parser::Statement
11
+ Statement
10
12
  end
11
13
 
12
14
  def name
13
- ::Code::Parser::Name
15
+ Name
14
16
  end
15
17
 
16
18
  def whitespace
17
- ::Code::Parser::Whitespace
19
+ Whitespace
18
20
  end
19
21
 
20
22
  def whitespace?
@@ -46,21 +48,22 @@ class Code
46
48
  end
47
49
 
48
50
  def key_value
49
- (name.aka(:name) << colon << code.aka(:value)) |
50
- (statement.aka(:statement) << colon << code.aka(:value)) |
51
+ (name.aka(:name) << colon << code_present.aka(:value).maybe) |
52
+ (
53
+ statement.aka(:statement) << colon << code_present.aka(:value).maybe
54
+ ) |
51
55
  (
52
56
  statement.aka(:statement) << whitespace? << equal << greater <<
53
- code.aka(:value)
54
- )
57
+ code_present.aka(:value).maybe
58
+ ) | statement.aka(:statement)
55
59
  end
56
60
 
57
61
  def root
58
62
  (
59
63
  opening_curly_bracket.ignore << whitespace? <<
60
- key_value.repeat(0, 1) <<
61
- (whitespace? << comma << whitespace? << key_value).repeat <<
64
+ (whitespace? << key_value << (whitespace? << comma).maybe).repeat <<
62
65
  (whitespace? << closing_curly_bracket.ignore).maybe
63
- ).aka(:dictionnary) | ::Code::Parser::List
66
+ ).aka(:dictionnary) | List
64
67
  end
65
68
  end
66
69
  end
@@ -1,24 +1,10 @@
1
+ # frozen_string_literal: true
2
+
1
3
  class Code
2
4
  class Parser
3
- class Equal < Language
5
+ class Equal < RightOperation
4
6
  def statement
5
- ::Code::Parser::Rescue
6
- end
7
-
8
- def name
9
- ::Code::Parser::Name
10
- end
11
-
12
- def equal_class
13
- ::Code::Parser::Equal
14
- end
15
-
16
- def whitespace
17
- ::Code::Parser::Whitespace
18
- end
19
-
20
- def whitespace?
21
- whitespace.maybe
7
+ Rescue
22
8
  end
23
9
 
24
10
  def equal
@@ -70,24 +56,11 @@ class Code
70
56
  end
71
57
 
72
58
  def operator
73
- equal.ignore | (plus << equal.ignore) | (minus << equal.ignore) |
74
- (asterisk << equal.ignore) | (slash << equal.ignore) |
75
- (percent << equal.ignore) | (greater << greater << equal.ignore) |
76
- (lesser << lesser << equal.ignore) | (ampersand << equal.ignore) |
77
- (pipe << equal.ignore) | (caret << equal.ignore) |
78
- (pipe << pipe << equal.ignore) |
79
- (ampersand << ampersand << equal.ignore)
80
- end
81
-
82
- def names
83
- name << (dot << name).repeat
84
- end
85
-
86
- def root
87
- (
88
- names.aka(:left) << whitespace? << operator.aka(:operator) <<
89
- whitespace? << equal_class.aka(:right)
90
- ).aka(:equal) | statement
59
+ equal | (plus << equal) | (minus << equal) | (asterisk << equal) |
60
+ (slash << equal) | (percent << equal) |
61
+ (greater << greater << equal) | (lesser << lesser << equal) |
62
+ (ampersand << equal) | (pipe << equal) | (caret << equal) |
63
+ (pipe << pipe << equal) | (ampersand << ampersand << equal)
91
64
  end
92
65
  end
93
66
  end
@@ -1,8 +1,10 @@
1
+ # frozen_string_literal: true
2
+
1
3
  class Code
2
4
  class Parser
3
- class Equality < Operation
5
+ class Equality < LeftOperation
4
6
  def statement
5
- ::Code::Parser::Splat
7
+ Greater
6
8
  end
7
9
 
8
10
  def equal
@@ -1,20 +1,22 @@
1
+ # frozen_string_literal: true
2
+
1
3
  class Code
2
4
  class Parser
3
5
  class Function < Language
4
6
  def name
5
- ::Code::Parser::Name
7
+ Name
6
8
  end
7
9
 
8
10
  def code
9
- ::Code::Parser::Code
11
+ Code
10
12
  end
11
13
 
12
14
  def code_present
13
- ::Code::Parser::Code.new.present
15
+ Code.new.present
14
16
  end
15
17
 
16
18
  def whitespace
17
- ::Code::Parser::Whitespace
19
+ Whitespace
18
20
  end
19
21
 
20
22
  def whitespace?
@@ -53,13 +55,26 @@ class Code
53
55
  str("}")
54
56
  end
55
57
 
58
+ def asterisk
59
+ str("*")
60
+ end
61
+
62
+ def ampersand
63
+ str("&")
64
+ end
65
+
66
+ def prefix
67
+ (asterisk << asterisk).aka(:keyword_splat) |
68
+ asterisk.aka(:regular_splat) | ampersand.aka(:block)
69
+ end
70
+
56
71
  def keyword_parameter
57
72
  name.aka(:name) << whitespace? << colon.aka(:keyword) <<
58
73
  code_present.aka(:default).maybe
59
74
  end
60
75
 
61
76
  def regular_parameter
62
- name.aka(:name) << whitespace? <<
77
+ prefix.maybe << name.aka(:name) << whitespace? <<
63
78
  (equal << whitespace? << code_present.aka(:default)).maybe
64
79
  end
65
80
 
@@ -68,9 +83,9 @@ class Code
68
83
  end
69
84
 
70
85
  def parameters
71
- opening_parenthesis.ignore << whitespace? << parameter.repeat(0, 1) <<
72
- (whitespace? << comma << whitespace? << parameter).repeat <<
73
- whitespace? << closing_parenthesis.ignore.maybe
86
+ opening_parenthesis.ignore << whitespace? <<
87
+ (whitespace? << parameter << (whitespace? << comma).maybe).repeat <<
88
+ (whitespace? << closing_parenthesis.ignore).maybe
74
89
  end
75
90
 
76
91
  def root
@@ -78,7 +93,7 @@ class Code
78
93
  parameters.aka(:parameters) << whitespace? << equal << greater <<
79
94
  whitespace? << opening_curly_bracket << code.aka(:body) <<
80
95
  closing_curly_bracket.maybe
81
- ).aka(:function) | ::Code::Parser::ChainedCall
96
+ ).aka(:function) | Dictionary
82
97
  end
83
98
  end
84
99
  end
@@ -1,8 +1,10 @@
1
+ # frozen_string_literal: true
2
+
1
3
  class Code
2
4
  class Parser
3
- class Greater < Operation
5
+ class Greater < LeftOperation
4
6
  def statement
5
- ::Code::Parser::BitwiseOr
7
+ BitwiseOr
6
8
  end
7
9
 
8
10
  def greater
@@ -18,7 +20,8 @@ class Code
18
20
  end
19
21
 
20
22
  def operator
21
- (greater << equal) | (lesser << equal) | greater | lesser
23
+ (greater << equal) | (lesser << equal << greater.absent) |
24
+ (greater << equal.absent) | lesser
22
25
  end
23
26
  end
24
27
  end
@@ -1,8 +1,10 @@
1
+ # frozen_string_literal: true
2
+
1
3
  class Code
2
4
  class Parser
3
5
  class Group < Language
4
6
  def code
5
- ::Code::Parser::Code
7
+ Code
6
8
  end
7
9
 
8
10
  def opening_parenthesis
@@ -15,7 +17,7 @@ class Code
15
17
 
16
18
  def root
17
19
  (opening_parenthesis << code << closing_parenthesis.maybe).aka(:group) |
18
- ::Code::Parser::Call
20
+ Call
19
21
  end
20
22
  end
21
23
  end
@@ -1,20 +1,22 @@
1
+ # frozen_string_literal: true
2
+
1
3
  class Code
2
4
  class Parser
3
5
  class If < Language
4
6
  def statement
5
- ::Code::Parser::IfModifier
7
+ IfModifier
6
8
  end
7
9
 
8
10
  def if_class
9
- ::Code::Parser::If
11
+ If
10
12
  end
11
13
 
12
14
  def whitespace
13
- ::Code::Parser::Whitespace
15
+ Whitespace
14
16
  end
15
17
 
16
18
  def code
17
- ::Code::Parser::Code
19
+ Code
18
20
  end
19
21
 
20
22
  def whitespace?
@@ -1,20 +1,14 @@
1
+ # frozen_string_literal: true
2
+
1
3
  class Code
2
4
  class Parser
3
- class IfModifier < Language
5
+ class IfModifier < RightOperation
4
6
  def statement
5
- ::Code::Parser::OrKeyword
6
- end
7
-
8
- def if_modifier
9
- ::Code::Parser::IfModifier
7
+ OrKeyword
10
8
  end
11
9
 
12
10
  def whitespace
13
- ::Code::Parser::Whitespace.new.without_newline
14
- end
15
-
16
- def whitespace?
17
- whitespace.maybe
11
+ Whitespace.new.without_newline
18
12
  end
19
13
 
20
14
  def if_keyword
@@ -36,20 +30,6 @@ class Code
36
30
  def operator
37
31
  if_keyword | unless_keyword | while_keyword | until_keyword
38
32
  end
39
-
40
- def root
41
- (
42
- statement.aka(:left) <<
43
- (
44
- whitespace? << operator.aka(:operator) << whitespace? <<
45
- if_modifier.aka(:right)
46
- ).maybe
47
- )
48
- .aka(:if_modifier)
49
- .then do |output|
50
- output[:if_modifier][:right] ? output : output[:if_modifier][:left]
51
- end
52
- end
53
33
  end
54
34
  end
55
35
  end
@@ -0,0 +1,40 @@
1
+ # frozen_string_literal: true
2
+
3
+ class Code
4
+ class Parser
5
+ class LeftOperation < Language
6
+ def statement
7
+ raise NotImplementedError
8
+ end
9
+
10
+ def whitespace
11
+ Whitespace
12
+ end
13
+
14
+ def whitespace?
15
+ whitespace.maybe
16
+ end
17
+
18
+ def operator
19
+ raise NotImplementedError
20
+ end
21
+
22
+ def root
23
+ (
24
+ statement.aka(:first) << (
25
+ whitespace? << operator.aka(:operator) << whitespace? <<
26
+ statement.aka(:statement)
27
+ ).repeat(1).aka(:others).maybe
28
+ )
29
+ .aka(:left_operation)
30
+ .then do |output|
31
+ if output[:left_operation][:others]
32
+ output
33
+ else
34
+ output[:left_operation][:first]
35
+ end
36
+ end
37
+ end
38
+ end
39
+ end
40
+ end
@@ -1,12 +1,14 @@
1
+ # frozen_string_literal: true
2
+
1
3
  class Code
2
4
  class Parser
3
5
  class List < Language
4
6
  def code
5
- ::Code::Parser::Code.new.present
7
+ Code.new.present
6
8
  end
7
9
 
8
10
  def whitespace
9
- ::Code::Parser::Whitespace
11
+ Whitespace
10
12
  end
11
13
 
12
14
  def whitespace?
@@ -32,10 +34,9 @@ class Code
32
34
  def root
33
35
  (
34
36
  opening_square_bracket.ignore << whitespace? <<
35
- element.repeat(0, 1) <<
36
- (whitespace? << comma << whitespace? << element).repeat <<
37
+ (whitespace? << element << (whitespace? << comma).maybe).repeat <<
37
38
  (whitespace? << closing_square_bracket.ignore).maybe
38
- ).aka(:list) | ::Code::Parser::String
39
+ ).aka(:list) | String
39
40
  end
40
41
  end
41
42
  end
@@ -1,8 +1,10 @@
1
+ # frozen_string_literal: true
2
+
1
3
  class Code
2
4
  class Parser
3
- class Multiplication < Operation
5
+ class Multiplication < LeftOperation
4
6
  def statement
5
- ::Code::Parser::UnaryMinus
7
+ Negation
6
8
  end
7
9
 
8
10
  def asterisk
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  class Code
2
4
  class Parser
3
5
  class Name < Language
@@ -65,6 +67,18 @@ class Code
65
67
  str("&")
66
68
  end
67
69
 
70
+ def lesser
71
+ str("<")
72
+ end
73
+
74
+ def greater
75
+ str(">")
76
+ end
77
+
78
+ def asterisk
79
+ str("*")
80
+ end
81
+
68
82
  def do_keyword
69
83
  str("do")
70
84
  end
@@ -85,7 +99,8 @@ class Code
85
99
  ampersand | equal | pipe | dot | colon | comma | space | newline |
86
100
  opening_curly_bracket | closing_curly_bracket | opening_parenthesis |
87
101
  closing_parenthesis | opening_square_bracket |
88
- closing_square_bracket | single_quote | double_quote
102
+ closing_square_bracket | single_quote | double_quote | lesser |
103
+ greater | asterisk
89
104
  end
90
105
 
91
106
  def character
@@ -97,9 +112,9 @@ class Code
97
112
  end
98
113
 
99
114
  def root
100
- (do_keyword << separator).absent <<
101
- (else_keyword << separator).absent <<
102
- (elsif_keyword << separator).absent <<
115
+ (do_keyword << separator).absent << (
116
+ else_keyword << separator
117
+ ).absent << (elsif_keyword << separator).absent <<
103
118
  (end_keyword << separator).absent << character.repeat(1)
104
119
  end
105
120
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  class Code
2
4
  class Parser
3
5
  class Negation < Language
@@ -18,12 +20,12 @@ class Code
18
20
  end
19
21
 
20
22
  def negation
21
- ::Code::Parser::Negation
23
+ Negation
22
24
  end
23
25
 
24
26
  def root
25
27
  (operator.aka(:operator) << negation.aka(:right)).aka(:negation) |
26
- ::Code::Parser::Function
28
+ ChainedCall
27
29
  end
28
30
  end
29
31
  end
@@ -1,12 +1,14 @@
1
+ # frozen_string_literal: true
2
+
1
3
  class Code
2
4
  class Parser
3
5
  class NotKeyword < Language
4
6
  def not_class
5
- ::Code::Parser::NotKeyword
7
+ NotKeyword
6
8
  end
7
9
 
8
10
  def whitespace
9
- ::Code::Parser::Whitespace
11
+ Whitespace
10
12
  end
11
13
 
12
14
  def not_keyword
@@ -16,7 +18,7 @@ class Code
16
18
  def root
17
19
  (not_keyword.aka(:operator) << whitespace << not_class.aka(:right)).aka(
18
20
  :not
19
- ) | ::Code::Parser::Equal
21
+ ) | Equal
20
22
  end
21
23
  end
22
24
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  class Code
2
4
  class Parser
3
5
  class Nothing < Language
@@ -5,17 +7,8 @@ class Code
5
7
  str("nothing")
6
8
  end
7
9
 
8
- def null_keyword
9
- str("null")
10
- end
11
-
12
- def nil_keyword
13
- str("nil")
14
- end
15
-
16
10
  def root
17
- (nothing_keyword | null_keyword | nil_keyword).aka(:nothing) |
18
- ::Code::Parser::Group
11
+ nothing_keyword.aka(:nothing) | Group
19
12
  end
20
13
  end
21
14
  end
@@ -1,8 +1,10 @@
1
+ # frozen_string_literal: true
2
+
1
3
  class Code
2
4
  class Parser
3
5
  class Number < Language
4
6
  def number
5
- ::Code::Parser::Number
7
+ Number
6
8
  end
7
9
 
8
10
  def zero
@@ -147,7 +149,7 @@ class Code
147
149
  decimal.aka(:decimal) | base_16_number.aka(:base_16) |
148
150
  base_8_number.aka(:base_8) | base_2_number.aka(:base_2) |
149
151
  base_10_number.aka(:base_10)
150
- ).aka(:number) | ::Code::Parser::Boolean
152
+ ).aka(:number) | Boolean
151
153
  end
152
154
  end
153
155
  end
@@ -1,8 +1,10 @@
1
+ # frozen_string_literal: true
2
+
1
3
  class Code
2
4
  class Parser
3
- class OrKeyword < Operation
5
+ class OrKeyword < LeftOperation
4
6
  def statement
5
- ::Code::Parser::NotKeyword
7
+ NotKeyword
6
8
  end
7
9
 
8
10
  def or_keyword
@@ -1,8 +1,10 @@
1
+ # frozen_string_literal: true
2
+
1
3
  class Code
2
4
  class Parser
3
- class OrOperator < Operation
5
+ class OrOperator < LeftOperation
4
6
  def statement
5
- ::Code::Parser::AndOperator
7
+ AndOperator
6
8
  end
7
9
 
8
10
  def pipe
@@ -1,20 +1,10 @@
1
+ # frozen_string_literal: true
2
+
1
3
  class Code
2
4
  class Parser
3
- class Power < Language
4
- def power
5
- ::Code::Parser::Power
6
- end
7
-
5
+ class Power < RightOperation
8
6
  def statement
9
- ::Code::Parser::Negation
10
- end
11
-
12
- def whitespace
13
- ::Code::Parser::Whitespace
14
- end
15
-
16
- def whitespace?
17
- whitespace.maybe
7
+ Function
18
8
  end
19
9
 
20
10
  def asterisk
@@ -24,20 +14,6 @@ class Code
24
14
  def operator
25
15
  asterisk << asterisk
26
16
  end
27
-
28
- def root
29
- (
30
- statement.aka(:left) <<
31
- (
32
- whitespace? << operator.aka(:operator) << whitespace? <<
33
- power.aka(:right)
34
- ).maybe
35
- )
36
- .aka(:power)
37
- .then do |output|
38
- output[:power][:right] ? output : output[:power][:left]
39
- end
40
- end
41
17
  end
42
18
  end
43
19
  end