lrama 0.5.9 → 0.5.11

Sign up to get free protection for your applications and to get access to all the features.
Files changed (74) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/test.yaml +25 -0
  3. data/.gitignore +7 -4
  4. data/Gemfile +9 -5
  5. data/Rakefile +13 -0
  6. data/Steepfile +13 -11
  7. data/lib/lrama/context.rb +1 -3
  8. data/lib/lrama/counterexamples/path.rb +0 -46
  9. data/lib/lrama/counterexamples/production_path.rb +17 -0
  10. data/lib/lrama/counterexamples/start_path.rb +21 -0
  11. data/lib/lrama/counterexamples/transition_path.rb +17 -0
  12. data/lib/lrama/counterexamples.rb +3 -0
  13. data/lib/lrama/grammar/code/initial_action_code.rb +28 -0
  14. data/lib/lrama/grammar/code/no_reference_code.rb +24 -0
  15. data/lib/lrama/grammar/code/printer_code.rb +34 -0
  16. data/lib/lrama/grammar/code/rule_action.rb +62 -0
  17. data/lib/lrama/grammar/code.rb +9 -93
  18. data/lib/lrama/grammar/counter.rb +15 -0
  19. data/lib/lrama/grammar/error_token.rb +3 -3
  20. data/lib/lrama/grammar/parameterizing_rules/builder/base.rb +36 -0
  21. data/lib/lrama/grammar/parameterizing_rules/builder/list.rb +28 -0
  22. data/lib/lrama/grammar/parameterizing_rules/builder/nonempty_list.rb +28 -0
  23. data/lib/lrama/grammar/parameterizing_rules/builder/option.rb +28 -0
  24. data/lib/lrama/grammar/parameterizing_rules/builder/separated_list.rb +39 -0
  25. data/lib/lrama/grammar/parameterizing_rules/builder/separated_nonempty_list.rb +34 -0
  26. data/lib/lrama/grammar/parameterizing_rules/builder.rb +60 -0
  27. data/lib/lrama/grammar/printer.rb +3 -3
  28. data/lib/lrama/grammar/reference.rb +7 -16
  29. data/lib/lrama/grammar/rule.rb +19 -2
  30. data/lib/lrama/grammar/rule_builder.rb +177 -0
  31. data/lib/lrama/grammar/symbol.rb +16 -2
  32. data/lib/lrama/grammar/type.rb +6 -0
  33. data/lib/lrama/grammar.rb +115 -325
  34. data/lib/lrama/lexer/location.rb +22 -0
  35. data/lib/lrama/lexer/token/parameterizing.rb +18 -3
  36. data/lib/lrama/lexer/token/tag.rb +4 -0
  37. data/lib/lrama/lexer/token/user_code.rb +54 -4
  38. data/lib/lrama/lexer/token.rb +35 -10
  39. data/lib/lrama/lexer.rb +32 -31
  40. data/lib/lrama/options.rb +1 -2
  41. data/lib/lrama/output.rb +2 -2
  42. data/lib/lrama/parser.rb +514 -424
  43. data/lib/lrama/report/profile.rb +1 -12
  44. data/lib/lrama/version.rb +1 -1
  45. data/lib/lrama.rb +0 -1
  46. data/parser.y +111 -52
  47. data/rbs_collection.lock.yaml +6 -8
  48. data/rbs_collection.yaml +1 -0
  49. data/sig/lrama/grammar/code/printer_code.rbs +15 -0
  50. data/sig/lrama/grammar/code.rbs +24 -0
  51. data/sig/lrama/grammar/counter.rbs +11 -0
  52. data/sig/lrama/grammar/error_token.rbs +11 -0
  53. data/sig/lrama/grammar/parameterizing_rules/builder/base.rbs +26 -0
  54. data/sig/lrama/grammar/parameterizing_rules/builder/list.rbs +10 -0
  55. data/sig/lrama/grammar/parameterizing_rules/builder/nonempty_list.rbs +10 -0
  56. data/sig/lrama/grammar/parameterizing_rules/builder/option.rbs +10 -0
  57. data/sig/lrama/grammar/parameterizing_rules/builder/separated_list.rbs +11 -0
  58. data/sig/lrama/grammar/parameterizing_rules/builder/separated_nonempty_list.rbs +11 -0
  59. data/sig/lrama/grammar/parameterizing_rules/builder.rbs +23 -0
  60. data/sig/lrama/grammar/precedence.rbs +11 -0
  61. data/sig/lrama/grammar/printer.rbs +11 -0
  62. data/sig/lrama/grammar/reference.rbs +6 -6
  63. data/sig/lrama/grammar/rule.rbs +13 -0
  64. data/sig/lrama/grammar/rule_builder.rbs +42 -0
  65. data/sig/lrama/grammar/symbol.rbs +37 -0
  66. data/sig/lrama/lexer/location.rbs +14 -0
  67. data/sig/lrama/lexer/token/parameterizing.rbs +9 -0
  68. data/sig/lrama/lexer/token/tag.rbs +1 -0
  69. data/sig/lrama/lexer/token/user_code.rbs +8 -1
  70. data/sig/lrama/lexer/token.rbs +9 -4
  71. data/sig/stdlib/strscan/string_scanner.rbs +5 -0
  72. data/template/bison/yacc.c +5 -2
  73. metadata +38 -3
  74. data/lib/lrama/type.rb +0 -4
@@ -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
@@ -0,0 +1,14 @@
1
+ module Lrama
2
+ class Lexer
3
+ class Location
4
+ attr_reader first_line: Integer
5
+ attr_reader first_column: Integer
6
+ attr_reader last_line: Integer
7
+ attr_reader last_column: Integer
8
+
9
+ def initialize: (first_line: Integer, first_column: Integer, last_line: Integer, last_column: Integer) -> void
10
+
11
+ def ==: (Location other) -> bool
12
+ end
13
+ end
14
+ end
@@ -2,6 +2,15 @@ module Lrama
2
2
  class Lexer
3
3
  class Token
4
4
  class Parameterizing < Token
5
+ attr_accessor args: Array[Lrama::Lexer::Token]
6
+
7
+ def initialize: (s_value: String, ?alias_name: String, ?location: Location, ?args: Array[Lrama::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
5
14
  end
6
15
  end
7
16
  end
@@ -2,6 +2,7 @@ module Lrama
2
2
  class Lexer
3
3
  class Token
4
4
  class Tag < Token
5
+ def member: () -> String
5
6
  end
6
7
  end
7
8
  end
@@ -2,7 +2,14 @@ module Lrama
2
2
  class Lexer
3
3
  class Token
4
4
  class UserCode < Token
5
- attr_accessor references: Array[[Symbol, (String|Integer), Token?, Integer, Integer]]
5
+ @references: Array[Lrama::Grammar::Reference]
6
+
7
+ def references: () -> Array[Lrama::Grammar::Reference]
8
+
9
+ private
10
+
11
+ def _references: () -> Array[Lrama::Grammar::Reference]
12
+ def scan_reference: (StringScanner scanner) -> Lrama::Grammar::Reference?
6
13
  end
7
14
  end
8
15
  end
@@ -1,17 +1,22 @@
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 line: Integer
7
- attr_accessor column: Integer
6
+ attr_reader location: Location
8
7
  attr_accessor referred: bool
9
8
 
10
- def initialize: (?s_value: String, ?alias_name: String) -> void
9
+ def initialize: (s_value: String, ?alias_name: String, ?location: Location) -> void
11
10
 
12
11
  def to_s: () -> String
13
12
  def referred_by?: (String string) -> bool
14
13
  def ==: (Token other) -> bool
14
+ def first_line: () -> Integer
15
+ def first_column: () -> Integer
16
+ def last_line: () -> Integer
17
+ def last_column: () -> Integer
18
+ alias line first_line
19
+ alias column first_column
15
20
  end
16
21
  end
17
22
  end
@@ -0,0 +1,5 @@
1
+ class StringScanner
2
+ # TODO: Is it better to define `StringScanner#fetch` whose type '(Integer) -> String' ?
3
+ def []: (Integer) -> String
4
+ | ...
5
+ end
@@ -69,11 +69,12 @@
69
69
 
70
70
 
71
71
  <%# b4_user_pre_prologue -%>
72
+ <%- if output.aux.prologue -%>
72
73
  /* First part of user prologue. */
73
74
  #line <%= output.aux.prologue_first_lineno %> "<%= output.grammar_file_path %>"
74
-
75
75
  <%= output.aux.prologue %>
76
76
  #line [@oline@] [@ofile@]
77
+ <%- end -%>
77
78
 
78
79
  <%# b4_cast_define -%>
79
80
  # ifndef YY_CAST
@@ -1483,6 +1484,7 @@ YYLTYPE yylloc = yyloc_default;
1483
1484
  <%# b4_declare_parser_state_variables -%>
1484
1485
  /* Number of syntax errors so far. */
1485
1486
  int yynerrs = 0;
1487
+ YY_USE (yynerrs); /* Silence compiler warning. */
1486
1488
 
1487
1489
  yy_state_fast_t yystate = 0;
1488
1490
  /* Number of tokens to shift before error messages enabled. */
@@ -2043,7 +2045,8 @@ yyreturnlab:
2043
2045
  }
2044
2046
 
2045
2047
  <%# b4_percent_code_get([[epilogue]]) -%>
2048
+ <%- if output.aux.epilogue -%>
2046
2049
  #line <%= output.aux.epilogue_first_lineno - 1 %> "<%= output.grammar_file_path %>"
2047
-
2048
2050
  <%= output.aux.epilogue -%>
2051
+ <%- end -%>
2049
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.9
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-05 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:
@@ -40,21 +40,39 @@ files:
40
40
  - lib/lrama/counterexamples/derivation.rb
41
41
  - lib/lrama/counterexamples/example.rb
42
42
  - lib/lrama/counterexamples/path.rb
43
+ - lib/lrama/counterexamples/production_path.rb
44
+ - lib/lrama/counterexamples/start_path.rb
43
45
  - lib/lrama/counterexamples/state_item.rb
46
+ - lib/lrama/counterexamples/transition_path.rb
44
47
  - lib/lrama/counterexamples/triple.rb
45
48
  - lib/lrama/digraph.rb
46
49
  - lib/lrama/grammar.rb
47
50
  - lib/lrama/grammar/auxiliary.rb
48
51
  - lib/lrama/grammar/code.rb
52
+ - lib/lrama/grammar/code/initial_action_code.rb
53
+ - lib/lrama/grammar/code/no_reference_code.rb
54
+ - lib/lrama/grammar/code/printer_code.rb
55
+ - lib/lrama/grammar/code/rule_action.rb
56
+ - lib/lrama/grammar/counter.rb
49
57
  - lib/lrama/grammar/error_token.rb
58
+ - lib/lrama/grammar/parameterizing_rules/builder.rb
59
+ - lib/lrama/grammar/parameterizing_rules/builder/base.rb
60
+ - lib/lrama/grammar/parameterizing_rules/builder/list.rb
61
+ - lib/lrama/grammar/parameterizing_rules/builder/nonempty_list.rb
62
+ - lib/lrama/grammar/parameterizing_rules/builder/option.rb
63
+ - lib/lrama/grammar/parameterizing_rules/builder/separated_list.rb
64
+ - lib/lrama/grammar/parameterizing_rules/builder/separated_nonempty_list.rb
50
65
  - lib/lrama/grammar/percent_code.rb
51
66
  - lib/lrama/grammar/precedence.rb
52
67
  - lib/lrama/grammar/printer.rb
53
68
  - lib/lrama/grammar/reference.rb
54
69
  - lib/lrama/grammar/rule.rb
70
+ - lib/lrama/grammar/rule_builder.rb
55
71
  - lib/lrama/grammar/symbol.rb
72
+ - lib/lrama/grammar/type.rb
56
73
  - lib/lrama/grammar/union.rb
57
74
  - lib/lrama/lexer.rb
75
+ - lib/lrama/lexer/location.rb
58
76
  - lib/lrama/lexer/token.rb
59
77
  - lib/lrama/lexer/token/char.rb
60
78
  - lib/lrama/lexer/token/ident.rb
@@ -77,7 +95,6 @@ files:
77
95
  - lib/lrama/states.rb
78
96
  - lib/lrama/states/item.rb
79
97
  - lib/lrama/states_reporter.rb
80
- - lib/lrama/type.rb
81
98
  - lib/lrama/version.rb
82
99
  - lib/lrama/warning.rb
83
100
  - lrama.gemspec
@@ -90,8 +107,25 @@ files:
90
107
  - sig/lrama/bitmap.rbs
91
108
  - sig/lrama/digraph.rbs
92
109
  - sig/lrama/grammar.rbs
110
+ - sig/lrama/grammar/code.rbs
111
+ - sig/lrama/grammar/code/printer_code.rbs
112
+ - sig/lrama/grammar/counter.rbs
113
+ - sig/lrama/grammar/error_token.rbs
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
93
121
  - sig/lrama/grammar/percent_code.rbs
122
+ - sig/lrama/grammar/precedence.rbs
123
+ - sig/lrama/grammar/printer.rbs
94
124
  - sig/lrama/grammar/reference.rbs
125
+ - sig/lrama/grammar/rule.rbs
126
+ - sig/lrama/grammar/rule_builder.rbs
127
+ - sig/lrama/grammar/symbol.rbs
128
+ - sig/lrama/lexer/location.rbs
95
129
  - sig/lrama/lexer/token.rbs
96
130
  - sig/lrama/lexer/token/char.rbs
97
131
  - sig/lrama/lexer/token/ident.rbs
@@ -101,6 +135,7 @@ files:
101
135
  - sig/lrama/report/duration.rbs
102
136
  - sig/lrama/report/profile.rbs
103
137
  - sig/lrama/warning.rbs
138
+ - sig/stdlib/strscan/string_scanner.rbs
104
139
  - template/bison/_yacc.h
105
140
  - template/bison/yacc.c
106
141
  - template/bison/yacc.h
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