lrama 0.5.1 → 0.5.2
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 +4 -4
- data/.github/workflows/test.yaml +2 -3
- data/.gitignore +1 -0
- data/README.md +1 -1
- data/Steepfile +2 -0
- data/lib/lrama/grammar.rb +29 -21
- data/lib/lrama/lexer.rb +35 -1
- data/lib/lrama/parser/token_scanner.rb +4 -0
- data/lib/lrama/parser.rb +11 -4
- data/lib/lrama/version.rb +1 -1
- data/lrama.gemspec +1 -1
- data/rbs_collection.lock.yaml +26 -0
- data/rbs_collection.yaml +22 -0
- data/sig/lrama/report.rbs +15 -0
- data/sig/lrama/warning.rbs +16 -0
- data/template/bison/yacc.c +34 -32
- metadata +7 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 26bcef726eebf61de01200b02250b2aef91ca957df43db5d72e99ae30e320f4e
|
4
|
+
data.tar.gz: 751b62d184806c0cff319bffc4990ad0de9dd143accafdf6bdf1652eb02512b7
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 02001b5b137d023c4f5ce48c1d9284ce90c5aad2ec269d7ef7a17e6ffa65be9e553e213400fc63d8256c0209908fc4b314de261993442af4a25772449453fbeb
|
7
|
+
data.tar.gz: 76a9f6bac19c0dcbdc6f9e2834d3c437f9fc5eb999d1b45d20362d52a94c9dc74bca3411b681993e28f388374df7f9b8ea7d0f534e53399efb8cc24112f75ea4
|
data/.github/workflows/test.yaml
CHANGED
@@ -35,6 +35,7 @@ jobs:
|
|
35
35
|
ruby-version: ${{ matrix.ruby }}
|
36
36
|
bundler-cache: true
|
37
37
|
- run: bundle install
|
38
|
+
- run: bundle exec rbs collection install
|
38
39
|
- run: bundle exec steep check
|
39
40
|
test-ruby:
|
40
41
|
runs-on: ubuntu-20.04
|
@@ -57,9 +58,7 @@ jobs:
|
|
57
58
|
- run: mkdir -p tool/lrama
|
58
59
|
working-directory: ../ruby
|
59
60
|
- name: Copy Lrama to ruby/tool
|
60
|
-
run: cp -r exe lib ../ruby/tool/lrama
|
61
|
-
# TODO: Consider how to manage changes on ruby/ruby master and ruby/lrama
|
62
|
-
# run: cp -r exe lib template ../ruby/tool/lrama
|
61
|
+
run: cp -r exe lib template ../ruby/tool/lrama
|
63
62
|
working-directory:
|
64
63
|
- run: tree tool/lrama
|
65
64
|
working-directory: ../ruby
|
data/.gitignore
CHANGED
data/README.md
CHANGED
@@ -62,7 +62,7 @@ This branch generates "parse.c" compatible with Bison 3.8.2 for ruby 3.0, 3.1, 3
|
|
62
62
|
|
63
63
|
1. Update `Lrama::VERSION`
|
64
64
|
2. Release as a gem by `rake release`
|
65
|
-
3. Update Lrama in ruby/ruby by `cp -r exe lib ruby/tool/lrama`
|
65
|
+
3. Update Lrama in ruby/ruby by `cp -r LEGAL.md MIT exe lib ruby/tool/lrama`
|
66
66
|
4. Create new release on [GitHub](https://github.com/ruby/lrama/releases)
|
67
67
|
|
68
68
|
## License
|
data/Steepfile
CHANGED
data/lib/lrama/grammar.rb
CHANGED
@@ -155,16 +155,16 @@ module Lrama
|
|
155
155
|
last_column = ref.last_column
|
156
156
|
|
157
157
|
case
|
158
|
-
when ref.
|
158
|
+
when ref.value == "$" && ref.type == :dollar # $$
|
159
159
|
# Omit "<>"
|
160
160
|
member = tag.s_value[1..-2]
|
161
161
|
str = "((*yyvaluep).#{member})"
|
162
|
-
when ref.
|
162
|
+
when ref.value == "$" && ref.type == :at # @$
|
163
163
|
str = "(*yylocationp)"
|
164
164
|
when ref.type == :dollar # $n
|
165
|
-
raise "$#{ref.
|
165
|
+
raise "$#{ref.value} can not be used in %printer."
|
166
166
|
when ref.type == :at # @n
|
167
|
-
raise "@#{ref.
|
167
|
+
raise "@#{ref.value} can not be used in %printer."
|
168
168
|
else
|
169
169
|
raise "Unexpected. #{self}, #{ref}"
|
170
170
|
end
|
@@ -190,19 +190,19 @@ module Lrama
|
|
190
190
|
last_column = ref.last_column
|
191
191
|
|
192
192
|
case
|
193
|
-
when ref.
|
193
|
+
when ref.value == "$" && ref.type == :dollar # $$
|
194
194
|
# Omit "<>"
|
195
195
|
member = ref.tag.s_value[1..-2]
|
196
196
|
str = "(yyval.#{member})"
|
197
|
-
when ref.
|
197
|
+
when ref.value == "$" && ref.type == :at # @$
|
198
198
|
str = "(yyloc)"
|
199
199
|
when ref.type == :dollar # $n
|
200
|
-
i = -ref.position_in_rhs + ref.
|
200
|
+
i = -ref.position_in_rhs + ref.value
|
201
201
|
# Omit "<>"
|
202
202
|
member = ref.tag.s_value[1..-2]
|
203
203
|
str = "(yyvsp[#{i}].#{member})"
|
204
204
|
when ref.type == :at # @n
|
205
|
-
i = -ref.position_in_rhs + ref.
|
205
|
+
i = -ref.position_in_rhs + ref.value
|
206
206
|
str = "(yylsp[#{i}])"
|
207
207
|
else
|
208
208
|
raise "Unexpected. #{self}, #{ref}"
|
@@ -226,14 +226,14 @@ module Lrama
|
|
226
226
|
last_column = ref.last_column
|
227
227
|
|
228
228
|
case
|
229
|
-
when ref.
|
229
|
+
when ref.value == "$" && ref.type == :dollar # $$
|
230
230
|
str = "yylval"
|
231
|
-
when ref.
|
231
|
+
when ref.value == "$" && ref.type == :at # @$
|
232
232
|
str = "yylloc"
|
233
233
|
when ref.type == :dollar # $n
|
234
|
-
raise "$#{ref.
|
234
|
+
raise "$#{ref.value} can not be used in initial_action."
|
235
235
|
when ref.type == :at # @n
|
236
|
-
raise "@#{ref.
|
236
|
+
raise "@#{ref.value} can not be used in initial_action."
|
237
237
|
else
|
238
238
|
raise "Unexpected. #{self}, #{ref}"
|
239
239
|
end
|
@@ -247,7 +247,7 @@ module Lrama
|
|
247
247
|
|
248
248
|
# type: :dollar or :at
|
249
249
|
# ex_tag: "$<tag>1" (Optional)
|
250
|
-
Reference = Struct.new(:type, :
|
250
|
+
Reference = Struct.new(:type, :value, :ex_tag, :first_column, :last_column, :referring_symbol, :position_in_rhs, keyword_init: true) do
|
251
251
|
def tag
|
252
252
|
if ex_tag
|
253
253
|
ex_tag
|
@@ -382,8 +382,8 @@ module Lrama
|
|
382
382
|
end
|
383
383
|
|
384
384
|
def build_references(token_code)
|
385
|
-
token_code.references.map! do |type,
|
386
|
-
Reference.new(type: type,
|
385
|
+
token_code.references.map! do |type, value, tag, first_column, last_column|
|
386
|
+
Reference.new(type: type, value: value, ex_tag: tag, first_column: first_column, last_column: last_column)
|
387
387
|
end
|
388
388
|
|
389
389
|
token_code
|
@@ -627,15 +627,23 @@ module Lrama
|
|
627
627
|
ref.position_in_rhs = i - 1
|
628
628
|
next if ref.type == :at
|
629
629
|
# $$, $n, @$, @n can be used in any actions
|
630
|
-
number = ref.number
|
631
630
|
|
632
|
-
if
|
631
|
+
if ref.value == "$"
|
633
632
|
# TODO: Should be postponed after middle actions are extracted?
|
634
633
|
ref.referring_symbol = lhs
|
635
|
-
|
636
|
-
raise "Can not refer following component. #{
|
637
|
-
rhs1[
|
638
|
-
ref.referring_symbol = rhs1[
|
634
|
+
elsif ref.value.is_a?(Integer)
|
635
|
+
raise "Can not refer following component. #{ref.value} >= #{i}. #{token}" if ref.value >= i
|
636
|
+
rhs1[ref.value - 1].referred = true
|
637
|
+
ref.referring_symbol = rhs1[ref.value - 1]
|
638
|
+
elsif ref.value.is_a?(String)
|
639
|
+
target_tokens = ([lhs] + rhs1 + [code]).compact.first(i)
|
640
|
+
referring_symbol_candidate = target_tokens.filter {|token| token.referred_by?(ref.value) }
|
641
|
+
raise "Referring symbol `#{ref.value}` is duplicated. #{token}" if referring_symbol_candidate.size >= 2
|
642
|
+
raise "Referring symbol `#{ref.value}` is not found. #{token}" if referring_symbol_candidate.count == 0
|
643
|
+
|
644
|
+
referring_symbol = referring_symbol_candidate.first
|
645
|
+
referring_symbol.referred = true
|
646
|
+
ref.referring_symbol = referring_symbol
|
639
647
|
end
|
640
648
|
end
|
641
649
|
end
|
data/lib/lrama/lexer.rb
CHANGED
@@ -7,7 +7,7 @@ module Lrama
|
|
7
7
|
include Lrama::Report::Duration
|
8
8
|
|
9
9
|
# s_value is semantic value
|
10
|
-
Token = Struct.new(:type, :s_value, keyword_init: true) do
|
10
|
+
Token = Struct.new(:type, :s_value, :alias, keyword_init: true) do
|
11
11
|
Type = Struct.new(:id, :name, keyword_init: true)
|
12
12
|
|
13
13
|
attr_accessor :line, :column, :referred
|
@@ -18,6 +18,31 @@ module Lrama
|
|
18
18
|
"#{super} line: #{line}, column: #{column}"
|
19
19
|
end
|
20
20
|
|
21
|
+
def referred_by?(string)
|
22
|
+
[self.s_value, self.alias].include?(string)
|
23
|
+
end
|
24
|
+
|
25
|
+
def ==(other)
|
26
|
+
self.class == other.class && self.type == other.type && self.s_value == other.s_value
|
27
|
+
end
|
28
|
+
|
29
|
+
def numberize_references(lhs, rhs)
|
30
|
+
self.references.map! {|ref|
|
31
|
+
ref_name = ref[1]
|
32
|
+
if ref_name.is_a?(String) && ref_name != '$'
|
33
|
+
value =
|
34
|
+
if lhs.referred_by?(ref_name)
|
35
|
+
'$'
|
36
|
+
else
|
37
|
+
rhs.find_index {|token| token.referred_by?(ref_name) } + 1
|
38
|
+
end
|
39
|
+
[ref[0], value, ref[2], ref[3], ref[4]]
|
40
|
+
else
|
41
|
+
ref
|
42
|
+
end
|
43
|
+
}
|
44
|
+
end
|
45
|
+
|
21
46
|
@i = 0
|
22
47
|
@types = []
|
23
48
|
|
@@ -47,6 +72,7 @@ module Lrama
|
|
47
72
|
define_type(:Number) # 0
|
48
73
|
define_type(:Ident_Colon) # k_if:, k_if : (spaces can be there)
|
49
74
|
define_type(:Ident) # api.pure, tNUMBER
|
75
|
+
define_type(:Named_Ref) # [foo]
|
50
76
|
define_type(:Semicolon) # ;
|
51
77
|
define_type(:Bar) # |
|
52
78
|
define_type(:String) # "str"
|
@@ -166,10 +192,15 @@ module Lrama
|
|
166
192
|
tokens << create_token(Token::Number, Integer(ss[0]), line, ss.pos - column)
|
167
193
|
when ss.scan(/(<[a-zA-Z0-9_]+>)/)
|
168
194
|
tokens << create_token(Token::Tag, ss[0], line, ss.pos - column)
|
195
|
+
when ss.scan(/([a-zA-Z_.][-a-zA-Z0-9_.]*)\[([a-zA-Z_.][-a-zA-Z0-9_.]*)\]\s*:/)
|
196
|
+
tokens << create_token(Token::Ident_Colon, ss[1], line, ss.pos - column)
|
197
|
+
tokens << create_token(Token::Named_Ref, ss[2], line, ss.pos - column)
|
169
198
|
when ss.scan(/([a-zA-Z_.][-a-zA-Z0-9_.]*)\s*:/)
|
170
199
|
tokens << create_token(Token::Ident_Colon, ss[1], line, ss.pos - column)
|
171
200
|
when ss.scan(/([a-zA-Z_.][-a-zA-Z0-9_.]*)/)
|
172
201
|
tokens << create_token(Token::Ident, ss[0], line, ss.pos - column)
|
202
|
+
when ss.scan(/\[([a-zA-Z_.][-a-zA-Z0-9_.]*)\]/)
|
203
|
+
tokens << create_token(Token::Named_Ref, ss[1], line, ss.pos - column)
|
173
204
|
when ss.scan(/%expect/)
|
174
205
|
tokens << create_token(Token::P_expect, ss[0], line, ss.pos - column)
|
175
206
|
when ss.scan(/%define/)
|
@@ -257,6 +288,9 @@ module Lrama
|
|
257
288
|
when ss.scan(/\$(<[a-zA-Z0-9_]+>)?(\d+)/) # $1, $2, $<long>1
|
258
289
|
tag = ss[1] ? create_token(Token::Tag, ss[1], line, str.length) : nil
|
259
290
|
references << [:dollar, Integer(ss[2]), tag, str.length, str.length + ss[0].length - 1]
|
291
|
+
when ss.scan(/\$(<[a-zA-Z0-9_]+>)?([a-zA-Z_.][-a-zA-Z0-9_.]*)/) # $foo, $expr, $<long>program
|
292
|
+
tag = ss[1] ? create_token(Token::Tag, ss[1], line, str.length) : nil
|
293
|
+
references << [:dollar, ss[2], tag, str.length, str.length + ss[0].length - 1]
|
260
294
|
when ss.scan(/@\$/) # @$
|
261
295
|
references << [:at, "$", nil, str.length, str.length + ss[0].length - 1]
|
262
296
|
when ss.scan(/@(\d)+/) # @1
|
data/lib/lrama/parser.rb
CHANGED
@@ -175,8 +175,11 @@ module Lrama
|
|
175
175
|
# LHS
|
176
176
|
lhs = ts.consume!(T::Ident_Colon) # class:
|
177
177
|
lhs.type = T::Ident
|
178
|
+
if named_ref = ts.consume(T::Named_Ref)
|
179
|
+
lhs.alias = named_ref.s_value
|
180
|
+
end
|
178
181
|
|
179
|
-
rhs = parse_grammar_rule_rhs(ts, grammar)
|
182
|
+
rhs = parse_grammar_rule_rhs(ts, grammar, lhs)
|
180
183
|
|
181
184
|
grammar.add_rule(lhs: lhs, rhs: rhs, lineno: rhs.first ? rhs.first.line : lhs.line)
|
182
185
|
|
@@ -186,7 +189,7 @@ module Lrama
|
|
186
189
|
# |
|
187
190
|
bar_lineno = ts.current_token.line
|
188
191
|
ts.next
|
189
|
-
rhs = parse_grammar_rule_rhs(ts, grammar)
|
192
|
+
rhs = parse_grammar_rule_rhs(ts, grammar, lhs)
|
190
193
|
grammar.add_rule(lhs: lhs, rhs: rhs, lineno: rhs.first ? rhs.first.line : bar_lineno)
|
191
194
|
when T::Semicolon
|
192
195
|
# ;
|
@@ -205,13 +208,13 @@ module Lrama
|
|
205
208
|
end
|
206
209
|
end
|
207
210
|
|
208
|
-
def parse_grammar_rule_rhs(ts, grammar)
|
211
|
+
def parse_grammar_rule_rhs(ts, grammar, lhs)
|
209
212
|
a = []
|
210
213
|
prec_seen = false
|
211
214
|
code_after_prec = false
|
212
215
|
|
213
216
|
while true do
|
214
|
-
# TODO:
|
217
|
+
# TODO: String can be here
|
215
218
|
case ts.current_type
|
216
219
|
when T::Ident
|
217
220
|
# keyword_class
|
@@ -244,9 +247,13 @@ module Lrama
|
|
244
247
|
end
|
245
248
|
|
246
249
|
code = ts.current_token
|
250
|
+
code.numberize_references(lhs, a)
|
247
251
|
grammar.build_references(code)
|
248
252
|
a << code
|
249
253
|
ts.next
|
254
|
+
when T::Named_Ref
|
255
|
+
ts.previous_token.alias = ts.current_token.s_value
|
256
|
+
ts.next
|
250
257
|
when T::Bar
|
251
258
|
# |
|
252
259
|
break
|
data/lib/lrama/version.rb
CHANGED
data/lrama.gemspec
CHANGED
@@ -8,7 +8,7 @@ Gem::Specification.new do |spec|
|
|
8
8
|
|
9
9
|
spec.summary = "LALR (1) parser generator written by Ruby"
|
10
10
|
spec.description = "LALR (1) parser generator written by Ruby"
|
11
|
-
spec.homepage = "https://github.com/
|
11
|
+
spec.homepage = "https://github.com/ruby/lrama"
|
12
12
|
# See LEGAL.md file for detail
|
13
13
|
spec.license = "GNU GPLv3"
|
14
14
|
spec.required_ruby_version = Gem::Requirement.new(">= 2.5.0")
|
@@ -0,0 +1,26 @@
|
|
1
|
+
---
|
2
|
+
sources:
|
3
|
+
- type: git
|
4
|
+
name: ruby/gem_rbs_collection
|
5
|
+
revision: 28208148c7e64a25e9b86b9723b4c3a2cef14e81
|
6
|
+
remote: https://github.com/ruby/gem_rbs_collection.git
|
7
|
+
repo_dir: gems
|
8
|
+
path: ".gem_rbs_collection"
|
9
|
+
gems:
|
10
|
+
- name: erb
|
11
|
+
version: '0'
|
12
|
+
source:
|
13
|
+
type: stdlib
|
14
|
+
- name: stackprof
|
15
|
+
version: '0.2'
|
16
|
+
source:
|
17
|
+
type: git
|
18
|
+
name: ruby/gem_rbs_collection
|
19
|
+
revision: 28208148c7e64a25e9b86b9723b4c3a2cef14e81
|
20
|
+
remote: https://github.com/ruby/gem_rbs_collection.git
|
21
|
+
repo_dir: gems
|
22
|
+
- name: strscan
|
23
|
+
version: '0'
|
24
|
+
source:
|
25
|
+
type: stdlib
|
26
|
+
gemfile_lock_path: Gemfile.lock
|
data/rbs_collection.yaml
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
# Download sources
|
2
|
+
sources:
|
3
|
+
- type: git
|
4
|
+
name: ruby/gem_rbs_collection
|
5
|
+
remote: https://github.com/ruby/gem_rbs_collection.git
|
6
|
+
revision: main
|
7
|
+
repo_dir: gems
|
8
|
+
|
9
|
+
# You can specify local directories as sources also.
|
10
|
+
# - type: local
|
11
|
+
# path: path/to/your/local/repository
|
12
|
+
|
13
|
+
# A directory to install the downloaded RBSs
|
14
|
+
path: .gem_rbs_collection
|
15
|
+
|
16
|
+
gems:
|
17
|
+
- name: erb
|
18
|
+
- name: strscan
|
19
|
+
# Skip loading rbs gem's RBS.
|
20
|
+
# It's unnecessary if you don't use rbs as a library.
|
21
|
+
- name: rbs
|
22
|
+
ignore: true
|
@@ -0,0 +1,15 @@
|
|
1
|
+
module Lrama
|
2
|
+
class Report
|
3
|
+
module Profile
|
4
|
+
def self.report_profile: { -> void } -> StackProf::result
|
5
|
+
end
|
6
|
+
|
7
|
+
module Duration
|
8
|
+
self.@_report_duration_enabled: bool | nil
|
9
|
+
|
10
|
+
def self.enable: -> void
|
11
|
+
def self.enabled?: -> bool
|
12
|
+
def report_duration: [T] (_ToS method_name) { -> T } -> T
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
module Lrama
|
2
|
+
class Warning
|
3
|
+
interface _Appendable
|
4
|
+
def <<: (String message) -> self
|
5
|
+
end
|
6
|
+
|
7
|
+
@out: _Appendable
|
8
|
+
|
9
|
+
attr_reader errors: Array[String]
|
10
|
+
attr_reader warns: Array[String]
|
11
|
+
def initialize: (?_Appendable out) -> void
|
12
|
+
def error: (String message) -> void
|
13
|
+
def warn: (String message) -> void
|
14
|
+
def has_error?: -> bool
|
15
|
+
end
|
16
|
+
end
|
data/template/bison/yacc.c
CHANGED
@@ -114,7 +114,7 @@
|
|
114
114
|
#ifndef YYDEBUG
|
115
115
|
# define YYDEBUG 0
|
116
116
|
#endif
|
117
|
-
#if YYDEBUG
|
117
|
+
#if YYDEBUG && !defined(yydebug)
|
118
118
|
extern int yydebug;
|
119
119
|
#endif
|
120
120
|
<%-# b4_percent_code_get([[requires]]). %code is not supported -%>
|
@@ -731,7 +731,7 @@ do { \
|
|
731
731
|
|
732
732
|
/* Temporary convenience wrapper in case some people defined the
|
733
733
|
undocumented and private YY_LOCATION_PRINT macros. */
|
734
|
-
# define YYLOCATION_PRINT(File, Loc) YY_LOCATION_PRINT(File, *(Loc))
|
734
|
+
# define YYLOCATION_PRINT(File, Loc<%= output.user_args %>) YY_LOCATION_PRINT(File, *(Loc)<%= output.user_args %>)
|
735
735
|
|
736
736
|
# elif defined YYLTYPE_IS_TRIVIAL && YYLTYPE_IS_TRIVIAL
|
737
737
|
|
@@ -767,11 +767,11 @@ yy_location_print_ (FILE *yyo, YYLTYPE const * const yylocp)
|
|
767
767
|
|
768
768
|
/* Temporary convenience wrapper in case some people defined the
|
769
769
|
undocumented and private YY_LOCATION_PRINT macros. */
|
770
|
-
# define YY_LOCATION_PRINT(File, Loc) YYLOCATION_PRINT(File, &(Loc))
|
770
|
+
# define YY_LOCATION_PRINT(File, Loc<%= output.user_args %>) YYLOCATION_PRINT(File, &(Loc)<%= output.user_args %>)
|
771
771
|
|
772
772
|
# else
|
773
773
|
|
774
|
-
# define YYLOCATION_PRINT(File, Loc) ((void) 0)
|
774
|
+
# define YYLOCATION_PRINT(File, Loc<%= output.user_args %>) ((void) 0)
|
775
775
|
/* Temporary convenience wrapper in case some people defined the
|
776
776
|
undocumented and private YY_LOCATION_PRINT macros. */
|
777
777
|
# define YY_LOCATION_PRINT YYLOCATION_PRINT
|
@@ -780,13 +780,13 @@ yy_location_print_ (FILE *yyo, YYLTYPE const * const yylocp)
|
|
780
780
|
# endif /* !defined YYLOCATION_PRINT */
|
781
781
|
|
782
782
|
|
783
|
-
# define YY_SYMBOL_PRINT(Title, Kind, Value, Location)
|
783
|
+
# define YY_SYMBOL_PRINT(Title, Kind, Value, Location<%= output.user_args %>) \
|
784
784
|
do { \
|
785
785
|
if (yydebug) \
|
786
786
|
{ \
|
787
787
|
YYFPRINTF (stderr, "%s ", Title); \
|
788
788
|
yy_symbol_print (stderr, \
|
789
|
-
Kind, Value, Location
|
789
|
+
Kind, Value, Location<%= output.user_args %>); \
|
790
790
|
YYFPRINTF (stderr, "\n"); \
|
791
791
|
} \
|
792
792
|
} while (0)
|
@@ -828,9 +828,9 @@ yy_symbol_print (FILE *yyo,
|
|
828
828
|
YYFPRINTF (yyo, "%s %s (",
|
829
829
|
yykind < YYNTOKENS ? "token" : "nterm", yysymbol_name (yykind));
|
830
830
|
|
831
|
-
YYLOCATION_PRINT (yyo, yylocationp);
|
831
|
+
YYLOCATION_PRINT (yyo, yylocationp<%= output.user_args %>);
|
832
832
|
YYFPRINTF (yyo, ": ");
|
833
|
-
yy_symbol_value_print (yyo, yykind, yyvaluep, yylocationp
|
833
|
+
yy_symbol_value_print (yyo, yykind, yyvaluep, yylocationp<%= output.user_args %>);
|
834
834
|
YYFPRINTF (yyo, ")");
|
835
835
|
}
|
836
836
|
|
@@ -840,7 +840,7 @@ yy_symbol_print (FILE *yyo,
|
|
840
840
|
`------------------------------------------------------------------*/
|
841
841
|
|
842
842
|
static void
|
843
|
-
yy_stack_print (yy_state_t *yybottom, yy_state_t *yytop)
|
843
|
+
yy_stack_print (yy_state_t *yybottom, yy_state_t *yytop<%= output.user_formals %>)
|
844
844
|
{
|
845
845
|
YYFPRINTF (stderr, "Stack now");
|
846
846
|
for (; yybottom <= yytop; yybottom++)
|
@@ -851,10 +851,10 @@ yy_stack_print (yy_state_t *yybottom, yy_state_t *yytop)
|
|
851
851
|
YYFPRINTF (stderr, "\n");
|
852
852
|
}
|
853
853
|
|
854
|
-
# define YY_STACK_PRINT(Bottom, Top)
|
854
|
+
# define YY_STACK_PRINT(Bottom, Top<%= output.user_args %>) \
|
855
855
|
do { \
|
856
856
|
if (yydebug) \
|
857
|
-
yy_stack_print ((Bottom), (Top));
|
857
|
+
yy_stack_print ((Bottom), (Top)<%= output.user_args %>); \
|
858
858
|
} while (0)
|
859
859
|
|
860
860
|
|
@@ -878,25 +878,27 @@ yy_reduce_print (yy_state_t *yyssp, YYSTYPE *yyvsp, YYLTYPE *yylsp,
|
|
878
878
|
yy_symbol_print (stderr,
|
879
879
|
YY_ACCESSING_SYMBOL (+yyssp[yyi + 1 - yynrhs]),
|
880
880
|
&yyvsp[(yyi + 1) - (yynrhs)],
|
881
|
-
&(yylsp[(yyi + 1) - (yynrhs)])
|
881
|
+
&(yylsp[(yyi + 1) - (yynrhs)])<%= output.user_args %>);
|
882
882
|
YYFPRINTF (stderr, "\n");
|
883
883
|
}
|
884
884
|
}
|
885
885
|
|
886
|
-
# define YY_REDUCE_PRINT(Rule)
|
886
|
+
# define YY_REDUCE_PRINT(Rule<%= output.user_args %>) \
|
887
887
|
do { \
|
888
888
|
if (yydebug) \
|
889
|
-
yy_reduce_print (yyssp, yyvsp, yylsp, Rule
|
889
|
+
yy_reduce_print (yyssp, yyvsp, yylsp, Rule<%= output.user_args %>); \
|
890
890
|
} while (0)
|
891
891
|
|
892
892
|
/* Nonzero means print parse trace. It is left uninitialized so that
|
893
893
|
multiple parsers can coexist. */
|
894
|
+
#ifndef yydebug
|
894
895
|
int yydebug;
|
896
|
+
#endif
|
895
897
|
#else /* !YYDEBUG */
|
896
898
|
# define YYDPRINTF(Args) ((void) 0)
|
897
|
-
# define YY_SYMBOL_PRINT(Title, Kind, Value, Location)
|
898
|
-
# define YY_STACK_PRINT(Bottom, Top)
|
899
|
-
# define YY_REDUCE_PRINT(Rule)
|
899
|
+
# define YY_SYMBOL_PRINT(Title, Kind, Value, Location<%= output.user_args %>)
|
900
|
+
# define YY_STACK_PRINT(Bottom, Top<%= output.user_args %>)
|
901
|
+
# define YY_REDUCE_PRINT(Rule<%= output.user_args %>)
|
900
902
|
#endif /* !YYDEBUG */
|
901
903
|
|
902
904
|
|
@@ -1110,7 +1112,7 @@ yy_syntax_error_arguments (const yypcontext_t *yyctx,
|
|
1110
1112
|
required number of bytes is too large to store. */
|
1111
1113
|
static int
|
1112
1114
|
yysyntax_error (YYPTRDIFF_T *yymsg_alloc, char **yymsg,
|
1113
|
-
const yypcontext_t *yyctx)
|
1115
|
+
const yypcontext_t *yyctx<%= output.user_formals %>)
|
1114
1116
|
{
|
1115
1117
|
enum { YYARGS_MAX = 5 };
|
1116
1118
|
/* Internationalized format string. */
|
@@ -1200,7 +1202,7 @@ yydestruct (const char *yymsg,
|
|
1200
1202
|
<%= output.parse_param_use("yyvaluep", "yylocationp") %>
|
1201
1203
|
if (!yymsg)
|
1202
1204
|
yymsg = "Deleting";
|
1203
|
-
YY_SYMBOL_PRINT (yymsg, yykind, yyvaluep, yylocationp);
|
1205
|
+
YY_SYMBOL_PRINT (yymsg, yykind, yyvaluep, yylocationp<%= output.user_args %>);
|
1204
1206
|
|
1205
1207
|
YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
|
1206
1208
|
YY_USE (yykind);
|
@@ -1227,11 +1229,11 @@ int yychar;
|
|
1227
1229
|
/* The semantic value of the lookahead symbol. */
|
1228
1230
|
/* Default value used for initialization, for pacifying older GCCs
|
1229
1231
|
or non-GCC compilers. */
|
1230
|
-
YY_INITIAL_VALUE (static YYSTYPE yyval_default;)
|
1232
|
+
YY_INITIAL_VALUE (static const YYSTYPE yyval_default;)
|
1231
1233
|
YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default);
|
1232
1234
|
|
1233
1235
|
/* Location data for the lookahead symbol. */
|
1234
|
-
static YYLTYPE yyloc_default
|
1236
|
+
static const YYLTYPE yyloc_default
|
1235
1237
|
# if defined YYLTYPE_IS_TRIVIAL && YYLTYPE_IS_TRIVIAL
|
1236
1238
|
= { 1, 1, 1, 1 }
|
1237
1239
|
# endif
|
@@ -1322,7 +1324,7 @@ yysetstate:
|
|
1322
1324
|
YY_IGNORE_USELESS_CAST_BEGIN
|
1323
1325
|
*yyssp = YY_CAST (yy_state_t, yystate);
|
1324
1326
|
YY_IGNORE_USELESS_CAST_END
|
1325
|
-
YY_STACK_PRINT (yyss, yyssp);
|
1327
|
+
YY_STACK_PRINT (yyss, yyssp<%= output.user_args %>);
|
1326
1328
|
|
1327
1329
|
if (yyss + yystacksize - 1 <= yyssp)
|
1328
1330
|
#if !defined yyoverflow && !defined YYSTACK_RELOCATE
|
@@ -1440,7 +1442,7 @@ yybackup:
|
|
1440
1442
|
else
|
1441
1443
|
{
|
1442
1444
|
yytoken = YYTRANSLATE (yychar);
|
1443
|
-
YY_SYMBOL_PRINT ("Next token is", yytoken, &yylval, &yylloc);
|
1445
|
+
YY_SYMBOL_PRINT ("Next token is", yytoken, &yylval, &yylloc<%= output.user_args %>);
|
1444
1446
|
}
|
1445
1447
|
|
1446
1448
|
/* If the proper action on seeing token YYTOKEN is to reduce or to
|
@@ -1463,7 +1465,7 @@ yybackup:
|
|
1463
1465
|
yyerrstatus--;
|
1464
1466
|
|
1465
1467
|
/* Shift the lookahead token. */
|
1466
|
-
YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc);
|
1468
|
+
YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc<%= output.user_args %>);
|
1467
1469
|
yystate = yyn;
|
1468
1470
|
YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
|
1469
1471
|
*++yyvsp = yylval;
|
@@ -1505,7 +1507,7 @@ yyreduce:
|
|
1505
1507
|
/* Default location. */
|
1506
1508
|
YYLLOC_DEFAULT (yyloc, (yylsp - yylen), yylen);
|
1507
1509
|
yyerror_range[1] = yyloc;
|
1508
|
-
YY_REDUCE_PRINT (yyn);
|
1510
|
+
YY_REDUCE_PRINT (yyn<%= output.user_args %>);
|
1509
1511
|
switch (yyn)
|
1510
1512
|
{
|
1511
1513
|
<%= output.user_actions -%>
|
@@ -1523,7 +1525,7 @@ yyreduce:
|
|
1523
1525
|
case of YYERROR or YYBACKUP, subsequent parser actions might lead
|
1524
1526
|
to an incorrect destructor call or verbose syntax error message
|
1525
1527
|
before the lookahead is translated. */
|
1526
|
-
YY_SYMBOL_PRINT ("-> $$ =", YY_CAST (yysymbol_kind_t, yyr1[yyn]), &yyval, &yyloc);
|
1528
|
+
YY_SYMBOL_PRINT ("-> $$ =", YY_CAST (yysymbol_kind_t, yyr1[yyn]), &yyval, &yyloc<%= output.user_args %>);
|
1527
1529
|
|
1528
1530
|
YYPOPSTACK (yylen);
|
1529
1531
|
yylen = 0;
|
@@ -1561,7 +1563,7 @@ yyerrlab:
|
|
1561
1563
|
= {yyssp, yytoken, &yylloc};
|
1562
1564
|
char const *yymsgp = YY_("syntax error");
|
1563
1565
|
int yysyntax_error_status;
|
1564
|
-
yysyntax_error_status = yysyntax_error (&yymsg_alloc, &yymsg, &yyctx);
|
1566
|
+
yysyntax_error_status = yysyntax_error (&yymsg_alloc, &yymsg, &yyctx<%= output.user_args %>);
|
1565
1567
|
if (yysyntax_error_status == 0)
|
1566
1568
|
yymsgp = yymsg;
|
1567
1569
|
else if (yysyntax_error_status == -1)
|
@@ -1573,7 +1575,7 @@ yyerrlab:
|
|
1573
1575
|
if (yymsg)
|
1574
1576
|
{
|
1575
1577
|
yysyntax_error_status
|
1576
|
-
= yysyntax_error (&yymsg_alloc, &yymsg, &yyctx);
|
1578
|
+
= yysyntax_error (&yymsg_alloc, &yymsg, &yyctx<%= output.user_args %>);
|
1577
1579
|
yymsgp = yymsg;
|
1578
1580
|
}
|
1579
1581
|
else
|
@@ -1628,7 +1630,7 @@ yyerrorlab:
|
|
1628
1630
|
this YYERROR. */
|
1629
1631
|
YYPOPSTACK (yylen);
|
1630
1632
|
yylen = 0;
|
1631
|
-
YY_STACK_PRINT (yyss, yyssp);
|
1633
|
+
YY_STACK_PRINT (yyss, yyssp<%= output.user_args %>);
|
1632
1634
|
yystate = *yyssp;
|
1633
1635
|
goto yyerrlab1;
|
1634
1636
|
|
@@ -1663,7 +1665,7 @@ yyerrlab1:
|
|
1663
1665
|
YY_ACCESSING_SYMBOL (yystate), yyvsp, yylsp<%= output.user_args %>);
|
1664
1666
|
YYPOPSTACK (1);
|
1665
1667
|
yystate = *yyssp;
|
1666
|
-
YY_STACK_PRINT (yyss, yyssp);
|
1668
|
+
YY_STACK_PRINT (yyss, yyssp<%= output.user_args %>);
|
1667
1669
|
}
|
1668
1670
|
|
1669
1671
|
YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
|
@@ -1675,7 +1677,7 @@ yyerrlab1:
|
|
1675
1677
|
YYLLOC_DEFAULT (*yylsp, yyerror_range, 2);
|
1676
1678
|
|
1677
1679
|
/* Shift the error token. */
|
1678
|
-
YY_SYMBOL_PRINT ("Shifting", YY_ACCESSING_SYMBOL (yyn), yyvsp, yylsp);
|
1680
|
+
YY_SYMBOL_PRINT ("Shifting", YY_ACCESSING_SYMBOL (yyn), yyvsp, yylsp<%= output.user_args %>);
|
1679
1681
|
|
1680
1682
|
yystate = yyn;
|
1681
1683
|
goto yynewstate;
|
@@ -1721,7 +1723,7 @@ yyreturnlab:
|
|
1721
1723
|
/* Do not reclaim the symbols of the rule whose action triggered
|
1722
1724
|
this YYABORT or YYACCEPT. */
|
1723
1725
|
YYPOPSTACK (yylen);
|
1724
|
-
YY_STACK_PRINT (yyss, yyssp);
|
1726
|
+
YY_STACK_PRINT (yyss, yyssp<%= output.user_args %>);
|
1725
1727
|
while (yyssp != yyss)
|
1726
1728
|
{
|
1727
1729
|
yydestruct ("Cleanup: popping",
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: lrama
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.5.
|
4
|
+
version: 0.5.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Yuichiro Kaneko
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2023-
|
11
|
+
date: 2023-06-13 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
13
|
description: LALR (1) parser generator written by Ruby
|
14
14
|
email:
|
@@ -49,13 +49,17 @@ files:
|
|
49
49
|
- lib/lrama/version.rb
|
50
50
|
- lib/lrama/warning.rb
|
51
51
|
- lrama.gemspec
|
52
|
+
- rbs_collection.lock.yaml
|
53
|
+
- rbs_collection.yaml
|
52
54
|
- sample/calc.output
|
53
55
|
- sample/calc.y
|
54
56
|
- sample/parse.y
|
55
57
|
- sig/lrama/bitmap.rbs
|
58
|
+
- sig/lrama/report.rbs
|
59
|
+
- sig/lrama/warning.rbs
|
56
60
|
- template/bison/yacc.c
|
57
61
|
- template/bison/yacc.h
|
58
|
-
homepage: https://github.com/
|
62
|
+
homepage: https://github.com/ruby/lrama
|
59
63
|
licenses:
|
60
64
|
- GNU GPLv3
|
61
65
|
metadata: {}
|