File tree 8 files changed +88
-50
lines changed
8 files changed +88
-50
lines changed Original file line number Diff line number Diff line change @@ -59,6 +59,10 @@ def do_keyword
59
59
str ( "do" )
60
60
end
61
61
62
+ def begin_keyword
63
+ str ( "do" )
64
+ end
65
+
62
66
def end_keyword
63
67
str ( "end" )
64
68
end
@@ -107,8 +111,9 @@ def parameters
107
111
108
112
def block
109
113
(
110
- do_keyword << whitespace? << parameters . aka ( :parameters ) . maybe <<
111
- code . aka ( :body ) << end_keyword . maybe
114
+ ( do_keyword | begin_keyword ) << whitespace? <<
115
+ parameters . aka ( :parameters ) . maybe << code . aka ( :body ) <<
116
+ end_keyword . maybe
112
117
) |
113
118
(
114
119
opening_curly_bracket << whitespace? <<
Original file line number Diff line number Diff line change @@ -7,41 +7,8 @@ def statement
7
7
While
8
8
end
9
9
10
- def name
11
- Name
12
- end
13
-
14
- def code
15
- Code
16
- end
17
-
18
- def whitespace
19
- Whitespace
20
- end
21
-
22
- def whitespace?
23
- whitespace . maybe
24
- end
25
-
26
- def class_keyword
27
- str ( "class" )
28
- end
29
-
30
- def end_keyword
31
- str ( "end" )
32
- end
33
-
34
- def lesser
35
- str ( "<" )
36
- end
37
-
38
10
def root
39
- (
40
- class_keyword << whitespace? << name . aka ( :name ) <<
41
- (
42
- whitespace? << lesser << whitespace? << name . aka ( :superclass )
43
- ) . maybe << code . aka ( :body ) << end_keyword . maybe
44
- ) . aka ( :class ) | statement
11
+ statement
45
12
end
46
13
end
47
14
end
Original file line number Diff line number Diff line change @@ -23,6 +23,18 @@ def whitespace?
23
23
whitespace . maybe
24
24
end
25
25
26
+ def do_keyword
27
+ str ( "do" )
28
+ end
29
+
30
+ def begin_keyword
31
+ str ( "begin" )
32
+ end
33
+
34
+ def end_keyword
35
+ str ( "end" )
36
+ end
37
+
26
38
def opening_parenthesis
27
39
str ( "(" )
28
40
end
@@ -88,11 +100,15 @@ def parameters
88
100
( whitespace? << closing_parenthesis . ignore ) . maybe
89
101
end
90
102
103
+ def body
104
+ ( ( begin_keyword | do_keyword ) << code << end_keyword . maybe ) |
105
+ ( opening_curly_bracket << code << closing_curly_bracket . maybe ) | code
106
+ end
107
+
91
108
def root
92
109
(
93
110
parameters . aka ( :parameters ) << whitespace? << equal << greater <<
94
- whitespace? << opening_curly_bracket << code . aka ( :body ) <<
95
- closing_curly_bracket . maybe
111
+ whitespace? << body . aka ( :body )
96
112
) . aka ( :function ) | Dictionary
97
113
end
98
114
end
Original file line number Diff line number Diff line change @@ -15,8 +15,22 @@ def closing_parenthesis
15
15
str ( ")" )
16
16
end
17
17
18
+ def end_keyword
19
+ str ( "end" )
20
+ end
21
+
22
+ def do_keyword
23
+ str ( "do" )
24
+ end
25
+
26
+ def begin_keyword
27
+ str ( "begin" )
28
+ end
29
+
18
30
def root
19
31
( opening_parenthesis << code << closing_parenthesis . maybe ) . aka ( :group ) |
32
+ ( begin_keyword << code << end_keyword . maybe ) . aka ( :group ) |
33
+ ( do_keyword << code << end_keyword . maybe ) . aka ( :group ) |
20
34
Call
21
35
end
22
36
end
Original file line number Diff line number Diff line change @@ -23,6 +23,22 @@ def whitespace?
23
23
whitespace . maybe
24
24
end
25
25
26
+ def do_keyword
27
+ str ( "do" )
28
+ end
29
+
30
+ def begin_keyword
31
+ str ( "begin" )
32
+ end
33
+
34
+ def opening_curly_bracket
35
+ str ( "{" )
36
+ end
37
+
38
+ def closing_curly_bracket
39
+ str ( "{" )
40
+ end
41
+
26
42
def if_keyword
27
43
str ( "if" )
28
44
end
@@ -43,20 +59,25 @@ def end_keyword
43
59
str ( "end" )
44
60
end
45
61
62
+ def body
63
+ ( ( begin_keyword | do_keyword ) << code << end_keyword . maybe ) |
64
+ ( opening_curly_bracket << code << closing_curly_bracket . maybe ) | code
65
+ end
66
+
46
67
def root
47
68
(
48
69
( if_keyword | unless_keyword ) . aka ( :first_operator ) << whitespace <<
49
- statement . aka ( :first_statement ) << code . aka ( :first_body ) <<
70
+ statement . aka ( :first_statement ) << body . aka ( :first_body ) <<
50
71
(
51
72
(
52
73
elsif_keyword . aka ( :operator ) << whitespace <<
53
- statement . aka ( :statement ) << code . aka ( :body )
74
+ statement . aka ( :statement ) << body . aka ( :body )
54
75
) |
55
76
(
56
77
else_keyword << whitespace <<
57
78
( if_keyword | unless_keyword ) . aka ( :operator ) <<
58
- whitespace << statement . aka ( :statement ) << code . aka ( :body )
59
- ) | ( else_keyword . aka ( :operator ) << code . aka ( :body ) )
79
+ whitespace << statement . aka ( :statement ) << body . aka ( :body )
80
+ ) | ( else_keyword . aka ( :operator ) << body . aka ( :body ) )
60
81
) . repeat ( 1 ) . aka ( :elses ) . maybe << end_keyword . maybe
61
82
) . aka ( :if ) | statement
62
83
end
Original file line number Diff line number Diff line change @@ -91,10 +91,18 @@ def elsif_keyword
91
91
str ( "elsif" )
92
92
end
93
93
94
+ def begin_keyword
95
+ str ( "begin" )
96
+ end
97
+
94
98
def else_keyword
95
99
str ( "else" )
96
100
end
97
101
102
+ def begin_keyword
103
+ str ( "begin" )
104
+ end
105
+
98
106
def special_character
99
107
ampersand | equal | pipe | dot | colon | comma | space | newline |
100
108
opening_curly_bracket | closing_curly_bracket | opening_parenthesis |
@@ -113,8 +121,9 @@ def separator
113
121
114
122
def root
115
123
( do_keyword << separator ) . absent << (
116
- else_keyword << separator
117
- ) . absent << ( elsif_keyword << separator ) . absent <<
124
+ begin_keyword << separator
125
+ ) . absent << ( else_keyword << separator ) . absent <<
126
+ ( elsif_keyword << separator ) . absent <<
118
127
( end_keyword << separator ) . absent << character . repeat ( 1 )
119
128
end
120
129
end
Original file line number Diff line number Diff line change @@ -35,6 +35,10 @@ def do_keyword
35
35
str ( "do" )
36
36
end
37
37
38
+ def begin_keyword
39
+ str ( "begin" )
40
+ end
41
+
38
42
def loop_keyword
39
43
str ( "loop" )
40
44
end
@@ -47,19 +51,19 @@ def closing_curly_bracket
47
51
str ( "}" )
48
52
end
49
53
54
+ def body
55
+ ( ( do_keyword | begin_keyword ) << code << end_keyword . maybe ) |
56
+ ( opening_curly_bracket << code << closing_curly_bracket ) | code
57
+ end
58
+
50
59
def root
51
60
(
52
61
(
53
62
(
54
63
( while_keyword | until_keyword ) . aka ( :operator ) << whitespace <<
55
64
statement . aka ( :statement )
56
65
) | ( loop_keyword . aka ( :operator ) << whitespace )
57
- ) << (
58
- (
59
- whitespace? << ( opening_curly_bracket | do_keyword )
60
- ) . maybe << code . aka ( :body ) <<
61
- ( closing_curly_bracket | end_keyword ) . maybe
62
- )
66
+ ) << body . aka ( :body )
63
67
) . aka ( :while ) | statement
64
68
end
65
69
end
Original file line number Diff line number Diff line change 353
353
next if code_input . is_a? ( Code ::Object ::Decimal )
354
354
355
355
expect ( code_input . to_json ) . to eq ( code_expected . to_json )
356
+ YAML . unsafe_load ( code_input . to_yaml )
357
+ YAML . unsafe_load ( code_expected . to_yaml )
356
358
end
357
359
end
358
360
You can’t perform that action at this time.
0 commit comments