lrama 0.5.10 → 0.5.11

Sign up to get free protection for your applications and to get access to all the features.
Files changed (41) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/test.yaml +21 -1
  3. data/Steepfile +8 -12
  4. data/lib/lrama/grammar/code/rule_action.rb +1 -1
  5. data/lib/lrama/grammar/parameterizing_rules/builder/base.rb +10 -2
  6. data/lib/lrama/grammar/parameterizing_rules/builder/list.rb +12 -4
  7. data/lib/lrama/grammar/parameterizing_rules/builder/nonempty_list.rb +12 -4
  8. data/lib/lrama/grammar/parameterizing_rules/builder/option.rb +12 -4
  9. data/lib/lrama/grammar/parameterizing_rules/builder/separated_list.rb +17 -6
  10. data/lib/lrama/grammar/parameterizing_rules/builder/separated_nonempty_list.rb +12 -5
  11. data/lib/lrama/grammar/parameterizing_rules/builder.rb +23 -6
  12. data/lib/lrama/grammar/rule.rb +2 -1
  13. data/lib/lrama/grammar/rule_builder.rb +17 -19
  14. data/lib/lrama/grammar/symbol.rb +16 -2
  15. data/lib/lrama/grammar/type.rb +6 -0
  16. data/lib/lrama/grammar.rb +8 -3
  17. data/lib/lrama/lexer/token/parameterizing.rb +1 -1
  18. data/lib/lrama/lexer/token.rb +16 -9
  19. data/lib/lrama/lexer.rb +1 -2
  20. data/lib/lrama/parser.rb +359 -346
  21. data/lib/lrama/version.rb +1 -1
  22. data/lib/lrama.rb +0 -1
  23. data/parser.y +17 -15
  24. data/rbs_collection.lock.yaml +2 -8
  25. data/sig/lrama/grammar/error_token.rbs +11 -0
  26. data/sig/lrama/grammar/parameterizing_rules/builder/base.rbs +26 -0
  27. data/sig/lrama/grammar/parameterizing_rules/builder/list.rbs +10 -0
  28. data/sig/lrama/grammar/parameterizing_rules/builder/nonempty_list.rbs +10 -0
  29. data/sig/lrama/grammar/parameterizing_rules/builder/option.rbs +10 -0
  30. data/sig/lrama/grammar/parameterizing_rules/builder/separated_list.rbs +11 -0
  31. data/sig/lrama/grammar/parameterizing_rules/builder/separated_nonempty_list.rbs +11 -0
  32. data/sig/lrama/grammar/parameterizing_rules/builder.rbs +14 -1
  33. data/sig/lrama/grammar/reference.rbs +2 -2
  34. data/sig/lrama/grammar/rule.rbs +1 -1
  35. data/sig/lrama/grammar/rule_builder.rbs +1 -0
  36. data/sig/lrama/grammar/symbol.rbs +37 -0
  37. data/sig/lrama/lexer/token/parameterizing.rbs +2 -0
  38. data/sig/lrama/lexer/token.rbs +3 -3
  39. data/template/bison/yacc.c +0 -2
  40. metadata +11 -3
  41. data/lib/lrama/type.rb +0 -4
data/lib/lrama/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Lrama
2
- VERSION = "0.5.10".freeze
2
+ VERSION = "0.5.11".freeze
3
3
  end
data/lib/lrama.rb CHANGED
@@ -13,6 +13,5 @@ require "lrama/report"
13
13
  require "lrama/state"
14
14
  require "lrama/states"
15
15
  require "lrama/states_reporter"
16
- require "lrama/type"
17
16
  require "lrama/version"
18
17
  require "lrama/warning"
data/parser.y CHANGED
@@ -1,5 +1,5 @@
1
1
  class Lrama::Parser
2
- expect 1
2
+ expect 0
3
3
 
4
4
  token C_DECLARATION CHARACTER IDENT_COLON IDENTIFIER INTEGER STRING TAG
5
5
 
@@ -31,7 +31,6 @@ rule
31
31
  bison_declaration: grammar_declaration
32
32
  | "%expect" INTEGER { @grammar.expect = val[1] }
33
33
  | "%define" variable value
34
- | "%require" STRING
35
34
  | "%param" params
36
35
  | "%lex-param" params
37
36
  {
@@ -327,27 +326,24 @@ rule
327
326
  builder.add_rhs(token)
328
327
  result = builder
329
328
  }
330
- | rhs IDENTIFIER parameterizing_suffix
329
+ | rhs IDENTIFIER parameterizing_suffix tag_opt
331
330
  {
332
331
  token = Lrama::Lexer::Token::Parameterizing.new(s_value: val[2], location: @lexer.location, args: [val[1]])
333
332
  builder = val[0]
334
333
  builder.add_rhs(token)
334
+ builder.lhs_tag = val[3]
335
+ builder.line = val[1].first_line
335
336
  result = builder
336
337
  }
337
- | rhs IDENTIFIER "(" symbol ")"
338
+ | rhs IDENTIFIER "(" parameterizing_args ")" tag_opt
338
339
  {
339
- token = Lrama::Lexer::Token::Parameterizing.new(s_value: val[1].s_value, location: @lexer.location, args: [val[3]])
340
+ token = Lrama::Lexer::Token::Parameterizing.new(s_value: val[1].s_value, location: @lexer.location, args: val[3])
340
341
  builder = val[0]
341
342
  builder.add_rhs(token)
343
+ builder.lhs_tag = val[5]
344
+ builder.line = val[1].first_line
342
345
  result = builder
343
346
  }
344
- | rhs IDENTIFIER "(" symbol "," symbol ")"
345
- {
346
- token = Lrama::Lexer::Token::Parameterizing.new(s_value: val[1].s_value, location: @lexer.location, args: [val[3], val[5]])
347
- builder = val[0]
348
- builder.add_rhs(token)
349
- result = builder
350
- }
351
347
  | rhs "{"
352
348
  {
353
349
  if @prec_seen
@@ -362,10 +358,10 @@ rule
362
358
  }
363
359
  "}" named_ref_opt
364
360
  {
365
- token = val[3]
366
- token.alias_name = val[6]
361
+ user_code = val[3]
362
+ user_code.alias_name = val[6]
367
363
  builder = val[0]
368
- builder.user_code = token
364
+ builder.user_code = user_code
369
365
  result = builder
370
366
  }
371
367
  | rhs "%prec" symbol
@@ -381,6 +377,9 @@ rule
381
377
  | "+"
382
378
  | "*"
383
379
 
380
+ parameterizing_args: symbol { result = [val[0]] }
381
+ | parameterizing_args ',' symbol { result = val[0].append(val[2]) }
382
+
384
383
  named_ref_opt: # empty
385
384
  | '[' IDENTIFIER ']' { result = val[1].s_value }
386
385
 
@@ -412,6 +411,9 @@ rule
412
411
  | TAG
413
412
 
414
413
  string_as_id: STRING { result = Lrama::Lexer::Token::Ident.new(s_value: val[0]) }
414
+
415
+ tag_opt: # empty
416
+ | TAG
415
417
  end
416
418
 
417
419
  ---- inner
@@ -1,10 +1,4 @@
1
1
  ---
2
- sources:
3
- - type: git
4
- name: ruby/gem_rbs_collection
5
- revision: 25286c51a19927f28623aee3cd36655f902399ba
6
- remote: https://github.com/ruby/gem_rbs_collection.git
7
- repo_dir: gems
8
2
  path: ".gem_rbs_collection"
9
3
  gems:
10
4
  - name: erb
@@ -24,7 +18,7 @@ gems:
24
18
  source:
25
19
  type: git
26
20
  name: ruby/gem_rbs_collection
27
- revision: 2de2d4535caba275f3b8533684aab110d921f553
21
+ revision: 4b0d2f72e63b6c3e92dc54e19ce23dd24524f9a7
28
22
  remote: https://github.com/ruby/gem_rbs_collection.git
29
23
  repo_dir: gems
30
24
  - name: stackprof
@@ -32,7 +26,7 @@ gems:
32
26
  source:
33
27
  type: git
34
28
  name: ruby/gem_rbs_collection
35
- revision: 28208148c7e64a25e9b86b9723b4c3a2cef14e81
29
+ revision: 4b0d2f72e63b6c3e92dc54e19ce23dd24524f9a7
36
30
  remote: https://github.com/ruby/gem_rbs_collection.git
37
31
  repo_dir: gems
38
32
  - name: strscan
@@ -0,0 +1,11 @@
1
+ module Lrama
2
+ class Grammar
3
+ class ErrorToken
4
+ attr_accessor ident_or_tags: Array[Lexer::Token::Ident | Lexer::Token::Tag]
5
+ attr_accessor token_code: Symbol
6
+ attr_accessor lineno: Integer
7
+
8
+ def translated_code: (Lexer::Token? tag) -> String
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,26 @@
1
+ module Lrama
2
+ class Grammar
3
+ class ParameterizingRules
4
+ class Builder
5
+ class Base
6
+ def initialize: (Lexer::Token::Parameterizing token, Counter rule_counter, untyped lhs_tag, Lexer::Token::UserCode? user_code, Lexer::Token? precedence_sym, Integer? line) -> void
7
+ def build: () -> Array[Rule]
8
+
9
+ @args: Array[Lexer::Token]
10
+ @token: Lexer::Token::Parameterizing
11
+ @key: Symbol
12
+ @rule_counter: Counter
13
+ @lhs: Lexer::Token
14
+ @user_code: Lexer::Token::UserCode?
15
+ @precedence_sym: Lexer::Token?
16
+ @line: Integer?
17
+ @expected_argument_num: Integer
18
+
19
+ private
20
+
21
+ def validate_argument_number!: () -> void
22
+ end
23
+ end
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,10 @@
1
+ module Lrama
2
+ class Grammar
3
+ class ParameterizingRules
4
+ class Builder
5
+ class List < Base
6
+ end
7
+ end
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,10 @@
1
+ module Lrama
2
+ class Grammar
3
+ class ParameterizingRules
4
+ class Builder
5
+ class NonemptyList < Base
6
+ end
7
+ end
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,10 @@
1
+ module Lrama
2
+ class Grammar
3
+ class ParameterizingRules
4
+ class Builder
5
+ class Option < Base
6
+ end
7
+ end
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,11 @@
1
+ module Lrama
2
+ class Grammar
3
+ class ParameterizingRules
4
+ class Builder
5
+ class SeparatedList < Base
6
+ def initialize: (Lexer::Token token, Counter rule_counter, untyped lhs_tag, Lexer::Token::UserCode? user_code, Lexer::Token? precedence_sym, Integer? line) -> void
7
+ end
8
+ end
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,11 @@
1
+ module Lrama
2
+ class Grammar
3
+ class ParameterizingRules
4
+ class Builder
5
+ class SeparatedNonemptyList < Base
6
+ def initialize: (Lexer::Token token, Counter rule_counter, untyped lhs_tag, Lexer::Token::UserCode? user_code, Lexer::Token? precedence_sym, Integer? line) -> void
7
+ end
8
+ end
9
+ end
10
+ end
11
+ end
@@ -2,8 +2,21 @@ module Lrama
2
2
  class Grammar
3
3
  class ParameterizingRules
4
4
  class Builder
5
- def initialize: (Lexer::Token token, Counter rule_counter, Lexer::Token lhs, Lexer::Token::UserCode? user_code, Lexer::Token? precedence_sym, Integer? line) -> void
5
+ RULES: Hash[Symbol, singleton(Base)]
6
+
7
+ @token: Lexer::Token::Parameterizing
8
+ @key: Symbol
9
+ @rule_counter: Counter
10
+ @lhs: Lexer::Token
11
+ @user_code: Lexer::Token::UserCode?
12
+ @precedence_sym: Lexer::Token?
13
+ @line: Integer?
14
+
15
+ def initialize: (Lexer::Token token, Counter rule_counter, untyped lhs_tag, Lexer::Token::UserCode? user_code, Lexer::Token? precedence_sym, Integer? line) -> void
6
16
  def build: () -> Array[Rule]
17
+ def build_token: () -> Lrama::Lexer::Token
18
+ def create_builder: () -> void
19
+ def validate_key!: () -> void
7
20
  end
8
21
  end
9
22
  end
@@ -1,7 +1,7 @@
1
1
  module Lrama
2
2
  class Grammar
3
3
  class Reference
4
- attr_accessor type: Symbol
4
+ attr_accessor type: ::Symbol
5
5
  attr_accessor name: String
6
6
  attr_accessor index: Integer
7
7
  attr_accessor ex_tag: Lexer::Token?
@@ -10,7 +10,7 @@ module Lrama
10
10
  attr_accessor position_in_rhs: Integer?
11
11
 
12
12
  def initialize: (
13
- type: Symbol, ?name: String, ?index: Integer, ?ex_tag: Lexer::Token?,
13
+ type: ::Symbol, ?name: String, ?index: Integer, ?ex_tag: Lexer::Token?,
14
14
  first_column: Integer, last_column: Integer,
15
15
  ?position_in_rhs: Integer?
16
16
  ) -> void
@@ -4,7 +4,7 @@ module Lrama
4
4
  attr_accessor original_rule: Rule
5
5
 
6
6
  def initialize: (
7
- ?id: untyped, ?_lhs: untyped, ?lhs: untyped, ?_rhs: untyped, ?rhs: untyped,
7
+ ?id: untyped, ?_lhs: untyped, ?lhs: untyped, ?lhs_tag: untyped, ?_rhs: untyped, ?rhs: untyped,
8
8
  ?token_code: untyped, ?position_in_original_rule_rhs: untyped, ?nullable: untyped,
9
9
  ?precedence_sym: untyped, ?lineno: untyped
10
10
  ) -> void
@@ -2,6 +2,7 @@ module Lrama
2
2
  class Grammar
3
3
  class RuleBuilder
4
4
  attr_accessor lhs: Lexer::Token
5
+ attr_accessor lhs_tag: untyped
5
6
  attr_accessor line: Integer?
6
7
  attr_reader rhs: Array[Lexer::Token]
7
8
  attr_reader user_code: Lexer::Token::UserCode?
@@ -0,0 +1,37 @@
1
+ module Lrama
2
+ class Grammar
3
+ class Symbol
4
+ attr_accessor id: Lexer::Token
5
+ attr_accessor alias_name: String
6
+ attr_accessor number: Integer
7
+ attr_accessor tag: Lexer::Token?
8
+ attr_accessor term: bool
9
+ attr_accessor token_id: Integer
10
+ attr_accessor nullable: bool
11
+ attr_accessor precedence: Precedence?
12
+ attr_accessor printer: Printer?
13
+ attr_accessor error_token: ErrorToken
14
+
15
+ attr_accessor first_set: Set[Array[Symbol]]
16
+ attr_accessor first_set_bitmap: Integer
17
+ attr_writer eof_symbol: Symbol
18
+ attr_writer error_symbol: Symbol
19
+ attr_writer undef_symbol: Symbol
20
+ attr_writer accept_symbol: Symbol
21
+
22
+ def initialize: (
23
+ id: Lexer::Token, alias_name: String?, number: Integer?, tag: Lexer::Token?,
24
+ term: bool, token_id: Integer?, nullable: bool?, precedence: Precedence?, printer: Printer?) -> void
25
+
26
+ def term?: () -> bool
27
+ def nterm?: () -> bool
28
+ def eof_symbol?: () -> bool
29
+ def error_symbol?: () -> bool
30
+ def undef_symbol?: () -> bool
31
+ def accept_symbol?: () -> bool
32
+ def display_name: () -> String
33
+ def enum_name: () -> String
34
+ def comment: () -> String
35
+ end
36
+ end
37
+ end
@@ -4,6 +4,8 @@ module Lrama
4
4
  class Parameterizing < Token
5
5
  attr_accessor args: Array[Lrama::Lexer::Token]
6
6
 
7
+ def initialize: (s_value: String, ?alias_name: String, ?location: Location, ?args: Array[Lrama::Lexer::Token]) -> void
8
+
7
9
  def option?: () -> bool
8
10
  def nonempty_list?: () -> bool
9
11
  def list?: () -> bool
@@ -1,12 +1,12 @@
1
1
  module Lrama
2
2
  class Lexer
3
3
  class Token
4
- attr_accessor s_value: String
4
+ attr_reader s_value: String
5
5
  attr_accessor alias_name: String
6
- attr_accessor location: Location
6
+ attr_reader location: Location
7
7
  attr_accessor referred: bool
8
8
 
9
- def initialize: (?s_value: String, ?alias_name: String, ?location: Location) -> void
9
+ def initialize: (s_value: String, ?alias_name: String, ?location: Location) -> void
10
10
 
11
11
  def to_s: () -> String
12
12
  def referred_by?: (String string) -> bool
@@ -72,7 +72,6 @@
72
72
  <%- if output.aux.prologue -%>
73
73
  /* First part of user prologue. */
74
74
  #line <%= output.aux.prologue_first_lineno %> "<%= output.grammar_file_path %>"
75
-
76
75
  <%= output.aux.prologue %>
77
76
  #line [@oline@] [@ofile@]
78
77
  <%- end -%>
@@ -2048,7 +2047,6 @@ yyreturnlab:
2048
2047
  <%# b4_percent_code_get([[epilogue]]) -%>
2049
2048
  <%- if output.aux.epilogue -%>
2050
2049
  #line <%= output.aux.epilogue_first_lineno - 1 %> "<%= output.grammar_file_path %>"
2051
-
2052
2050
  <%= output.aux.epilogue -%>
2053
2051
  <%- end -%>
2054
2052
 
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.10
4
+ version: 0.5.11
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-18 00:00:00.000000000 Z
11
+ date: 2023-12-01 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: LALR (1) parser generator written by Ruby
14
14
  email:
@@ -69,6 +69,7 @@ files:
69
69
  - lib/lrama/grammar/rule.rb
70
70
  - lib/lrama/grammar/rule_builder.rb
71
71
  - lib/lrama/grammar/symbol.rb
72
+ - lib/lrama/grammar/type.rb
72
73
  - lib/lrama/grammar/union.rb
73
74
  - lib/lrama/lexer.rb
74
75
  - lib/lrama/lexer/location.rb
@@ -94,7 +95,6 @@ files:
94
95
  - lib/lrama/states.rb
95
96
  - lib/lrama/states/item.rb
96
97
  - lib/lrama/states_reporter.rb
97
- - lib/lrama/type.rb
98
98
  - lib/lrama/version.rb
99
99
  - lib/lrama/warning.rb
100
100
  - lrama.gemspec
@@ -110,13 +110,21 @@ files:
110
110
  - sig/lrama/grammar/code.rbs
111
111
  - sig/lrama/grammar/code/printer_code.rbs
112
112
  - sig/lrama/grammar/counter.rbs
113
+ - sig/lrama/grammar/error_token.rbs
113
114
  - sig/lrama/grammar/parameterizing_rules/builder.rbs
115
+ - sig/lrama/grammar/parameterizing_rules/builder/base.rbs
116
+ - sig/lrama/grammar/parameterizing_rules/builder/list.rbs
117
+ - sig/lrama/grammar/parameterizing_rules/builder/nonempty_list.rbs
118
+ - sig/lrama/grammar/parameterizing_rules/builder/option.rbs
119
+ - sig/lrama/grammar/parameterizing_rules/builder/separated_list.rbs
120
+ - sig/lrama/grammar/parameterizing_rules/builder/separated_nonempty_list.rbs
114
121
  - sig/lrama/grammar/percent_code.rbs
115
122
  - sig/lrama/grammar/precedence.rbs
116
123
  - sig/lrama/grammar/printer.rbs
117
124
  - sig/lrama/grammar/reference.rbs
118
125
  - sig/lrama/grammar/rule.rbs
119
126
  - sig/lrama/grammar/rule_builder.rbs
127
+ - sig/lrama/grammar/symbol.rbs
120
128
  - sig/lrama/lexer/location.rbs
121
129
  - sig/lrama/lexer/token.rbs
122
130
  - sig/lrama/lexer/token/char.rbs
data/lib/lrama/type.rb DELETED
@@ -1,4 +0,0 @@
1
- module Lrama
2
- class Type < Struct.new(:id, :tag, keyword_init: true)
3
- end
4
- end