Skip to content

Commit e18d2b2

Browse files
tweak syntax
1 parent fbd76d7 commit e18d2b2

File tree

8 files changed

+88
-50
lines changed

8 files changed

+88
-50
lines changed

lib/code/parser/call.rb

+7-2
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,10 @@ def do_keyword
5959
str("do")
6060
end
6161

62+
def begin_keyword
63+
str("do")
64+
end
65+
6266
def end_keyword
6367
str("end")
6468
end
@@ -107,8 +111,9 @@ def parameters
107111

108112
def block
109113
(
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
112117
) |
113118
(
114119
opening_curly_bracket << whitespace? <<

lib/code/parser/class.rb

+1-34
Original file line numberDiff line numberDiff line change
@@ -7,41 +7,8 @@ def statement
77
While
88
end
99

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-
3810
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
4512
end
4613
end
4714
end

lib/code/parser/function.rb

+18-2
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,18 @@ def whitespace?
2323
whitespace.maybe
2424
end
2525

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+
2638
def opening_parenthesis
2739
str("(")
2840
end
@@ -88,11 +100,15 @@ def parameters
88100
(whitespace? << closing_parenthesis.ignore).maybe
89101
end
90102

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+
91108
def root
92109
(
93110
parameters.aka(:parameters) << whitespace? << equal << greater <<
94-
whitespace? << opening_curly_bracket << code.aka(:body) <<
95-
closing_curly_bracket.maybe
111+
whitespace? << body.aka(:body)
96112
).aka(:function) | Dictionary
97113
end
98114
end

lib/code/parser/group.rb

+14
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,22 @@ def closing_parenthesis
1515
str(")")
1616
end
1717

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+
1830
def root
1931
(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) |
2034
Call
2135
end
2236
end

lib/code/parser/if.rb

+25-4
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,22 @@ def whitespace?
2323
whitespace.maybe
2424
end
2525

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+
2642
def if_keyword
2743
str("if")
2844
end
@@ -43,20 +59,25 @@ def end_keyword
4359
str("end")
4460
end
4561

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+
4667
def root
4768
(
4869
(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) <<
5071
(
5172
(
5273
elsif_keyword.aka(:operator) << whitespace <<
53-
statement.aka(:statement) << code.aka(:body)
74+
statement.aka(:statement) << body.aka(:body)
5475
) |
5576
(
5677
else_keyword << whitespace <<
5778
(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))
6081
).repeat(1).aka(:elses).maybe << end_keyword.maybe
6182
).aka(:if) | statement
6283
end

lib/code/parser/name.rb

+11-2
Original file line numberDiff line numberDiff line change
@@ -91,10 +91,18 @@ def elsif_keyword
9191
str("elsif")
9292
end
9393

94+
def begin_keyword
95+
str("begin")
96+
end
97+
9498
def else_keyword
9599
str("else")
96100
end
97101

102+
def begin_keyword
103+
str("begin")
104+
end
105+
98106
def special_character
99107
ampersand | equal | pipe | dot | colon | comma | space | newline |
100108
opening_curly_bracket | closing_curly_bracket | opening_parenthesis |
@@ -113,8 +121,9 @@ def separator
113121

114122
def root
115123
(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 <<
118127
(end_keyword << separator).absent << character.repeat(1)
119128
end
120129
end

lib/code/parser/while.rb

+10-6
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,10 @@ def do_keyword
3535
str("do")
3636
end
3737

38+
def begin_keyword
39+
str("begin")
40+
end
41+
3842
def loop_keyword
3943
str("loop")
4044
end
@@ -47,19 +51,19 @@ def closing_curly_bracket
4751
str("}")
4852
end
4953

54+
def body
55+
((do_keyword | begin_keyword) << code << end_keyword.maybe) |
56+
(opening_curly_bracket << code << closing_curly_bracket) | code
57+
end
58+
5059
def root
5160
(
5261
(
5362
(
5463
(while_keyword | until_keyword).aka(:operator) << whitespace <<
5564
statement.aka(:statement)
5665
) | (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)
6367
).aka(:while) | statement
6468
end
6569
end

spec/code_spec.rb

+2
Original file line numberDiff line numberDiff line change
@@ -353,6 +353,8 @@
353353
next if code_input.is_a?(Code::Object::Decimal)
354354

355355
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)
356358
end
357359
end
358360

0 commit comments

Comments
 (0)