lrama 0.5.12 → 0.6.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (49) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/test.yaml +20 -5
  3. data/Gemfile +1 -1
  4. data/NEWS.md +66 -0
  5. data/README.md +14 -3
  6. data/Steepfile +2 -0
  7. data/lib/lrama/command.rb +17 -3
  8. data/lib/lrama/context.rb +2 -22
  9. data/lib/lrama/grammar/binding.rb +24 -0
  10. data/lib/lrama/grammar/code/printer_code.rb +1 -1
  11. data/lib/lrama/grammar/code/rule_action.rb +2 -2
  12. data/lib/lrama/grammar/code.rb +19 -7
  13. data/lib/lrama/grammar/parameterizing_rule/resolver.rb +39 -0
  14. data/lib/lrama/grammar/parameterizing_rule/rhs.rb +15 -0
  15. data/lib/lrama/grammar/parameterizing_rule/rule.rb +16 -0
  16. data/lib/lrama/grammar/parameterizing_rule.rb +3 -0
  17. data/lib/lrama/grammar/percent_code.rb +3 -3
  18. data/lib/lrama/grammar/rule_builder.rb +69 -31
  19. data/lib/lrama/grammar/type.rb +13 -1
  20. data/lib/lrama/grammar.rb +15 -43
  21. data/lib/lrama/lexer/grammar_file.rb +21 -0
  22. data/lib/lrama/lexer/location.rb +77 -2
  23. data/lib/lrama/lexer/token/instantiate_rule.rb +23 -0
  24. data/lib/lrama/lexer/token/user_code.rb +10 -10
  25. data/lib/lrama/lexer/token.rb +6 -1
  26. data/lib/lrama/lexer.rb +23 -18
  27. data/lib/lrama/output.rb +2 -2
  28. data/lib/lrama/parser.rb +641 -458
  29. data/lib/lrama/states_reporter.rb +1 -1
  30. data/lib/lrama/version.rb +1 -1
  31. data/parser.y +97 -32
  32. data/sig/lrama/grammar/binding.rbs +16 -0
  33. data/sig/lrama/grammar/code/printer_code.rbs +1 -1
  34. data/sig/lrama/grammar/code.rbs +5 -5
  35. data/sig/lrama/grammar/parameterizing_rule/resolver.rbs +21 -0
  36. data/sig/lrama/grammar/parameterizing_rule/rhs.rbs +13 -0
  37. data/sig/lrama/grammar/parameterizing_rule/rule.rbs +14 -0
  38. data/sig/lrama/grammar/parameterizing_rule.rbs +6 -0
  39. data/sig/lrama/grammar/parameterizing_rules/builder/base.rbs +2 -2
  40. data/sig/lrama/grammar/parameterizing_rules/builder.rbs +1 -1
  41. data/sig/lrama/grammar/percent_code.rbs +3 -3
  42. data/sig/lrama/grammar/rule_builder.rbs +9 -8
  43. data/sig/lrama/lexer/grammar_file.rbs +15 -0
  44. data/sig/lrama/lexer/location.rbs +13 -1
  45. data/sig/lrama/lexer/token/instantiate_rule.rbs +14 -0
  46. data/sig/lrama/lexer/token.rbs +1 -0
  47. metadata +17 -5
  48. data/lib/lrama/lexer/token/parameterizing.rb +0 -34
  49. data/sig/lrama/lexer/token/parameterizing.rbs +0 -17
@@ -156,7 +156,7 @@ module Lrama
156
156
  nl = true
157
157
  end
158
158
 
159
- if r = state.default_reduction_rule
159
+ if (r = state.default_reduction_rule)
160
160
  nl = true
161
161
  s = "$default".ljust(max_len)
162
162
 
data/lib/lrama/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Lrama
2
- VERSION = "0.5.12".freeze
2
+ VERSION = "0.6.1".freeze
3
3
  end
data/parser.y CHANGED
@@ -29,6 +29,7 @@ rule
29
29
  | bison_declarations bison_declaration
30
30
 
31
31
  bison_declaration: grammar_declaration
32
+ | rule_declaration
32
33
  | "%expect" INTEGER { @grammar.expect = val[1] }
33
34
  | "%define" variable value
34
35
  | "%param" params
@@ -202,6 +203,85 @@ rule
202
203
 
203
204
  token_declaration: id int_opt alias { result = val }
204
205
 
206
+ rule_declaration: "%rule" IDENTIFIER "(" rule_args ")" ":" rule_rhs_list
207
+ {
208
+ rule = Grammar::ParameterizingRule::Rule.new(val[1].s_value, val[3], val[6])
209
+ @grammar.add_parameterizing_rule(rule)
210
+ }
211
+
212
+ rule_args: IDENTIFIER { result = [val[0]] }
213
+ | rule_args "," IDENTIFIER { result = val[0].append(val[2]) }
214
+
215
+ rule_rhs_list: rule_rhs
216
+ {
217
+ builder = val[0]
218
+ result = [builder]
219
+ }
220
+ | rule_rhs_list "|" rule_rhs
221
+ {
222
+ builder = val[2]
223
+ result = val[0].append(builder)
224
+ }
225
+
226
+ rule_rhs: /* empty */
227
+ {
228
+ reset_precs
229
+ result = Grammar::ParameterizingRule::Rhs.new
230
+ }
231
+ | "%empty"
232
+ {
233
+ reset_precs
234
+ result = Grammar::ParameterizingRule::Rhs.new
235
+ }
236
+ | rule_rhs symbol named_ref_opt
237
+ {
238
+ token = val[1]
239
+ token.alias_name = val[2]
240
+ builder = val[0]
241
+ builder.symbols << token
242
+ result = builder
243
+ }
244
+ | rule_rhs IDENTIFIER parameterizing_suffix
245
+ {
246
+ builder = val[0]
247
+ builder.symbols << Lrama::Lexer::Token::InstantiateRule.new(s_value: val[2], location: @lexer.location, args: [val[1]])
248
+ result = builder
249
+ }
250
+ | rule_rhs IDENTIFIER "(" parameterizing_args ")"
251
+ {
252
+ builder = val[0]
253
+ builder.symbols << Lrama::Lexer::Token::InstantiateRule.new(s_value: val[1].s_value, location: @lexer.location, args: val[3])
254
+ result = builder
255
+ }
256
+ | rule_rhs "{"
257
+ {
258
+ if @prec_seen
259
+ on_action_error("multiple User_code after %prec", val[0]) if @code_after_prec
260
+ @code_after_prec = true
261
+ end
262
+ begin_c_declaration("}")
263
+ }
264
+ C_DECLARATION
265
+ {
266
+ end_c_declaration
267
+ }
268
+ "}" named_ref_opt
269
+ {
270
+ user_code = val[3]
271
+ user_code.alias_name = val[6]
272
+ builder = val[0]
273
+ builder.user_code = user_code
274
+ result = builder
275
+ }
276
+ | rule_rhs "%prec" symbol
277
+ {
278
+ sym = @grammar.find_symbol_by_id!(val[2])
279
+ @prec_seen = true
280
+ builder = val[0]
281
+ builder.precedence_sym = sym
282
+ result = builder
283
+ }
284
+
205
285
  int_opt: # empty
206
286
  | INTEGER
207
287
 
@@ -326,21 +406,19 @@ rule
326
406
  builder.add_rhs(token)
327
407
  result = builder
328
408
  }
329
- | rhs IDENTIFIER parameterizing_suffix tag_opt
409
+ | rhs symbol parameterizing_suffix tag_opt
330
410
  {
331
- token = Lrama::Lexer::Token::Parameterizing.new(s_value: val[2], location: @lexer.location, args: [val[1]])
411
+ token = Lrama::Lexer::Token::InstantiateRule.new(s_value: val[2], location: @lexer.location, args: [val[1]], lhs_tag: val[3])
332
412
  builder = val[0]
333
413
  builder.add_rhs(token)
334
- builder.lhs_tag = val[3]
335
414
  builder.line = val[1].first_line
336
415
  result = builder
337
416
  }
338
417
  | rhs IDENTIFIER "(" parameterizing_args ")" tag_opt
339
418
  {
340
- token = Lrama::Lexer::Token::Parameterizing.new(s_value: val[1].s_value, location: @lexer.location, args: val[3])
419
+ token = Lrama::Lexer::Token::InstantiateRule.new(s_value: val[1].s_value, location: @lexer.location, args: val[3], lhs_tag: val[5])
341
420
  builder = val[0]
342
421
  builder.add_rhs(token)
343
- builder.lhs_tag = val[5]
344
422
  builder.line = val[1].first_line
345
423
  result = builder
346
424
  }
@@ -379,6 +457,8 @@ rule
379
457
 
380
458
  parameterizing_args: symbol { result = [val[0]] }
381
459
  | parameterizing_args ',' symbol { result = val[0].append(val[2]) }
460
+ | symbol parameterizing_suffix { result = [Lrama::Lexer::Token::InstantiateRule.new(s_value: val[1].s_value, location: @lexer.location, args: val[0])] }
461
+ | IDENTIFIER "(" parameterizing_args ")" { result = [Lrama::Lexer::Token::InstantiateRule.new(s_value: val[0].s_value, location: @lexer.location, args: val[2])] }
382
462
 
383
463
  named_ref_opt: # empty
384
464
  | '[' IDENTIFIER ']' { result = val[1].s_value }
@@ -421,8 +501,7 @@ end
421
501
  include Lrama::Report::Duration
422
502
 
423
503
  def initialize(text, path, debug = false)
424
- @text = text
425
- @path = path
504
+ @grammar_file = Lrama::Lexer::GrammarFile.new(path, text)
426
505
  @yydebug = debug
427
506
  @rule_counter = Lrama::Grammar::Counter.new(0)
428
507
  @midrule_action_counter = Lrama::Grammar::Counter.new(1)
@@ -430,7 +509,7 @@ end
430
509
 
431
510
  def parse
432
511
  report_duration(:parse) do
433
- @lexer = Lrama::Lexer.new(@text)
512
+ @lexer = Lrama::Lexer.new(@grammar_file)
434
513
  @grammar = Lrama::Grammar.new(@rule_counter)
435
514
  @precedence_number = 0
436
515
  reset_precs
@@ -447,40 +526,26 @@ end
447
526
 
448
527
  def on_error(error_token_id, error_value, value_stack)
449
528
  if error_value.is_a?(Lrama::Lexer::Token)
450
- line = error_value.first_line
451
- first_column = error_value.first_column
452
- last_column = error_value.last_column
529
+ location = error_value.location
453
530
  value = "'#{error_value.s_value}'"
454
531
  else
455
- line = @lexer.line
456
- first_column = @lexer.head_column
457
- last_column = @lexer.column
532
+ location = @lexer.location
458
533
  value = error_value.inspect
459
534
  end
460
535
 
461
- raise ParseError, <<~ERROR
462
- #{@path}:#{line}:#{first_column}: parse error on value #{value} (#{token_to_str(error_token_id) || '?'})
463
- #{@text.split("\n")[line - 1]}
464
- #{carrets(first_column, last_column)}
465
- ERROR
536
+ error_message = "parse error on value #{value} (#{token_to_str(error_token_id) || '?'})"
537
+
538
+ raise_parse_error(error_message, location)
466
539
  end
467
540
 
468
541
  def on_action_error(error_message, error_value)
469
542
  if error_value.is_a?(Lrama::Lexer::Token)
470
- line = error_value.first_line
471
- first_column = error_value.first_column
472
- last_column = error_value.last_column
543
+ location = error_value.location
473
544
  else
474
- line = @lexer.line
475
- first_column = @lexer.head_column
476
- last_column = @lexer.column
545
+ location = @lexer.location
477
546
  end
478
547
 
479
- raise ParseError, <<~ERROR
480
- #{@path}:#{line}: #{error_message}
481
- #{@text.split("\n")[line - 1]}
482
- #{carrets(first_column, last_column)}
483
- ERROR
548
+ raise_parse_error(error_message, location)
484
549
  end
485
550
 
486
551
  private
@@ -500,6 +565,6 @@ def end_c_declaration
500
565
  @lexer.end_symbol = nil
501
566
  end
502
567
 
503
- def carrets(first_column, last_column)
504
- ' ' * (first_column + 1) + '^' * (last_column - first_column)
568
+ def raise_parse_error(error_message, location)
569
+ raise ParseError, location.generate_error_message(error_message)
505
570
  end
@@ -0,0 +1,16 @@
1
+ module Lrama
2
+ class Grammar
3
+ class Binding
4
+ attr_reader actual_args: Array[Lexer::Token]
5
+ attr_reader count: Integer
6
+
7
+ @rule_name: String
8
+ @required_parameters_count: Integer
9
+ @parameters: Array[Lexer::Token]
10
+ @parameter_to_arg: untyped
11
+
12
+ def initialize: (Grammar::ParameterizingRule::Rule parameterizing_rule, Array[Lexer::Token] actual_args) -> void
13
+ def resolve_symbol: (Lexer::Token symbol) -> Lexer::Token
14
+ end
15
+ end
16
+ end
@@ -3,7 +3,7 @@ module Lrama
3
3
  class Code
4
4
  class PrinterCode < Code
5
5
  @tag: untyped
6
- def initialize: (?type: untyped, ?token_code: untyped, ?tag: untyped) -> void
6
+ def initialize: (type: untyped, token_code: untyped, tag: untyped) -> void
7
7
 
8
8
  private
9
9
 
@@ -3,16 +3,16 @@ module Lrama
3
3
  class Code
4
4
  extend Forwardable
5
5
 
6
- attr_accessor type: untyped
7
- attr_accessor token_code: untyped
6
+ attr_accessor type: Symbol
7
+ attr_accessor token_code: Lexer::Token::UserCode
8
8
 
9
9
  # delegated
10
10
  def s_value: -> String
11
11
  def line: -> Integer
12
- def column: -> untyped
13
- def references: -> untyped
12
+ def column: -> Integer
13
+ def references: -> Array[Lrama::Grammar::Reference]
14
14
 
15
- def initialize: (?type: untyped, ?token_code: untyped) -> void
15
+ def initialize: (type: Symbol, token_code: Lexer::Token::UserCode) -> void
16
16
 
17
17
  def translated_code: () -> String
18
18
 
@@ -0,0 +1,21 @@
1
+ module Lrama
2
+ class Grammar
3
+ class ParameterizingRule
4
+ class Resolver
5
+ attr_accessor created_lhs_list: Array[Lexer::Token]
6
+
7
+ @rules: Array[Grammar::ParameterizingRule::Rule]
8
+
9
+ def initialize: () -> void
10
+ def add_parameterizing_rule: (Grammar::ParameterizingRule::Rule rule) -> void
11
+ def defined?: (Lexer::Token::InstantiateRule token) -> bool
12
+ def find: (Lexer::Token::InstantiateRule token) -> Grammar::ParameterizingRule::Rule?
13
+ def created_lhs: (String lhs_s_value) -> Lexer::Token?
14
+
15
+ private
16
+
17
+ def select_rules: (Lexer::Token::InstantiateRule token) -> Array[Grammar::ParameterizingRule::Rule]
18
+ end
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,13 @@
1
+ module Lrama
2
+ class Grammar
3
+ class ParameterizingRule
4
+ class Rhs
5
+ attr_reader symbols: Array[untyped]
6
+ attr_reader user_code: Lexer::Token::UserCode?
7
+ attr_reader precedence_sym: Lexer::Token?
8
+
9
+ def initialize: () -> void
10
+ end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,14 @@
1
+ module Lrama
2
+ class Grammar
3
+ class ParameterizingRule
4
+ class Rule
5
+ attr_reader name: String
6
+ attr_reader parameters: Array[Lexer::Token]
7
+ attr_reader rhs_list: Array[Grammar::ParameterizingRule::Rhs]
8
+ attr_reader required_parameters_count: Integer
9
+
10
+ def initialize: (String name, Array[Lexer::Token] parameters, Array[Grammar::ParameterizingRule::Rhs] rhs_list) -> void
11
+ end
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,6 @@
1
+ module Lrama
2
+ class Grammar
3
+ class ParameterizingRule
4
+ end
5
+ end
6
+ end
@@ -5,11 +5,11 @@ module Lrama
5
5
  class Base
6
6
  attr_reader build_token: Lexer::Token::Ident
7
7
 
8
- def initialize: (Lexer::Token::Parameterizing token, Counter rule_counter, untyped lhs_tag, Lexer::Token::UserCode? user_code, Lexer::Token? precedence_sym, Integer? line) -> void
8
+ def initialize: (Lexer::Token::InstantiateRule token, Counter rule_counter, untyped lhs_tag, Lexer::Token::UserCode? user_code, Lexer::Token? precedence_sym, Integer? line) -> void
9
9
  def build: () -> Array[Rule]
10
10
 
11
11
  @args: Array[Lexer::Token]
12
- @token: Lexer::Token::Parameterizing
12
+ @token: Lexer::Token::InstantiateRule
13
13
  @key: Symbol
14
14
  @rule_counter: Counter
15
15
  @lhs_tag: untyped
@@ -4,7 +4,7 @@ module Lrama
4
4
  class Builder
5
5
  RULES: Hash[Symbol, singleton(Base)]
6
6
 
7
- @token: Lexer::Token::Parameterizing
7
+ @token: Lexer::Token::InstantiateRule
8
8
  @key: Symbol
9
9
  @rule_counter: Counter
10
10
  @lhs_tag: untyped
@@ -1,10 +1,10 @@
1
1
  module Lrama
2
2
  class Grammar
3
3
  class PercentCode
4
- attr_reader id: Lexer::Token::Ident
5
- attr_reader code: Lexer::Token::UserCode
4
+ attr_reader name: String
5
+ attr_reader code: String
6
6
 
7
- def initialize: (Lexer::Token::Ident id, Lexer::Token::UserCode code) -> void
7
+ def initialize: (String name, String code) -> void
8
8
  end
9
9
  end
10
10
  end
@@ -2,8 +2,8 @@ module Lrama
2
2
  class Grammar
3
3
  class RuleBuilder
4
4
  attr_accessor lhs: Lexer::Token
5
- attr_accessor lhs_tag: untyped
6
5
  attr_accessor line: Integer?
6
+ attr_reader lhs_tag: Lexer::Token::Tag?
7
7
  attr_reader rhs: Array[Lexer::Token]
8
8
  attr_reader user_code: Lexer::Token::UserCode?
9
9
  attr_reader precedence_sym: Lexer::Token?
@@ -13,20 +13,20 @@ module Lrama
13
13
  @position_in_original_rule_rhs: Integer?
14
14
  @skip_preprocess_references: bool
15
15
  @user_code: Lexer::Token::UserCode?
16
+ @rule_builders_for_parameterizing_rules: Array[RuleBuilder]
16
17
  @rule_builders_for_derived_rules: Array[RuleBuilder]
17
18
  @rules: Array[Rule]
18
19
  @replaced_rhs: Array[Lexer::Token]
19
20
  @parameterizing_rules: Array[Rule]
21
+ @old_parameterizing_rules: Array[Rule]
20
22
  @midrule_action_rules: Array[Rule]
21
23
 
22
- def initialize: (Counter rule_counter, Counter midrule_action_counter, ?Integer position_in_original_rule_rhs, ?skip_preprocess_references: bool) -> void
24
+ def initialize: (Counter rule_counter, Counter midrule_action_counter, ?Integer position_in_original_rule_rhs, ?lhs_tag: Lexer::Token::Tag?, ?skip_preprocess_references: bool) -> void
23
25
  def add_rhs: (Lexer::Token rhs) -> void
24
- def user_code=: (Lexer::Token::UserCode user_code) -> void
25
- def precedence_sym=: (Lexer::Token user_code) -> void
26
+ def user_code=: (Lexer::Token::UserCode? user_code) -> void
27
+ def precedence_sym=: (Lexer::Token? precedence_sym) -> void
26
28
  def complete_input: () -> void
27
- def setup_rules: () -> void
28
- def parameterizing_rules: () -> Array[Rule]
29
- def midrule_action_rules: () -> Array[Rule]
29
+ def setup_rules: (Grammar::ParameterizingRule::Resolver parameterizing_rule_resolver) -> void
30
30
  def rules: () -> Array[Rule]
31
31
 
32
32
  private
@@ -34,7 +34,8 @@ module Lrama
34
34
  def freeze_rhs: () -> void
35
35
  def preprocess_references: () -> void
36
36
  def build_rules: () -> void
37
- def process_rhs: () -> void
37
+ def process_rhs: (Grammar::ParameterizingRule::Resolver parameterizing_rule_resolver) -> void
38
+ def lhs_s_value: (Lexer::Token::InstantiateRule token, Grammar::Binding bindings) -> String
38
39
  def numberize_references: () -> void
39
40
  def flush_user_code: () -> void
40
41
  end
@@ -0,0 +1,15 @@
1
+ module Lrama
2
+ class Lexer
3
+ class GrammarFile
4
+ attr_reader path: String
5
+ attr_reader text: String
6
+
7
+ @lines: Array[String]
8
+
9
+ def initialize: (String path, String text) -> void
10
+
11
+ def ==: (GrammarFile other) -> bool
12
+ def lines: () -> Array[String]
13
+ end
14
+ end
15
+ end
@@ -1,14 +1,26 @@
1
1
  module Lrama
2
2
  class Lexer
3
3
  class Location
4
+ attr_reader grammar_file: GrammarFile
4
5
  attr_reader first_line: Integer
5
6
  attr_reader first_column: Integer
6
7
  attr_reader last_line: Integer
7
8
  attr_reader last_column: Integer
8
9
 
9
- def initialize: (first_line: Integer, first_column: Integer, last_line: Integer, last_column: Integer) -> void
10
+ def initialize: (grammar_file: GrammarFile, first_line: Integer, first_column: Integer, last_line: Integer, last_column: Integer) -> void
10
11
 
11
12
  def ==: (Location other) -> bool
13
+ def partial_location: (Integer, Integer) -> Location
14
+ def generate_error_message: (String) -> String
15
+ def line_with_carets: () -> String
16
+
17
+ private
18
+
19
+ def path: () -> String
20
+ def blanks: () -> String
21
+ def carets: () -> String
22
+ def text: () -> String
23
+ def _text: () -> Array[String]
12
24
  end
13
25
  end
14
26
  end
@@ -0,0 +1,14 @@
1
+ module Lrama
2
+ class Lexer
3
+ class Token
4
+ class InstantiateRule < Token
5
+ attr_reader args: Array[Lexer::Token]
6
+ attr_reader lhs_tag: Lexer::Token::Tag?
7
+
8
+ def initialize: (s_value: String, ?alias_name: String, ?location: Location, ?args: Array[Lexer::Token], ?lhs_tag: Lexer::Token::Tag?) -> void
9
+ def rule_name: () -> String
10
+ def args_count: () -> Integer
11
+ end
12
+ end
13
+ end
14
+ end
@@ -17,6 +17,7 @@ module Lrama
17
17
  def last_column: () -> Integer
18
18
  alias line first_line
19
19
  alias column first_column
20
+ def invalid_ref: (Lrama::Grammar::Reference ref, String message) -> bot
20
21
  end
21
22
  end
22
23
  end
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.12
4
+ version: 0.6.1
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-12-07 00:00:00.000000000 Z
11
+ date: 2024-01-13 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: LALR (1) parser generator written by Ruby
14
14
  email:
@@ -48,6 +48,7 @@ files:
48
48
  - lib/lrama/digraph.rb
49
49
  - lib/lrama/grammar.rb
50
50
  - lib/lrama/grammar/auxiliary.rb
51
+ - lib/lrama/grammar/binding.rb
51
52
  - lib/lrama/grammar/code.rb
52
53
  - lib/lrama/grammar/code/initial_action_code.rb
53
54
  - lib/lrama/grammar/code/no_reference_code.rb
@@ -55,6 +56,10 @@ files:
55
56
  - lib/lrama/grammar/code/rule_action.rb
56
57
  - lib/lrama/grammar/counter.rb
57
58
  - lib/lrama/grammar/error_token.rb
59
+ - lib/lrama/grammar/parameterizing_rule.rb
60
+ - lib/lrama/grammar/parameterizing_rule/resolver.rb
61
+ - lib/lrama/grammar/parameterizing_rule/rhs.rb
62
+ - lib/lrama/grammar/parameterizing_rule/rule.rb
58
63
  - lib/lrama/grammar/parameterizing_rules/builder.rb
59
64
  - lib/lrama/grammar/parameterizing_rules/builder/base.rb
60
65
  - lib/lrama/grammar/parameterizing_rules/builder/list.rb
@@ -72,11 +77,12 @@ files:
72
77
  - lib/lrama/grammar/type.rb
73
78
  - lib/lrama/grammar/union.rb
74
79
  - lib/lrama/lexer.rb
80
+ - lib/lrama/lexer/grammar_file.rb
75
81
  - lib/lrama/lexer/location.rb
76
82
  - lib/lrama/lexer/token.rb
77
83
  - lib/lrama/lexer/token/char.rb
78
84
  - lib/lrama/lexer/token/ident.rb
79
- - lib/lrama/lexer/token/parameterizing.rb
85
+ - lib/lrama/lexer/token/instantiate_rule.rb
80
86
  - lib/lrama/lexer/token/tag.rb
81
87
  - lib/lrama/lexer/token/user_code.rb
82
88
  - lib/lrama/option_parser.rb
@@ -107,10 +113,15 @@ files:
107
113
  - sig/lrama/bitmap.rbs
108
114
  - sig/lrama/digraph.rbs
109
115
  - sig/lrama/grammar.rbs
116
+ - sig/lrama/grammar/binding.rbs
110
117
  - sig/lrama/grammar/code.rbs
111
118
  - sig/lrama/grammar/code/printer_code.rbs
112
119
  - sig/lrama/grammar/counter.rbs
113
120
  - sig/lrama/grammar/error_token.rbs
121
+ - sig/lrama/grammar/parameterizing_rule.rbs
122
+ - sig/lrama/grammar/parameterizing_rule/resolver.rbs
123
+ - sig/lrama/grammar/parameterizing_rule/rhs.rbs
124
+ - sig/lrama/grammar/parameterizing_rule/rule.rbs
114
125
  - sig/lrama/grammar/parameterizing_rules/builder.rbs
115
126
  - sig/lrama/grammar/parameterizing_rules/builder/base.rbs
116
127
  - sig/lrama/grammar/parameterizing_rules/builder/list.rbs
@@ -125,11 +136,12 @@ files:
125
136
  - sig/lrama/grammar/rule.rbs
126
137
  - sig/lrama/grammar/rule_builder.rbs
127
138
  - sig/lrama/grammar/symbol.rbs
139
+ - sig/lrama/lexer/grammar_file.rbs
128
140
  - sig/lrama/lexer/location.rbs
129
141
  - sig/lrama/lexer/token.rbs
130
142
  - sig/lrama/lexer/token/char.rbs
131
143
  - sig/lrama/lexer/token/ident.rbs
132
- - sig/lrama/lexer/token/parameterizing.rbs
144
+ - sig/lrama/lexer/token/instantiate_rule.rbs
133
145
  - sig/lrama/lexer/token/tag.rbs
134
146
  - sig/lrama/lexer/token/user_code.rbs
135
147
  - sig/lrama/report/duration.rbs
@@ -158,7 +170,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
158
170
  - !ruby/object:Gem::Version
159
171
  version: '0'
160
172
  requirements: []
161
- rubygems_version: 3.5.0.dev
173
+ rubygems_version: 3.5.3
162
174
  signing_key:
163
175
  specification_version: 4
164
176
  summary: LALR (1) parser generator written by Ruby
@@ -1,34 +0,0 @@
1
- module Lrama
2
- class Lexer
3
- class Token
4
- class Parameterizing < Token
5
- attr_accessor :args
6
-
7
- def initialize(s_value:, alias_name: nil, location: nil, args: [])
8
- super s_value: s_value, alias_name: alias_name, location: location
9
- @args = args
10
- end
11
-
12
- def option?
13
- %w(option ?).include?(self.s_value)
14
- end
15
-
16
- def nonempty_list?
17
- %w(nonempty_list +).include?(self.s_value)
18
- end
19
-
20
- def list?
21
- %w(list *).include?(self.s_value)
22
- end
23
-
24
- def separated_nonempty_list?
25
- %w(separated_nonempty_list).include?(self.s_value)
26
- end
27
-
28
- def separated_list?
29
- %w(separated_list).include?(self.s_value)
30
- end
31
- end
32
- end
33
- end
34
- end
@@ -1,17 +0,0 @@
1
- module Lrama
2
- class Lexer
3
- class Token
4
- class Parameterizing < Token
5
- attr_accessor args: Array[Lexer::Token]
6
-
7
- def initialize: (s_value: String, ?alias_name: String, ?location: Location, ?args: Array[Lexer::Token]) -> void
8
-
9
- def option?: () -> bool
10
- def nonempty_list?: () -> bool
11
- def list?: () -> bool
12
- def separated_nonempty_list?: () -> bool
13
- def separated_list?: () -> bool
14
- end
15
- end
16
- end
17
- end