language-ruby 0.5.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.
- checksums.yaml +7 -0
- data/.editorconfig +9 -0
- data/.github/workflows/rspec.yml +14 -0
- data/.gitignore +2 -0
- data/.prettierrc +3 -0
- data/.rspec +1 -0
- data/CHANGELOG.md +55 -0
- data/Gemfile +8 -0
- data/Gemfile.lock +48 -0
- data/LICENSE +7 -0
- data/README.md +103 -0
- data/TODO +17 -0
- data/bin/code +76 -0
- data/bin/format +3 -0
- data/bin/template +85 -0
- data/bin/test +17 -0
- data/code-ruby.gemspec +17 -0
- data/docs/class.code +9 -0
- data/docs/euler/1.template +10 -0
- data/docs/euler/2.template +16 -0
- data/docs/euler/3.template +16 -0
- data/docs/euler/4.template +10 -0
- data/docs/euler/5.template +13 -0
- data/docs/fibonnaci.template +14 -0
- data/docs/meetup.code +12 -0
- data/docs/precedence.template +36 -0
- data/docs/rain.code +22 -0
- data/docs/slack.code +17 -0
- data/docs/stripe.code +7 -0
- data/docs/twitter.code +9 -0
- data/language-ruby.gemspec +18 -0
- data/lib/code/error.rb +18 -0
- data/lib/code/node/base_10.rb +29 -0
- data/lib/code/node/base_16.rb +13 -0
- data/lib/code/node/base_2.rb +13 -0
- data/lib/code/node/base_8.rb +13 -0
- data/lib/code/node/boolean.rb +22 -0
- data/lib/code/node/call.rb +47 -0
- data/lib/code/node/call_argument.rb +21 -0
- data/lib/code/node/chained_call.rb +23 -0
- data/lib/code/node/code.rb +20 -0
- data/lib/code/node/decimal.rb +26 -0
- data/lib/code/node/dictionnary.rb +33 -0
- data/lib/code/node/equal.rb +34 -0
- data/lib/code/node/function.rb +20 -0
- data/lib/code/node/function_parameter.rb +31 -0
- data/lib/code/node/if.rb +59 -0
- data/lib/code/node/if_modifier.rb +47 -0
- data/lib/code/node/list.rb +16 -0
- data/lib/code/node/negation.rb +15 -0
- data/lib/code/node/not.rb +15 -0
- data/lib/code/node/nothing.rb +12 -0
- data/lib/code/node/number.rb +25 -0
- data/lib/code/node/operation.rb +38 -0
- data/lib/code/node/power.rb +20 -0
- data/lib/code/node/rescue.rb +17 -0
- data/lib/code/node/splat.rb +15 -0
- data/lib/code/node/statement.rb +59 -0
- data/lib/code/node/string.rb +53 -0
- data/lib/code/node/ternary.rb +24 -0
- data/lib/code/node/unary_minus.rb +15 -0
- data/lib/code/node/while.rb +35 -0
- data/lib/code/node.rb +13 -0
- data/lib/code/object/argument.rb +32 -0
- data/lib/code/object/boolean.rb +27 -0
- data/lib/code/object/decimal.rb +162 -0
- data/lib/code/object/dictionnary.rb +96 -0
- data/lib/code/object/function.rb +64 -0
- data/lib/code/object/global.rb +42 -0
- data/lib/code/object/integer.rb +221 -0
- data/lib/code/object/list.rb +200 -0
- data/lib/code/object/nothing.rb +23 -0
- data/lib/code/object/number.rb +6 -0
- data/lib/code/object/range.rb +146 -0
- data/lib/code/object/ruby_function.rb +31 -0
- data/lib/code/object/string.rb +88 -0
- data/lib/code/object.rb +197 -0
- data/lib/code/parser/addition.rb +21 -0
- data/lib/code/parser/and_operator.rb +17 -0
- data/lib/code/parser/bitwise_and.rb +17 -0
- data/lib/code/parser/bitwise_or.rb +21 -0
- data/lib/code/parser/boolean.rb +17 -0
- data/lib/code/parser/call.rb +122 -0
- data/lib/code/parser/chained_call.rb +47 -0
- data/lib/code/parser/class.rb +45 -0
- data/lib/code/parser/code.rb +25 -0
- data/lib/code/parser/dictionnary.rb +67 -0
- data/lib/code/parser/equal.rb +94 -0
- data/lib/code/parser/equality.rb +35 -0
- data/lib/code/parser/equality_lower.rb +9 -0
- data/lib/code/parser/function.rb +85 -0
- data/lib/code/parser/greater.rb +25 -0
- data/lib/code/parser/group.rb +22 -0
- data/lib/code/parser/if.rb +63 -0
- data/lib/code/parser/if_modifier.rb +55 -0
- data/lib/code/parser/list.rb +42 -0
- data/lib/code/parser/multiplication.rb +25 -0
- data/lib/code/parser/name.rb +101 -0
- data/lib/code/parser/negation.rb +30 -0
- data/lib/code/parser/not_keyword.rb +23 -0
- data/lib/code/parser/nothing.rb +22 -0
- data/lib/code/parser/number.rb +154 -0
- data/lib/code/parser/operation.rb +35 -0
- data/lib/code/parser/or_keyword.rb +21 -0
- data/lib/code/parser/or_operator.rb +17 -0
- data/lib/code/parser/power.rb +43 -0
- data/lib/code/parser/range.rb +17 -0
- data/lib/code/parser/rescue.rb +39 -0
- data/lib/code/parser/shift.rb +21 -0
- data/lib/code/parser/splat.rb +31 -0
- data/lib/code/parser/statement.rb +9 -0
- data/lib/code/parser/string.rb +78 -0
- data/lib/code/parser/ternary.rb +46 -0
- data/lib/code/parser/unary_minus.rb +31 -0
- data/lib/code/parser/while.rb +36 -0
- data/lib/code/parser/whitespace.rb +49 -0
- data/lib/code/parser.rb +19 -0
- data/lib/code/ruby.rb +162 -0
- data/lib/code-ruby.rb +10 -0
- data/lib/code.rb +47 -0
- data/lib/language/atom.rb +343 -0
- data/lib/language/output.rb +130 -0
- data/lib/language/parser/absent/present.rb +8 -0
- data/lib/language/parser/absent.rb +6 -0
- data/lib/language/parser/end_of_input.rb +6 -0
- data/lib/language/parser/interuption.rb +38 -0
- data/lib/language/parser/not_end_of_input.rb +6 -0
- data/lib/language/parser/str/not_found.rb +16 -0
- data/lib/language/parser/str.rb +6 -0
- data/lib/language/parser.rb +53 -0
- data/lib/language-ruby.rb +10 -0
- data/lib/language.rb +80 -0
- data/lib/template/node/code_part.rb +13 -0
- data/lib/template/node/part.rb +19 -0
- data/lib/template/node/template.rb +15 -0
- data/lib/template/node/text_part.rb +13 -0
- data/lib/template/node.rb +4 -0
- data/lib/template/parser/template.rb +39 -0
- data/lib/template/parser.rb +19 -0
- data/lib/template/version.rb +3 -0
- data/lib/template-ruby.rb +10 -0
- data/lib/template.rb +50 -0
- data/spec/code/addition_spec.rb +13 -0
- data/spec/code/and_operator_spec.rb +13 -0
- data/spec/code/bitwise_and_spec.rb +13 -0
- data/spec/code/bitwise_or_spec.rb +13 -0
- data/spec/code/boolean_spec.rb +13 -0
- data/spec/code/call_spec.rb +21 -0
- data/spec/code/chained_call_spec.rb +16 -0
- data/spec/code/dictionnary_spec.rb +17 -0
- data/spec/code/equal_spec.rb +26 -0
- data/spec/code/equality_spec.rb +13 -0
- data/spec/code/function_spec.rb +18 -0
- data/spec/code/greater_spec.rb +18 -0
- data/spec/code/group_spec.rb +12 -0
- data/spec/code/if_modifier_spec.rb +20 -0
- data/spec/code/if_spec.rb +25 -0
- data/spec/code/list_spec.rb +17 -0
- data/spec/code/multiplication_spec.rb +18 -0
- data/spec/code/negation_spec.rb +20 -0
- data/spec/code/not_keyword_spec.rb +13 -0
- data/spec/code/nothing_spec.rb +17 -0
- data/spec/code/number_spec.rb +22 -0
- data/spec/code/or_keyword_spec.rb +17 -0
- data/spec/code/or_operator_spec.rb +16 -0
- data/spec/code/parser/boolean_spec.rb +16 -0
- data/spec/code/parser/call_spec.rb +26 -0
- data/spec/code/parser/chained_call.rb +17 -0
- data/spec/code/parser/dictionnary_spec.rb +18 -0
- data/spec/code/parser/function_spec.rb +16 -0
- data/spec/code/parser/group_spec.rb +18 -0
- data/spec/code/parser/list_spec.rb +18 -0
- data/spec/code/parser/number_spec.rb +12 -0
- data/spec/code/parser/string_spec.rb +21 -0
- data/spec/code/parser_spec.rb +23 -0
- data/spec/code/power_spec.rb +13 -0
- data/spec/code/range_spec.rb +16 -0
- data/spec/code/rescue_spec.rb +13 -0
- data/spec/code/shift_spec.rb +13 -0
- data/spec/code/splat_spec.rb +13 -0
- data/spec/code/string_spec.rb +25 -0
- data/spec/code/ternary_spec.rb +18 -0
- data/spec/code/unary_minus_spec.rb +13 -0
- data/spec/code/while_spec.rb +18 -0
- data/spec/spec_helper.rb +6 -0
- data/template-ruby.gemspec +19 -0
- metadata +284 -0
@@ -0,0 +1,35 @@
|
|
1
|
+
class Code
|
2
|
+
class Parser
|
3
|
+
class Equality < Operation
|
4
|
+
def statement
|
5
|
+
::Code::Parser::Splat
|
6
|
+
end
|
7
|
+
|
8
|
+
def equal
|
9
|
+
str("=")
|
10
|
+
end
|
11
|
+
|
12
|
+
def greater
|
13
|
+
str(">")
|
14
|
+
end
|
15
|
+
|
16
|
+
def lesser
|
17
|
+
str("<")
|
18
|
+
end
|
19
|
+
|
20
|
+
def exclamation_point
|
21
|
+
str("!")
|
22
|
+
end
|
23
|
+
|
24
|
+
def tilde
|
25
|
+
str("~")
|
26
|
+
end
|
27
|
+
|
28
|
+
def operator
|
29
|
+
(equal << equal << equal) | (equal << equal) |
|
30
|
+
(lesser << equal << greater) | (exclamation_point << equal) |
|
31
|
+
(equal << tilde) | (tilde << equal) | (exclamation_point << tilde)
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
@@ -0,0 +1,85 @@
|
|
1
|
+
class Code
|
2
|
+
class Parser
|
3
|
+
class Function < Language
|
4
|
+
def name
|
5
|
+
::Code::Parser::Name
|
6
|
+
end
|
7
|
+
|
8
|
+
def code
|
9
|
+
::Code::Parser::Code
|
10
|
+
end
|
11
|
+
|
12
|
+
def code_present
|
13
|
+
::Code::Parser::Code.new.present
|
14
|
+
end
|
15
|
+
|
16
|
+
def whitespace
|
17
|
+
::Code::Parser::Whitespace
|
18
|
+
end
|
19
|
+
|
20
|
+
def whitespace?
|
21
|
+
whitespace.maybe
|
22
|
+
end
|
23
|
+
|
24
|
+
def opening_parenthesis
|
25
|
+
str("(")
|
26
|
+
end
|
27
|
+
|
28
|
+
def closing_parenthesis
|
29
|
+
str(")")
|
30
|
+
end
|
31
|
+
|
32
|
+
def colon
|
33
|
+
str(":")
|
34
|
+
end
|
35
|
+
|
36
|
+
def comma
|
37
|
+
str(",")
|
38
|
+
end
|
39
|
+
|
40
|
+
def equal
|
41
|
+
str("=")
|
42
|
+
end
|
43
|
+
|
44
|
+
def greater
|
45
|
+
str(">")
|
46
|
+
end
|
47
|
+
|
48
|
+
def opening_curly_bracket
|
49
|
+
str("{")
|
50
|
+
end
|
51
|
+
|
52
|
+
def closing_curly_bracket
|
53
|
+
str("}")
|
54
|
+
end
|
55
|
+
|
56
|
+
def keyword_parameter
|
57
|
+
name.aka(:name) << whitespace? << colon.aka(:keyword) <<
|
58
|
+
code_present.aka(:default).maybe
|
59
|
+
end
|
60
|
+
|
61
|
+
def regular_parameter
|
62
|
+
name.aka(:name) << whitespace? <<
|
63
|
+
(equal << whitespace? << code_present.aka(:default)).maybe
|
64
|
+
end
|
65
|
+
|
66
|
+
def parameter
|
67
|
+
keyword_parameter | regular_parameter
|
68
|
+
end
|
69
|
+
|
70
|
+
def parameters
|
71
|
+
opening_parenthesis.ignore << whitespace? << parameter.repeat(0, 1) <<
|
72
|
+
(whitespace? << comma << whitespace? << parameter).repeat <<
|
73
|
+
whitespace? << closing_parenthesis.ignore.maybe
|
74
|
+
end
|
75
|
+
|
76
|
+
def root
|
77
|
+
(
|
78
|
+
parameters.aka(:parameters) << whitespace? << equal << greater <<
|
79
|
+
whitespace? << opening_curly_bracket << code.aka(:body) <<
|
80
|
+
closing_curly_bracket.maybe
|
81
|
+
).aka(:function) | ::Code::Parser::ChainedCall
|
82
|
+
end
|
83
|
+
end
|
84
|
+
end
|
85
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
class Code
|
2
|
+
class Parser
|
3
|
+
class Greater < Operation
|
4
|
+
def statement
|
5
|
+
::Code::Parser::BitwiseOr
|
6
|
+
end
|
7
|
+
|
8
|
+
def greater
|
9
|
+
str(">")
|
10
|
+
end
|
11
|
+
|
12
|
+
def lesser
|
13
|
+
str("<")
|
14
|
+
end
|
15
|
+
|
16
|
+
def equal
|
17
|
+
str("=")
|
18
|
+
end
|
19
|
+
|
20
|
+
def operator
|
21
|
+
(greater << equal) | (lesser << equal) | greater | lesser
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
class Code
|
2
|
+
class Parser
|
3
|
+
class Group < Language
|
4
|
+
def code
|
5
|
+
::Code::Parser::Code
|
6
|
+
end
|
7
|
+
|
8
|
+
def opening_parenthesis
|
9
|
+
str("(")
|
10
|
+
end
|
11
|
+
|
12
|
+
def closing_parenthesis
|
13
|
+
str(")")
|
14
|
+
end
|
15
|
+
|
16
|
+
def root
|
17
|
+
(opening_parenthesis << code << closing_parenthesis.maybe).aka(:group) |
|
18
|
+
::Code::Parser::Call
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,63 @@
|
|
1
|
+
class Code
|
2
|
+
class Parser
|
3
|
+
class If < Language
|
4
|
+
def statement
|
5
|
+
::Code::Parser::IfModifier
|
6
|
+
end
|
7
|
+
|
8
|
+
def if_class
|
9
|
+
::Code::Parser::If
|
10
|
+
end
|
11
|
+
|
12
|
+
def whitespace
|
13
|
+
::Code::Parser::Whitespace
|
14
|
+
end
|
15
|
+
|
16
|
+
def code
|
17
|
+
::Code::Parser::Code
|
18
|
+
end
|
19
|
+
|
20
|
+
def whitespace?
|
21
|
+
whitespace.maybe
|
22
|
+
end
|
23
|
+
|
24
|
+
def if_keyword
|
25
|
+
str("if")
|
26
|
+
end
|
27
|
+
|
28
|
+
def unless_keyword
|
29
|
+
str("unless")
|
30
|
+
end
|
31
|
+
|
32
|
+
def elsif_keyword
|
33
|
+
str("elsif")
|
34
|
+
end
|
35
|
+
|
36
|
+
def else_keyword
|
37
|
+
str("else")
|
38
|
+
end
|
39
|
+
|
40
|
+
def end_keyword
|
41
|
+
str("end")
|
42
|
+
end
|
43
|
+
|
44
|
+
def root
|
45
|
+
(
|
46
|
+
(if_keyword | unless_keyword).aka(:first_operator) << whitespace <<
|
47
|
+
statement.aka(:first_statement) << code.aka(:first_body) <<
|
48
|
+
(
|
49
|
+
(
|
50
|
+
elsif_keyword.aka(:operator) << whitespace <<
|
51
|
+
statement.aka(:statement) << code.aka(:body)
|
52
|
+
) |
|
53
|
+
(
|
54
|
+
else_keyword << whitespace <<
|
55
|
+
(if_keyword | unless_keyword).aka(:operator) <<
|
56
|
+
whitespace << statement.aka(:statement) << code.aka(:body)
|
57
|
+
) | (else_keyword.aka(:operator) << code.aka(:body))
|
58
|
+
).repeat(1).aka(:elses).maybe << end_keyword.maybe
|
59
|
+
).aka(:if) | statement
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
@@ -0,0 +1,55 @@
|
|
1
|
+
class Code
|
2
|
+
class Parser
|
3
|
+
class IfModifier < Language
|
4
|
+
def statement
|
5
|
+
::Code::Parser::OrKeyword
|
6
|
+
end
|
7
|
+
|
8
|
+
def if_modifier
|
9
|
+
::Code::Parser::IfModifier
|
10
|
+
end
|
11
|
+
|
12
|
+
def whitespace
|
13
|
+
::Code::Parser::Whitespace.new.without_newline
|
14
|
+
end
|
15
|
+
|
16
|
+
def whitespace?
|
17
|
+
whitespace.maybe
|
18
|
+
end
|
19
|
+
|
20
|
+
def if_keyword
|
21
|
+
str("if")
|
22
|
+
end
|
23
|
+
|
24
|
+
def unless_keyword
|
25
|
+
str("unless")
|
26
|
+
end
|
27
|
+
|
28
|
+
def while_keyword
|
29
|
+
str("while")
|
30
|
+
end
|
31
|
+
|
32
|
+
def until_keyword
|
33
|
+
str("until")
|
34
|
+
end
|
35
|
+
|
36
|
+
def operator
|
37
|
+
if_keyword | unless_keyword | while_keyword | until_keyword
|
38
|
+
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
|
+
end
|
54
|
+
end
|
55
|
+
end
|
@@ -0,0 +1,42 @@
|
|
1
|
+
class Code
|
2
|
+
class Parser
|
3
|
+
class List < Language
|
4
|
+
def code
|
5
|
+
::Code::Parser::Code.new.present
|
6
|
+
end
|
7
|
+
|
8
|
+
def whitespace
|
9
|
+
::Code::Parser::Whitespace
|
10
|
+
end
|
11
|
+
|
12
|
+
def whitespace?
|
13
|
+
whitespace.maybe
|
14
|
+
end
|
15
|
+
|
16
|
+
def opening_square_bracket
|
17
|
+
str("[")
|
18
|
+
end
|
19
|
+
|
20
|
+
def closing_square_bracket
|
21
|
+
str("]")
|
22
|
+
end
|
23
|
+
|
24
|
+
def comma
|
25
|
+
str(",")
|
26
|
+
end
|
27
|
+
|
28
|
+
def element
|
29
|
+
code
|
30
|
+
end
|
31
|
+
|
32
|
+
def root
|
33
|
+
(
|
34
|
+
opening_square_bracket.ignore << whitespace? <<
|
35
|
+
element.repeat(0, 1) <<
|
36
|
+
(whitespace? << comma << whitespace? << element).repeat <<
|
37
|
+
(whitespace? << closing_square_bracket.ignore).maybe
|
38
|
+
).aka(:list) | ::Code::Parser::String
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
class Code
|
2
|
+
class Parser
|
3
|
+
class Multiplication < Operation
|
4
|
+
def statement
|
5
|
+
::Code::Parser::UnaryMinus
|
6
|
+
end
|
7
|
+
|
8
|
+
def asterisk
|
9
|
+
str("*")
|
10
|
+
end
|
11
|
+
|
12
|
+
def slash
|
13
|
+
str("/")
|
14
|
+
end
|
15
|
+
|
16
|
+
def percent
|
17
|
+
str("%")
|
18
|
+
end
|
19
|
+
|
20
|
+
def operator
|
21
|
+
asterisk | slash | percent
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1,101 @@
|
|
1
|
+
class Code
|
2
|
+
class Parser
|
3
|
+
class Name < Language
|
4
|
+
def space
|
5
|
+
str(" ")
|
6
|
+
end
|
7
|
+
|
8
|
+
def newline
|
9
|
+
str("\n")
|
10
|
+
end
|
11
|
+
|
12
|
+
def comma
|
13
|
+
str(",")
|
14
|
+
end
|
15
|
+
|
16
|
+
def equal
|
17
|
+
str("=")
|
18
|
+
end
|
19
|
+
|
20
|
+
def colon
|
21
|
+
str(":")
|
22
|
+
end
|
23
|
+
|
24
|
+
def opening_curly_bracket
|
25
|
+
str("{")
|
26
|
+
end
|
27
|
+
|
28
|
+
def closing_curly_bracket
|
29
|
+
str("}")
|
30
|
+
end
|
31
|
+
|
32
|
+
def opening_square_bracket
|
33
|
+
str("[")
|
34
|
+
end
|
35
|
+
|
36
|
+
def closing_square_bracket
|
37
|
+
str("]")
|
38
|
+
end
|
39
|
+
|
40
|
+
def opening_parenthesis
|
41
|
+
str("(")
|
42
|
+
end
|
43
|
+
|
44
|
+
def closing_parenthesis
|
45
|
+
str(")")
|
46
|
+
end
|
47
|
+
|
48
|
+
def single_quote
|
49
|
+
str("'")
|
50
|
+
end
|
51
|
+
|
52
|
+
def double_quote
|
53
|
+
str('"')
|
54
|
+
end
|
55
|
+
|
56
|
+
def dot
|
57
|
+
str(".")
|
58
|
+
end
|
59
|
+
|
60
|
+
def pipe
|
61
|
+
str("|")
|
62
|
+
end
|
63
|
+
|
64
|
+
def ampersand
|
65
|
+
str("&")
|
66
|
+
end
|
67
|
+
|
68
|
+
def do_keyword
|
69
|
+
str("do")
|
70
|
+
end
|
71
|
+
|
72
|
+
def end_keyword
|
73
|
+
str("end")
|
74
|
+
end
|
75
|
+
|
76
|
+
def elsif_keyword
|
77
|
+
str("elsif")
|
78
|
+
end
|
79
|
+
|
80
|
+
def else_keyword
|
81
|
+
str("else")
|
82
|
+
end
|
83
|
+
|
84
|
+
def special_character
|
85
|
+
ampersand | equal | pipe | dot | colon | comma | space | newline |
|
86
|
+
opening_curly_bracket | closing_curly_bracket | opening_parenthesis |
|
87
|
+
closing_parenthesis | opening_square_bracket |
|
88
|
+
closing_square_bracket | single_quote | double_quote
|
89
|
+
end
|
90
|
+
|
91
|
+
def character
|
92
|
+
special_character.absent << any
|
93
|
+
end
|
94
|
+
|
95
|
+
def root
|
96
|
+
do_keyword.absent << end_keyword.absent << elsif_keyword.absent <<
|
97
|
+
else_keyword.absent << character.repeat(1)
|
98
|
+
end
|
99
|
+
end
|
100
|
+
end
|
101
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
class Code
|
2
|
+
class Parser
|
3
|
+
class Negation < Language
|
4
|
+
def exclamation_point
|
5
|
+
str("!")
|
6
|
+
end
|
7
|
+
|
8
|
+
def tilde
|
9
|
+
str("~")
|
10
|
+
end
|
11
|
+
|
12
|
+
def plus
|
13
|
+
str("+")
|
14
|
+
end
|
15
|
+
|
16
|
+
def operator
|
17
|
+
exclamation_point | tilde | plus
|
18
|
+
end
|
19
|
+
|
20
|
+
def negation
|
21
|
+
::Code::Parser::Negation
|
22
|
+
end
|
23
|
+
|
24
|
+
def root
|
25
|
+
(operator.aka(:operator) << negation.aka(:right)).aka(:negation) |
|
26
|
+
::Code::Parser::Function
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
class Code
|
2
|
+
class Parser
|
3
|
+
class NotKeyword < Language
|
4
|
+
def not_class
|
5
|
+
::Code::Parser::NotKeyword
|
6
|
+
end
|
7
|
+
|
8
|
+
def whitespace
|
9
|
+
::Code::Parser::Whitespace
|
10
|
+
end
|
11
|
+
|
12
|
+
def not_keyword
|
13
|
+
str("not")
|
14
|
+
end
|
15
|
+
|
16
|
+
def root
|
17
|
+
(not_keyword.aka(:operator) << whitespace << not_class.aka(:right)).aka(
|
18
|
+
:not
|
19
|
+
) | ::Code::Parser::Equal
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
class Code
|
2
|
+
class Parser
|
3
|
+
class Nothing < Language
|
4
|
+
def nothing_keyword
|
5
|
+
str("nothing")
|
6
|
+
end
|
7
|
+
|
8
|
+
def null_keyword
|
9
|
+
str("null")
|
10
|
+
end
|
11
|
+
|
12
|
+
def nil_keyword
|
13
|
+
str("nil")
|
14
|
+
end
|
15
|
+
|
16
|
+
def root
|
17
|
+
(nothing_keyword | null_keyword | nil_keyword).aka(:nothing) |
|
18
|
+
::Code::Parser::Group
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,154 @@
|
|
1
|
+
class Code
|
2
|
+
class Parser
|
3
|
+
class Number < Language
|
4
|
+
def number
|
5
|
+
::Code::Parser::Number
|
6
|
+
end
|
7
|
+
|
8
|
+
def zero
|
9
|
+
str("0")
|
10
|
+
end
|
11
|
+
|
12
|
+
def one
|
13
|
+
str("1")
|
14
|
+
end
|
15
|
+
|
16
|
+
def two
|
17
|
+
str("2")
|
18
|
+
end
|
19
|
+
|
20
|
+
def three
|
21
|
+
str("3")
|
22
|
+
end
|
23
|
+
|
24
|
+
def four
|
25
|
+
str("4")
|
26
|
+
end
|
27
|
+
|
28
|
+
def five
|
29
|
+
str("5")
|
30
|
+
end
|
31
|
+
|
32
|
+
def six
|
33
|
+
str("6")
|
34
|
+
end
|
35
|
+
|
36
|
+
def seven
|
37
|
+
str("7")
|
38
|
+
end
|
39
|
+
|
40
|
+
def eight
|
41
|
+
str("8")
|
42
|
+
end
|
43
|
+
|
44
|
+
def nine
|
45
|
+
str("9")
|
46
|
+
end
|
47
|
+
|
48
|
+
def dot
|
49
|
+
str(".")
|
50
|
+
end
|
51
|
+
|
52
|
+
def a
|
53
|
+
str("a") | str("A")
|
54
|
+
end
|
55
|
+
|
56
|
+
def b
|
57
|
+
str("b") | str("B")
|
58
|
+
end
|
59
|
+
|
60
|
+
def c
|
61
|
+
str("c") | str("C")
|
62
|
+
end
|
63
|
+
|
64
|
+
def d
|
65
|
+
str("d") | str("D")
|
66
|
+
end
|
67
|
+
|
68
|
+
def e
|
69
|
+
str("e") | str("E")
|
70
|
+
end
|
71
|
+
|
72
|
+
def f
|
73
|
+
str("f") | str("F")
|
74
|
+
end
|
75
|
+
|
76
|
+
def o
|
77
|
+
str("o") | str("O")
|
78
|
+
end
|
79
|
+
|
80
|
+
def x
|
81
|
+
str("x") | str("X")
|
82
|
+
end
|
83
|
+
|
84
|
+
def underscore
|
85
|
+
str("_")
|
86
|
+
end
|
87
|
+
|
88
|
+
def base_16_digit
|
89
|
+
zero | one | two | three | four | five | six | seven | eight | nine |
|
90
|
+
a | b | c | d | e | f
|
91
|
+
end
|
92
|
+
|
93
|
+
def base_10_digit
|
94
|
+
zero | one | two | three | four | five | six | seven | eight | nine
|
95
|
+
end
|
96
|
+
|
97
|
+
def base_8_digit
|
98
|
+
zero | one | two | three | four | five | six | seven
|
99
|
+
end
|
100
|
+
|
101
|
+
def base_2_digit
|
102
|
+
zero | one
|
103
|
+
end
|
104
|
+
|
105
|
+
def base_16_whole
|
106
|
+
base_16_digit << (underscore.ignore | base_16_digit).repeat
|
107
|
+
end
|
108
|
+
|
109
|
+
def base_10_whole
|
110
|
+
base_10_digit << (underscore.ignore | base_10_digit).repeat
|
111
|
+
end
|
112
|
+
|
113
|
+
def base_8_whole
|
114
|
+
base_8_digit << (underscore.ignore | base_8_digit).repeat
|
115
|
+
end
|
116
|
+
|
117
|
+
def base_2_whole
|
118
|
+
base_2_digit << (underscore.ignore | base_2_digit).repeat
|
119
|
+
end
|
120
|
+
|
121
|
+
def exponent
|
122
|
+
(e << number).aka(:exponent)
|
123
|
+
end
|
124
|
+
|
125
|
+
def decimal
|
126
|
+
(base_10_whole << dot << base_10_whole).aka(:decimal) << exponent.maybe
|
127
|
+
end
|
128
|
+
|
129
|
+
def base_16_number
|
130
|
+
zero.ignore << x.ignore << base_16_whole
|
131
|
+
end
|
132
|
+
|
133
|
+
def base_10_number
|
134
|
+
base_10_whole.aka(:whole) << exponent.maybe
|
135
|
+
end
|
136
|
+
|
137
|
+
def base_8_number
|
138
|
+
zero.ignore << o.ignore << base_8_whole
|
139
|
+
end
|
140
|
+
|
141
|
+
def base_2_number
|
142
|
+
zero.ignore << b.ignore << base_2_whole
|
143
|
+
end
|
144
|
+
|
145
|
+
def root
|
146
|
+
(
|
147
|
+
decimal.aka(:decimal) | base_16_number.aka(:base_16) |
|
148
|
+
base_8_number.aka(:base_8) | base_2_number.aka(:base_2) |
|
149
|
+
base_10_number.aka(:base_10)
|
150
|
+
).aka(:number) | ::Code::Parser::Boolean
|
151
|
+
end
|
152
|
+
end
|
153
|
+
end
|
154
|
+
end
|