Skip to content

Commit 36f5a20

Browse files
authored
Merge pull request rails#52610 from Shopify/no_more_racc
Remove racc
2 parents 3dbff87 + 7d42bf6 commit 36f5a20

File tree

7 files changed

+103
-285
lines changed

7 files changed

+103
-285
lines changed

Gemfile

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -152,9 +152,6 @@ end
152152
platforms :ruby, :windows do
153153
gem "nokogiri", ">= 1.8.1", "!= 1.11.0"
154154

155-
# Needed for compiling the ActionDispatch::Journey parser.
156-
gem "racc", ">=1.4.6", require: false
157-
158155
# Active Record.
159156
gem "sqlite3", ">= 1.6.6"
160157

Gemfile.lock

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,6 @@ PATH
5151
actionview (= 8.0.0.alpha)
5252
activesupport (= 8.0.0.alpha)
5353
nokogiri (>= 1.8.5)
54-
racc
5554
rack (>= 2.2.4)
5655
rack-session (>= 1.0.1)
5756
rack-test (>= 0.6.3)
@@ -666,7 +665,6 @@ DEPENDENCIES
666665
propshaft (>= 0.1.7)
667666
puma (>= 5.0.3)
668667
queue_classic (>= 4.0.0)
669-
racc (>= 1.4.6)
670668
rack (~> 3.0)
671669
rack-cache (~> 1.2)
672670
rails!

actionpack/CHANGELOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,7 @@
1+
* Remove `racc` dependency by manually writing `ActionDispatch::Journey::Scanner`.
2+
3+
*Gannon McGibbon*
4+
15
* Speed up `ActionDispatch::Routing::Mapper::Scope#[]` by merging frame hashes.
26

37
*Gannon McGibbon*

actionpack/actionpack.gemspec

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,6 @@ Gem::Specification.new do |s|
3636
s.add_dependency "activesupport", version
3737

3838
s.add_dependency "nokogiri", ">= 1.8.5"
39-
s.add_dependency "racc"
4039
s.add_dependency "rack", ">= 2.2.4"
4140
s.add_dependency "rack-session", ">= 1.0.1"
4241
s.add_dependency "rack-test", ">= 0.6.3"
Lines changed: 99 additions & 196 deletions
Original file line numberDiff line numberDiff line change
@@ -1,200 +1,103 @@
1-
#
2-
# DO NOT MODIFY!!!!
3-
# This file is automatically generated by Racc 1.4.16 from
4-
# Racc grammar file "".
51

6-
# :markup: markdown
2+
require "action_dispatch/journey/scanner"
3+
require "action_dispatch/journey/nodes/node"
74

8-
require 'racc/parser.rb'
9-
10-
# :stopdoc:
11-
12-
require "action_dispatch/journey/parser_extras"
135
module ActionDispatch
14-
module Journey
15-
class Parser < Racc::Parser
16-
##### State transition tables begin ###
17-
18-
racc_action_table = [
19-
13, 15, 14, 7, 19, 16, 8, 19, 13, 15,
20-
14, 7, 17, 16, 8, 13, 15, 14, 7, 21,
21-
16, 8, 13, 15, 14, 7, 24, 16, 8 ]
22-
23-
racc_action_check = [
24-
2, 2, 2, 2, 22, 2, 2, 2, 19, 19,
25-
19, 19, 1, 19, 19, 7, 7, 7, 7, 17,
26-
7, 7, 0, 0, 0, 0, 20, 0, 0 ]
27-
28-
racc_action_pointer = [
29-
20, 12, -2, nil, nil, nil, nil, 13, nil, nil,
30-
nil, nil, nil, nil, nil, nil, nil, 19, nil, 6,
31-
20, nil, -5, nil, nil ]
32-
33-
racc_action_default = [
34-
-19, -19, -2, -3, -4, -5, -6, -19, -10, -11,
35-
-12, -13, -14, -15, -16, -17, -18, -19, -1, -19,
36-
-19, 25, -8, -9, -7 ]
37-
38-
racc_goto_table = [
39-
1, 22, 18, 23, nil, nil, nil, 20 ]
40-
41-
racc_goto_check = [
42-
1, 2, 1, 3, nil, nil, nil, 1 ]
43-
44-
racc_goto_pointer = [
45-
nil, 0, -18, -16, nil, nil, nil, nil, nil, nil,
46-
nil ]
47-
48-
racc_goto_default = [
49-
nil, nil, 2, 3, 4, 5, 6, 9, 10, 11,
50-
12 ]
51-
52-
racc_reduce_table = [
53-
0, 0, :racc_error,
54-
2, 11, :_reduce_1,
55-
1, 11, :_reduce_2,
56-
1, 11, :_reduce_none,
57-
1, 12, :_reduce_none,
58-
1, 12, :_reduce_none,
59-
1, 12, :_reduce_none,
60-
3, 15, :_reduce_7,
61-
3, 13, :_reduce_8,
62-
3, 13, :_reduce_9,
63-
1, 16, :_reduce_10,
64-
1, 14, :_reduce_none,
65-
1, 14, :_reduce_none,
66-
1, 14, :_reduce_none,
67-
1, 14, :_reduce_none,
68-
1, 19, :_reduce_15,
69-
1, 17, :_reduce_16,
70-
1, 18, :_reduce_17,
71-
1, 20, :_reduce_18 ]
72-
73-
racc_reduce_n = 19
74-
75-
racc_shift_n = 25
76-
77-
racc_token_table = {
78-
false => 0,
79-
:error => 1,
80-
:SLASH => 2,
81-
:LITERAL => 3,
82-
:SYMBOL => 4,
83-
:LPAREN => 5,
84-
:RPAREN => 6,
85-
:DOT => 7,
86-
:STAR => 8,
87-
:OR => 9 }
88-
89-
racc_nt_base = 10
90-
91-
racc_use_result_var = false
92-
93-
Racc_arg = [
94-
racc_action_table,
95-
racc_action_check,
96-
racc_action_default,
97-
racc_action_pointer,
98-
racc_goto_table,
99-
racc_goto_check,
100-
racc_goto_default,
101-
racc_goto_pointer,
102-
racc_nt_base,
103-
racc_reduce_table,
104-
racc_token_table,
105-
racc_shift_n,
106-
racc_reduce_n,
107-
racc_use_result_var ]
108-
109-
Racc_token_to_s_table = [
110-
"$end",
111-
"error",
112-
"SLASH",
113-
"LITERAL",
114-
"SYMBOL",
115-
"LPAREN",
116-
"RPAREN",
117-
"DOT",
118-
"STAR",
119-
"OR",
120-
"$start",
121-
"expressions",
122-
"expression",
123-
"or",
124-
"terminal",
125-
"group",
126-
"star",
127-
"symbol",
128-
"literal",
129-
"slash",
130-
"dot" ]
131-
132-
Racc_debug_parser = false
133-
134-
##### State transition tables end #####
135-
136-
# reduce 0 omitted
137-
138-
def _reduce_1(val, _values)
139-
Cat.new(val.first, val.last)
140-
end
141-
142-
def _reduce_2(val, _values)
143-
val.first
144-
end
145-
146-
# reduce 3 omitted
147-
148-
# reduce 4 omitted
149-
150-
# reduce 5 omitted
151-
152-
# reduce 6 omitted
153-
154-
def _reduce_7(val, _values)
155-
Group.new(val[1])
156-
end
157-
158-
def _reduce_8(val, _values)
159-
Or.new([val.first, val.last])
160-
end
161-
162-
def _reduce_9(val, _values)
163-
Or.new([val.first, val.last])
164-
end
165-
166-
def _reduce_10(val, _values)
167-
Star.new(Symbol.new(val.last, Symbol::GREEDY_EXP))
6+
module Journey # :nodoc:
7+
class Parser # :nodoc:
8+
include Journey::Nodes
9+
10+
def self.parse(string)
11+
new.parse string
12+
end
13+
14+
def initialize
15+
@scanner = Scanner.new
16+
@next_token = nil
17+
end
18+
19+
def parse(string)
20+
@scanner.scan_setup(string)
21+
advance_token
22+
do_parse
23+
end
24+
25+
private
26+
27+
def advance_token
28+
@next_token = @scanner.next_token
29+
end
30+
31+
def do_parse
32+
parse_expressions
33+
end
34+
35+
def parse_expressions
36+
node = parse_expression
37+
38+
while @next_token
39+
case @next_token.first
40+
when :RPAREN
41+
break
42+
when :OR
43+
node = parse_or(node)
44+
else
45+
node = Cat.new(node, parse_expressions)
46+
end
47+
end
48+
49+
node
50+
end
51+
52+
def parse_or(lhs)
53+
advance_token
54+
node = parse_expression
55+
Or.new([lhs, node])
56+
end
57+
58+
def parse_expression
59+
if @next_token.first == :STAR
60+
parse_star
61+
elsif @next_token.first == :LPAREN
62+
parse_group
63+
else
64+
parse_terminal
65+
end
66+
end
67+
68+
def parse_star
69+
node = Star.new(Symbol.new(@next_token.last, Symbol::GREEDY_EXP))
70+
advance_token
71+
node
72+
end
73+
74+
def parse_group
75+
advance_token
76+
node = parse_expressions
77+
if @next_token.first == :RPAREN
78+
node = Group.new(node)
79+
advance_token
80+
node
81+
else
82+
raise "error"
83+
end
84+
end
85+
86+
def parse_terminal
87+
node = case @next_token.first
88+
when :SYMBOL
89+
Symbol.new(@next_token.last)
90+
when :LITERAL
91+
Literal.new(@next_token.last)
92+
when :SLASH
93+
Slash.new(@next_token.last)
94+
when :DOT
95+
Dot.new(@next_token.last)
96+
end
97+
98+
advance_token
99+
node
100+
end
101+
end
102+
end
168103
end
169-
170-
# reduce 11 omitted
171-
172-
# reduce 12 omitted
173-
174-
# reduce 13 omitted
175-
176-
# reduce 14 omitted
177-
178-
def _reduce_15(val, _values)
179-
Slash.new(val.first)
180-
end
181-
182-
def _reduce_16(val, _values)
183-
Symbol.new(val.first)
184-
end
185-
186-
def _reduce_17(val, _values)
187-
Literal.new(val.first)
188-
end
189-
190-
def _reduce_18(val, _values)
191-
Dot.new(val.first)
192-
end
193-
194-
def _reduce_none(val, _values)
195-
val[0]
196-
end
197-
198-
end # class Parser
199-
end # module Journey
200-
end # module ActionDispatch

actionpack/lib/action_dispatch/journey/parser.y

Lines changed: 0 additions & 50 deletions
This file was deleted.

0 commit comments

Comments
 (0)