ibex 0.1.0

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.
Files changed (118) hide show
  1. checksums.yaml +7 -0
  2. data/.rubocop.yml +43 -0
  3. data/CHANGELOG.md +30 -0
  4. data/LICENSE.txt +21 -0
  5. data/README.md +194 -0
  6. data/Rakefile +25 -0
  7. data/Steepfile +10 -0
  8. data/docs/architecture.md +99 -0
  9. data/docs/compat-notes.md +37 -0
  10. data/docs/grammar-reference.md +127 -0
  11. data/docs/lexer-coverage.md +14 -0
  12. data/docs/phase10-extensions.md +27 -0
  13. data/docs/racc-migration.md +47 -0
  14. data/exe/ibex +6 -0
  15. data/gemfiles/Gemfile +7 -0
  16. data/gemfiles/Gemfile.lock +98 -0
  17. data/lib/ibex/analysis/sets.rb +194 -0
  18. data/lib/ibex/analysis.rb +8 -0
  19. data/lib/ibex/cli/counterexample_options.rb +38 -0
  20. data/lib/ibex/cli/outputs.rb +88 -0
  21. data/lib/ibex/cli.rb +333 -0
  22. data/lib/ibex/codegen/dot.rb +52 -0
  23. data/lib/ibex/codegen/html.rb +110 -0
  24. data/lib/ibex/codegen/rbs.rb +54 -0
  25. data/lib/ibex/codegen/report.rb +149 -0
  26. data/lib/ibex/codegen/ruby.rb +235 -0
  27. data/lib/ibex/codegen/symbol_labels.rb +18 -0
  28. data/lib/ibex/error.rb +7 -0
  29. data/lib/ibex/frontend/action_scanner.rb +266 -0
  30. data/lib/ibex/frontend/ast.rb +146 -0
  31. data/lib/ibex/frontend/bootstrap_parser.rb +163 -0
  32. data/lib/ibex/frontend/dsl.rb +196 -0
  33. data/lib/ibex/frontend/generated_parser.rb +434 -0
  34. data/lib/ibex/frontend/generated_parser_base.rb +273 -0
  35. data/lib/ibex/frontend/grammar.y +156 -0
  36. data/lib/ibex/frontend/lexer.rb +165 -0
  37. data/lib/ibex/frontend/parser/declarations.rb +163 -0
  38. data/lib/ibex/frontend/parser/rules.rb +154 -0
  39. data/lib/ibex/frontend/parser.rb +23 -0
  40. data/lib/ibex/frontend/regenerator.rb +41 -0
  41. data/lib/ibex/frontend/source_cursor.rb +94 -0
  42. data/lib/ibex/frontend/token_adapter/declaration_state.rb +248 -0
  43. data/lib/ibex/frontend/token_adapter/delimiter_tracker.rb +37 -0
  44. data/lib/ibex/frontend/token_adapter/rule_state.rb +162 -0
  45. data/lib/ibex/frontend/token_adapter.rb +108 -0
  46. data/lib/ibex/frontend.rb +28 -0
  47. data/lib/ibex/ir/automaton_ir.rb +109 -0
  48. data/lib/ibex/ir/grammar_ir.rb +192 -0
  49. data/lib/ibex/ir/serialize.rb +154 -0
  50. data/lib/ibex/ir.rb +53 -0
  51. data/lib/ibex/lalr/builder.rb +270 -0
  52. data/lib/ibex/lalr/conflict.rb +120 -0
  53. data/lib/ibex/lalr/conflict_search.rb +332 -0
  54. data/lib/ibex/lalr/conflict_search_limits.rb +39 -0
  55. data/lib/ibex/lalr/counterexample.rb +138 -0
  56. data/lib/ibex/lalr/default_reductions.rb +67 -0
  57. data/lib/ibex/lalr.rb +27 -0
  58. data/lib/ibex/normalize/declarations.rb +60 -0
  59. data/lib/ibex/normalize/diagnostics.rb +99 -0
  60. data/lib/ibex/normalize/expander.rb +218 -0
  61. data/lib/ibex/normalize/expression.rb +54 -0
  62. data/lib/ibex/normalize.rb +166 -0
  63. data/lib/ibex/runtime/parser.rb +360 -0
  64. data/lib/ibex/runtime.rb +8 -0
  65. data/lib/ibex/tables.rb +125 -0
  66. data/lib/ibex/version.rb +6 -0
  67. data/lib/ibex.rb +23 -0
  68. data/sig/ibex/analysis/sets.rbs +72 -0
  69. data/sig/ibex/analysis.rbs +6 -0
  70. data/sig/ibex/cli/counterexample_options.rbs +16 -0
  71. data/sig/ibex/cli/outputs.rbs +31 -0
  72. data/sig/ibex/cli.rbs +108 -0
  73. data/sig/ibex/codegen/dot.rbs +19 -0
  74. data/sig/ibex/codegen/html.rbs +35 -0
  75. data/sig/ibex/codegen/rbs.rbs +31 -0
  76. data/sig/ibex/codegen/report.rbs +39 -0
  77. data/sig/ibex/codegen/ruby.rbs +92 -0
  78. data/sig/ibex/codegen/symbol_labels.rbs +11 -0
  79. data/sig/ibex/error.rbs +7 -0
  80. data/sig/ibex/frontend/action_scanner.rbs +74 -0
  81. data/sig/ibex/frontend/ast.rbs +223 -0
  82. data/sig/ibex/frontend/bootstrap_parser.rbs +80 -0
  83. data/sig/ibex/frontend/dsl.rbs +124 -0
  84. data/sig/ibex/frontend/generated_parser.rbs +163 -0
  85. data/sig/ibex/frontend/generated_parser_base.rbs +114 -0
  86. data/sig/ibex/frontend/lexer.rbs +61 -0
  87. data/sig/ibex/frontend/parser/declarations.rbs +56 -0
  88. data/sig/ibex/frontend/parser/rules.rbs +48 -0
  89. data/sig/ibex/frontend/parser.rbs +16 -0
  90. data/sig/ibex/frontend/regenerator.rbs +16 -0
  91. data/sig/ibex/frontend/source_cursor.rbs +73 -0
  92. data/sig/ibex/frontend/token_adapter/declaration_state.rbs +97 -0
  93. data/sig/ibex/frontend/token_adapter/delimiter_tracker.rbs +25 -0
  94. data/sig/ibex/frontend/token_adapter/rule_state.rbs +77 -0
  95. data/sig/ibex/frontend/token_adapter.rbs +67 -0
  96. data/sig/ibex/frontend.rbs +15 -0
  97. data/sig/ibex/ir/automaton_ir.rbs +77 -0
  98. data/sig/ibex/ir/grammar_ir.rbs +143 -0
  99. data/sig/ibex/ir/serialize.rbs +50 -0
  100. data/sig/ibex/ir.rbs +43 -0
  101. data/sig/ibex/lalr/builder.rbs +85 -0
  102. data/sig/ibex/lalr/conflict.rbs +47 -0
  103. data/sig/ibex/lalr/conflict_search.rbs +131 -0
  104. data/sig/ibex/lalr/conflict_search_limits.rbs +29 -0
  105. data/sig/ibex/lalr/counterexample.rbs +53 -0
  106. data/sig/ibex/lalr/default_reductions.rbs +20 -0
  107. data/sig/ibex/lalr.rbs +23 -0
  108. data/sig/ibex/normalize/declarations.rbs +20 -0
  109. data/sig/ibex/normalize/diagnostics.rbs +32 -0
  110. data/sig/ibex/normalize/expander.rbs +66 -0
  111. data/sig/ibex/normalize/expression.rbs +21 -0
  112. data/sig/ibex/normalize.rbs +96 -0
  113. data/sig/ibex/runtime/parser.rbs +167 -0
  114. data/sig/ibex/runtime.rbs +6 -0
  115. data/sig/ibex/tables.rbs +50 -0
  116. data/sig/ibex/version.rbs +6 -0
  117. data/sig/ibex.rbs +6 -0
  118. metadata +161 -0
@@ -0,0 +1,80 @@
1
+ # Generated from lib/ibex/frontend/bootstrap_parser.rb with RBS::Inline
2
+
3
+ module Ibex
4
+ module Frontend
5
+ # Handwritten parser used only to regenerate the self-hosted frontend.
6
+ class BootstrapParser
7
+ include BootstrapParserDeclarations
8
+
9
+ include BootstrapParserRules
10
+
11
+ @mode: Symbol
12
+
13
+ @index: Integer
14
+
15
+ @tokens: Array[Token]
16
+
17
+ # @rbs (String | Array[Token] source, ?file: String, ?mode: Symbol) -> void
18
+ def initialize: (String | Array[Token] source, ?file: String, ?mode: Symbol) -> void
19
+
20
+ # @rbs () -> AST::Root
21
+ def parse: () -> AST::Root
22
+
23
+ private
24
+
25
+ # @rbs () -> String
26
+ def parse_constant_path: () -> String
27
+
28
+ # @rbs () -> String
29
+ def parse_symbol_name: () -> String
30
+
31
+ # @rbs () -> Token
32
+ def expect_symbol: () -> Token
33
+
34
+ # @rbs (Array[String] values) -> Token
35
+ def expect_one_of: (Array[String] values) -> Token
36
+
37
+ # @rbs (String value) -> bool
38
+ def keyword?: (String value) -> bool
39
+
40
+ # @rbs (String value) -> Token
41
+ def expect_keyword: (String value) -> Token
42
+
43
+ # @rbs (Symbol type) -> (Token | false)
44
+ def accept: (Symbol type) -> (Token | false)
45
+
46
+ # @rbs (Symbol type) -> Token
47
+ def expect: (Symbol type) -> Token
48
+
49
+ # @rbs () -> Token
50
+ def current: () -> Token
51
+
52
+ # @rbs () -> Token
53
+ def lookahead: () -> Token
54
+
55
+ # @rbs () -> Token
56
+ def advance: () -> Token
57
+
58
+ # @rbs () -> AST::user_code
59
+ def parse_user_code: () -> AST::user_code
60
+
61
+ # @rbs (Location location, String feature) -> void
62
+ def extended_only!: (Location location, String feature) -> void
63
+
64
+ # @rbs (String | Symbol expected) -> bot
65
+ def fail_expected: (String | Symbol expected) -> bot
66
+
67
+ # @rbs (Location location, String message) -> bot
68
+ def fail_at: (Location location, String message) -> bot
69
+
70
+ # @rbs (Token token) -> String
71
+ def token_string: (Token token) -> String
72
+
73
+ # @rbs (Token token) -> Integer
74
+ def token_integer: (Token token) -> Integer
75
+
76
+ # @rbs (Token token) -> user_code_token
77
+ def token_user_code: (Token token) -> user_code_token
78
+ end
79
+ end
80
+ end
@@ -0,0 +1,124 @@
1
+ # Generated from lib/ibex/frontend/dsl.rb with RBS::Inline
2
+
3
+ module Ibex
4
+ module Frontend
5
+ # Builds the same Grammar AST as the text frontend through a Ruby API.
6
+ module DSL
7
+ # @rbs (class_name: Object, ?superclass: Object?, ?file: String) { (Builder) -> void } -> AST::Root
8
+ def self?.grammar: (class_name: Object, ?superclass: Object?, ?file: String) { (Builder) -> void } -> AST::Root
9
+
10
+ # Mutable definition context whose output is an immutable-shape AST.
11
+ class Builder
12
+ @user_code: AST::user_code
13
+
14
+ @rules: Array[AST::Rule]
15
+
16
+ @declarations: Array[AST::declaration]
17
+
18
+ @line: Integer
19
+
20
+ @file: String
21
+
22
+ @superclass: String?
23
+
24
+ @class_name: String
25
+
26
+ # @rbs (class_name: Object, superclass: Object?, file: String) -> void
27
+ def initialize: (class_name: Object, superclass: Object?, file: String) -> void
28
+
29
+ # @rbs (*Object names) -> void
30
+ def token: (*Object names) -> void
31
+
32
+ # @rbs (*Object names) -> void
33
+ def options: (*Object names) -> void
34
+
35
+ # @rbs (Integer conflicts) -> void
36
+ def expect: (Integer conflicts) -> void
37
+
38
+ # @rbs (Object name) -> void
39
+ def start: (Object name) -> void
40
+
41
+ # @rbs (Object name, Object expression) -> void
42
+ def convert: (Object name, Object expression) -> void
43
+
44
+ # @rbs (?direction: Symbol) { (PrecedenceBuilder) -> void } -> void
45
+ def precedence: (?direction: Symbol) { (PrecedenceBuilder) -> void } -> void
46
+
47
+ # @rbs (Object lhs) { (RuleBuilder) -> void } -> void
48
+ def rule: (Object lhs) { (RuleBuilder) -> void } -> void
49
+
50
+ # @rbs (Object name, Object code) -> void
51
+ def user_code: (Object name, Object code) -> void
52
+
53
+ # @rbs (Object name, ?as: Object?) -> AST::SymbolReference
54
+ def ref: (Object name, ?as: Object?) -> AST::SymbolReference
55
+
56
+ # @rbs (Object item) -> AST::Optional
57
+ def optional: (Object item) -> AST::Optional
58
+
59
+ # @rbs (Object item) -> AST::Star
60
+ def star: (Object item) -> AST::Star
61
+
62
+ # @rbs (Object item) -> AST::Plus
63
+ def plus: (Object item) -> AST::Plus
64
+
65
+ # @rbs (*Object alternatives) -> AST::Group
66
+ def group: (*Object alternatives) -> AST::Group
67
+
68
+ # @rbs (Object item, Object separator, ?nonempty: bool) -> AST::SeparatedList
69
+ def separated_list: (Object item, Object separator, ?nonempty: bool) -> AST::SeparatedList
70
+
71
+ # @rbs (Object code) -> AST::InlineAction
72
+ def inline: (Object code) -> AST::InlineAction
73
+
74
+ # @rbs () -> AST::Root
75
+ def to_ast: () -> AST::Root
76
+
77
+ # @rbs (Object item) -> AST::item
78
+ def normalize_item: (Object item) -> AST::item
79
+
80
+ # @rbs () -> Location
81
+ def next_location: () -> Location
82
+ end
83
+
84
+ # Collects ordered associativity levels.
85
+ class PrecedenceBuilder
86
+ attr_reader levels: Array[AST::PrecedenceLevel]
87
+
88
+ @grammar: Builder
89
+
90
+ # @rbs (Builder grammar) -> void
91
+ def initialize: (Builder grammar) -> void
92
+
93
+ # @rbs (*Object symbols) -> void
94
+ def left: (*Object symbols) -> void
95
+
96
+ # @rbs (*Object symbols) -> void
97
+ def right: (*Object symbols) -> void
98
+
99
+ # @rbs (*Object symbols) -> void
100
+ def nonassoc: (*Object symbols) -> void
101
+
102
+ private
103
+
104
+ # @rbs (Symbol associativity, Array[Object] symbols) -> void
105
+ def add_level: (Symbol associativity, Array[Object] symbols) -> void
106
+ end
107
+
108
+ # Collects alternatives for one nonterminal.
109
+ class RuleBuilder
110
+ attr_reader alternatives: Array[AST::Alternative]
111
+
112
+ @grammar: Builder
113
+
114
+ @default_location: Location
115
+
116
+ # @rbs (Builder grammar, Location default_location) -> void
117
+ def initialize: (Builder grammar, Location default_location) -> void
118
+
119
+ # @rbs (*Object items, ?action: Object?, ?precedence: Object?) -> void
120
+ def alt: (*Object items, ?action: Object?, ?precedence: Object?) -> void
121
+ end
122
+ end
123
+ end
124
+ end
@@ -0,0 +1,163 @@
1
+ # Generated from lib/ibex/frontend/generated_parser.rb with RBS::Inline
2
+
3
+ module Ibex
4
+ module Frontend
5
+ class GeneratedParser < Ibex::Frontend::GeneratedParserBase
6
+ PARSER_TABLE_FORMAT_VERSION: ::Integer
7
+
8
+ TOKEN_IDS: untyped
9
+
10
+ TOKEN_NAMES: untyped
11
+
12
+ ACTIONS: untyped
13
+
14
+ GOTOS: untyped
15
+
16
+ DEFAULT_ACTIONS: untyped
17
+
18
+ PRODUCTIONS: untyped
19
+
20
+ PARSER_TABLES: untyped
21
+
22
+ def self.parser_tables: () -> untyped
23
+
24
+ DEBUG_ENABLED: bool
25
+
26
+ private def _ibex_action_0: (untyped val, untyped _values) -> untyped
27
+
28
+ private def _ibex_action_1: (untyped val, untyped _values) -> untyped
29
+
30
+ private def _ibex_action_2: (untyped val, untyped _values) -> untyped
31
+
32
+ private def _ibex_action_3: (untyped val, untyped _values) -> untyped
33
+
34
+ private def _ibex_action_4: (untyped val, untyped _values) -> untyped
35
+
36
+ private def _ibex_action_7: (untyped val, untyped _values) -> untyped
37
+
38
+ private def _ibex_action_8: (untyped val, untyped _values) -> untyped
39
+
40
+ private def _ibex_action_9: (untyped val, untyped _values) -> untyped
41
+
42
+ private def _ibex_action_10: (untyped val, untyped _values) -> untyped
43
+
44
+ private def _ibex_action_11: (untyped val, untyped _values) -> untyped
45
+
46
+ private def _ibex_action_12: (untyped val, untyped _values) -> untyped
47
+
48
+ private def _ibex_action_13: (untyped val, untyped _values) -> untyped
49
+
50
+ private def _ibex_action_14: (untyped val, untyped _values) -> untyped
51
+
52
+ private def _ibex_action_15: (untyped val, untyped _values) -> untyped
53
+
54
+ private def _ibex_action_16: (untyped val, untyped _values) -> untyped
55
+
56
+ private def _ibex_action_17: (untyped val, untyped _values) -> untyped
57
+
58
+ private def _ibex_action_18: (untyped val, untyped _values) -> untyped
59
+
60
+ private def _ibex_action_19: (untyped val, untyped _values) -> untyped
61
+
62
+ private def _ibex_action_20: (untyped val, untyped _values) -> untyped
63
+
64
+ private def _ibex_action_21: (untyped val, untyped _values) -> untyped
65
+
66
+ private def _ibex_action_22: (untyped val, untyped _values) -> untyped
67
+
68
+ private def _ibex_action_23: (untyped val, untyped _values) -> untyped
69
+
70
+ private def _ibex_action_24: (untyped val, untyped _values) -> untyped
71
+
72
+ private def _ibex_action_25: (untyped val, untyped _values) -> untyped
73
+
74
+ private def _ibex_action_26: (untyped val, untyped _values) -> untyped
75
+
76
+ private def _ibex_action_27: (untyped val, untyped _values) -> untyped
77
+
78
+ private def _ibex_action_28: (untyped val, untyped _values) -> untyped
79
+
80
+ private def _ibex_action_29: (untyped val, untyped _values) -> untyped
81
+
82
+ private def _ibex_action_30: (untyped val, untyped _values) -> untyped
83
+
84
+ private def _ibex_action_31: (untyped val, untyped _values) -> untyped
85
+
86
+ private def _ibex_action_32: (untyped val, untyped _values) -> untyped
87
+
88
+ private def _ibex_action_33: (untyped val, untyped _values) -> untyped
89
+
90
+ private def _ibex_action_34: (untyped val, untyped _values) -> untyped
91
+
92
+ private def _ibex_action_35: (untyped val, untyped _values) -> untyped
93
+
94
+ private def _ibex_action_36: (untyped val, untyped _values) -> untyped
95
+
96
+ private def _ibex_action_37: (untyped val, untyped _values) -> untyped
97
+
98
+ private def _ibex_action_38: (untyped val, untyped _values) -> untyped
99
+
100
+ private def _ibex_action_39: (untyped val, untyped _values) -> untyped
101
+
102
+ private def _ibex_action_42: (untyped val, untyped _values) -> untyped
103
+
104
+ private def _ibex_action_43: (untyped val, untyped _values) -> untyped
105
+
106
+ private def _ibex_action_44: (untyped val, untyped _values) -> untyped
107
+
108
+ private def _ibex_action_45: (untyped val, untyped _values) -> untyped
109
+
110
+ private def _ibex_action_46: (untyped val, untyped _values) -> untyped
111
+
112
+ private def _ibex_action_47: (untyped val, untyped _values) -> untyped
113
+
114
+ private def _ibex_action_48: (untyped val, untyped _values) -> untyped
115
+
116
+ private def _ibex_action_49: (untyped val, untyped _values) -> untyped
117
+
118
+ private def _ibex_action_50: (untyped val, untyped _values) -> untyped
119
+
120
+ private def _ibex_action_51: (untyped val, untyped _values) -> untyped
121
+
122
+ private def _ibex_action_52: (untyped val, untyped _values) -> untyped
123
+
124
+ private def _ibex_action_53: (untyped val, untyped _values) -> untyped
125
+
126
+ private def _ibex_action_54: (untyped val, untyped _values) -> untyped
127
+
128
+ private def _ibex_action_55: (untyped val, untyped _values) -> untyped
129
+
130
+ private def _ibex_action_56: (untyped val, untyped _values) -> untyped
131
+
132
+ private def _ibex_action_57: (untyped val, untyped _values) -> untyped
133
+
134
+ private def _ibex_action_58: (untyped val, untyped _values) -> untyped
135
+
136
+ private def _ibex_action_59: (untyped val, untyped _values) -> untyped
137
+
138
+ private def _ibex_action_60: (untyped val, untyped _values) -> untyped
139
+
140
+ private def _ibex_action_61: (untyped val, untyped _values) -> untyped
141
+
142
+ private def _ibex_action_62: (untyped val, untyped _values) -> untyped
143
+
144
+ private def _ibex_action_63: (untyped val, untyped _values) -> untyped
145
+
146
+ private def _ibex_action_64: (untyped val, untyped _values) -> untyped
147
+
148
+ private def _ibex_action_65: (untyped val, untyped _values) -> untyped
149
+
150
+ private def _ibex_action_66: (untyped val, untyped _values) -> untyped
151
+
152
+ private def _ibex_action_67: (untyped val, untyped _values) -> untyped
153
+
154
+ private def _ibex_action_68: (untyped val, untyped _values) -> untyped
155
+
156
+ private def _ibex_action_69: (untyped val, untyped _values) -> untyped
157
+
158
+ private def _ibex_action_70: (untyped val, untyped _values) -> untyped
159
+
160
+ private def _ibex_action_71: (untyped val, untyped _values) -> untyped
161
+ end
162
+ end
163
+ end
@@ -0,0 +1,114 @@
1
+ # Generated from lib/ibex/frontend/generated_parser_base.rb with RBS::Inline
2
+
3
+ module Ibex
4
+ module Frontend
5
+ # Semantic support and token delivery for the generated grammar parser.
6
+ class GeneratedParserBase < Runtime::Parser
7
+ @mode: Symbol
8
+
9
+ @adapter: TokenAdapter
10
+
11
+ # @rbs (Array[Token] tokens, ?mode: Symbol) -> void
12
+ def initialize: (Array[Token] tokens, ?mode: Symbol) -> void
13
+
14
+ # @rbs () -> AST::Root
15
+ def parse: () -> AST::Root
16
+
17
+ # @rbs () -> ([external_token, Token] | false)
18
+ def next_token: () -> ([ external_token, Token ] | false)
19
+
20
+ # @rbs (Integer? _token_id, Token? value, Array[untyped] _value_stack) -> bot
21
+ def on_error: (Integer? _token_id, Token? value, Array[untyped] _value_stack) -> bot
22
+
23
+ private
24
+
25
+ # @rbs (Token? token) -> void
26
+ def raise_contextual_error: (Token? token) -> void
27
+
28
+ # @rbs (Token? token) -> void
29
+ def raise_group_contextual_error: (Token? token) -> void
30
+
31
+ # @rbs () -> void
32
+ def raise_conversion_contextual_error: () -> void
33
+
34
+ # @rbs (Token? token) -> String
35
+ def expected_description: (Token? token) -> String
36
+
37
+ # @rbs (Token? token) -> String
38
+ def structural_expectation: (Token? token) -> String
39
+
40
+ # @rbs (Token class_token, Array[String] class_parts, Array[String]? superclass,
41
+ # Array[AST::declaration] declarations, Array[AST::Rule] rules, AST::user_code user_code) -> AST::Root
42
+ def build_root: (Token class_token, Array[String] class_parts, Array[String]? superclass, Array[AST::declaration] declarations, Array[AST::Rule] rules, AST::user_code user_code) -> AST::Root
43
+
44
+ # @rbs (Token keyword, Array[String] names) -> AST::Tokens
45
+ def build_tokens: (Token keyword, Array[String] names) -> AST::Tokens
46
+
47
+ # @rbs (Token keyword, Symbol direction, Array[AST::PrecedenceLevel] levels) -> AST::Precedence
48
+ def build_precedence: (Token keyword, Symbol direction, Array[AST::PrecedenceLevel] levels) -> AST::Precedence
49
+
50
+ # @rbs (Token association, Array[String] symbols) -> AST::PrecedenceLevel
51
+ def build_precedence_level: (Token association, Array[String] symbols) -> AST::PrecedenceLevel
52
+
53
+ # @rbs (Token keyword, Array[String] names) -> AST::Options
54
+ def build_options: (Token keyword, Array[String] names) -> AST::Options
55
+
56
+ # @rbs (Token keyword, Token integer) -> AST::Expect
57
+ def build_expect: (Token keyword, Token integer) -> AST::Expect
58
+
59
+ # @rbs (Token keyword, String name) -> AST::Start
60
+ def build_start: (Token keyword, String name) -> AST::Start
61
+
62
+ # @rbs (Token keyword, Array[AST::Conversion] pairs) -> AST::Convert
63
+ def build_convert: (Token keyword, Array[AST::Conversion] pairs) -> AST::Convert
64
+
65
+ # @rbs (Token name_token, Token literal_token) -> AST::Conversion
66
+ def build_conversion: (Token name_token, Token literal_token) -> AST::Conversion
67
+
68
+ # @rbs (Token lhs, Array[AST::Alternative] alternatives) -> AST::Rule
69
+ def build_rule: (Token lhs, Array[AST::Alternative] alternatives) -> AST::Rule
70
+
71
+ # @rbs (Array[AST::item] items, Token? precedence) -> AST::Alternative
72
+ def build_alternative: (Array[AST::item] items, Token? precedence) -> AST::Alternative
73
+
74
+ # @rbs (AST::item? item) -> Location?
75
+ def item_start_location: (AST::item? item) -> Location?
76
+
77
+ # @rbs (Token token, [Token, Token]? named_reference, Array[Token] suffixes) -> AST::item
78
+ def build_symbol_reference: (Token token, [ Token, Token ]? named_reference, Array[Token] suffixes) -> AST::item
79
+
80
+ # @rbs (Token token) -> AST::InlineAction
81
+ def build_action: (Token token) -> AST::InlineAction
82
+
83
+ # @rbs (Token opening, Array[Array[AST::item]] alternatives, Array[Token] suffixes) -> AST::item
84
+ def build_group: (Token opening, Array[Array[AST::item]] alternatives, Array[Token] suffixes) -> AST::item
85
+
86
+ # @rbs (Token function, AST::item item, AST::item separator) -> AST::SeparatedList
87
+ def build_separated_list: (Token function, AST::item item, AST::item separator) -> AST::SeparatedList
88
+
89
+ # @rbs (AST::item item, Array[Token] suffixes) -> AST::item
90
+ def apply_suffixes: (AST::item item, Array[Token] suffixes) -> AST::item
91
+
92
+ # @rbs (AST::user_code blocks, Token token) -> AST::user_code
93
+ def append_user_code: (AST::user_code blocks, Token token) -> AST::user_code
94
+
95
+ # @rbs () -> AST::user_code
96
+ def empty_user_code: () -> AST::user_code
97
+
98
+ # @rbs (Location location, String feature) -> void
99
+ def extended_only!: (Location location, String feature) -> void
100
+
101
+ # @rbs (Location location, String message) -> bot
102
+ def fail_at: (Location location, String message) -> bot
103
+
104
+ # @rbs (Token token) -> String
105
+ def token_string: (Token token) -> String
106
+
107
+ # @rbs (Token token) -> Integer
108
+ def token_integer: (Token token) -> Integer
109
+
110
+ # @rbs (Token token) -> user_code_token
111
+ def token_user_code: (Token token) -> user_code_token
112
+ end
113
+ end
114
+ end
@@ -0,0 +1,61 @@
1
+ # Generated from lib/ibex/frontend/lexer.rb with RBS::Inline
2
+
3
+ module Ibex
4
+ module Frontend
5
+ # Tokenizes a racc-compatible grammar while preserving source locations.
6
+ class Lexer
7
+ PUNCTUATION: Hash[String, Symbol]
8
+
9
+ USER_CODE: Regexp
10
+
11
+ @cursor: SourceCursor
12
+
13
+ # @rbs (String source, ?file: String) -> void
14
+ def initialize: (String source, ?file: String) -> void
15
+
16
+ # @rbs () -> Array[Token]
17
+ def tokenize: () -> Array[Token]
18
+
19
+ # @rbs () -> Token
20
+ def next_token: () -> Token
21
+
22
+ private
23
+
24
+ # @rbs (String character) -> Token
25
+ def scan_regular_token: (String character) -> Token
26
+
27
+ # @rbs () -> void
28
+ def skip_ignored: () -> void
29
+
30
+ # @rbs () -> void
31
+ def skip_block_comment: () -> void
32
+
33
+ # @rbs () -> bool
34
+ def line_start?: () -> bool
35
+
36
+ # @rbs () -> Token
37
+ def scan_user_code: () -> Token
38
+
39
+ # @rbs () -> Token
40
+ def scan_scope: () -> Token
41
+
42
+ # @rbs () -> Token
43
+ def scan_identifier: () -> Token
44
+
45
+ # @rbs () -> Token
46
+ def scan_integer: () -> Token
47
+
48
+ # @rbs () -> Token
49
+ def scan_literal: () -> Token
50
+
51
+ # @rbs () -> Token
52
+ def scan_punctuation: () -> Token
53
+
54
+ # @rbs (Symbol type, Regexp pattern) ?{ (String) -> token_value } -> Token
55
+ def scan_match: (Symbol type, Regexp pattern) ?{ (String) -> token_value } -> Token
56
+
57
+ # @rbs (Symbol type, token_value value, ?Location location) -> Token
58
+ def token: (Symbol type, token_value value, ?Location location) -> Token
59
+ end
60
+ end
61
+ end
@@ -0,0 +1,56 @@
1
+ # Generated from lib/ibex/frontend/parser/declarations.rb with RBS::Inline
2
+
3
+ module Ibex
4
+ module Frontend
5
+ # Parses the declaration section of a grammar.
6
+ module BootstrapParserDeclarations
7
+ DECLARATIONS: Array[String]
8
+
9
+ ASSOCIATIVITIES: Array[String]
10
+
11
+ private
12
+
13
+ # @rbs () -> Array[AST::declaration]
14
+ def parse_declarations: () -> Array[AST::declaration]
15
+
16
+ # @rbs () -> void
17
+ def parse_pragmas: () -> void
18
+
19
+ # @rbs () -> AST::declaration
20
+ def parse_declaration: () -> AST::declaration
21
+
22
+ # @rbs () -> AST::Tokens
23
+ def parse_tokens: () -> AST::Tokens
24
+
25
+ # @rbs () -> AST::Precedence
26
+ def parse_precedence: () -> AST::Precedence
27
+
28
+ # @rbs (String closing) -> Array[AST::PrecedenceLevel]
29
+ def precedence_levels: (String closing) -> Array[AST::PrecedenceLevel]
30
+
31
+ # @rbs () -> AST::Options
32
+ def parse_options: () -> AST::Options
33
+
34
+ # @rbs () -> AST::Expect
35
+ def parse_expect: () -> AST::Expect
36
+
37
+ # @rbs () -> AST::Start
38
+ def parse_start: () -> AST::Start
39
+
40
+ # @rbs () -> AST::Convert
41
+ def parse_convert: () -> AST::Convert
42
+
43
+ # @rbs (Integer line) -> Array[Token]
44
+ def tokens_on_line: (Integer line) -> Array[Token]
45
+
46
+ # @rbs (Array[Token] tokens, Location location) -> String
47
+ def decode_conversion: (Array[Token] tokens, Location location) -> String
48
+
49
+ # @rbs () -> bool
50
+ def declaration_start?: () -> bool
51
+
52
+ # @rbs () -> bool
53
+ def association_start?: () -> bool
54
+ end
55
+ end
56
+ end
@@ -0,0 +1,48 @@
1
+ # Generated from lib/ibex/frontend/parser/rules.rb with RBS::Inline
2
+
3
+ module Ibex
4
+ module Frontend
5
+ # Parses productions and extended RHS items.
6
+ module BootstrapParserRules
7
+ EXTENDED_SUFFIXES: Hash[Symbol, singleton(AST::Optional) | singleton(AST::Star) | singleton(AST::Plus)]
8
+
9
+ private
10
+
11
+ # @rbs () -> Array[AST::Rule]
12
+ def parse_rules: () -> Array[AST::Rule]
13
+
14
+ # @rbs () -> AST::Rule
15
+ def parse_rule: () -> AST::Rule
16
+
17
+ # @rbs (Token lhs) -> AST::Alternative
18
+ def parse_alternative: (Token lhs) -> AST::Alternative
19
+
20
+ # @rbs () -> AST::item
21
+ def parse_item: () -> AST::item
22
+
23
+ # @rbs () -> AST::InlineAction
24
+ def parse_action: () -> AST::InlineAction
25
+
26
+ # @rbs () -> String?
27
+ def parse_named_reference: () -> String?
28
+
29
+ # @rbs (AST::item item) -> AST::item
30
+ def parse_suffix: (AST::item item) -> AST::item
31
+
32
+ # @rbs () -> AST::item
33
+ def parse_group: () -> AST::item
34
+
35
+ # @rbs () -> AST::SeparatedList
36
+ def parse_separated_list: () -> AST::SeparatedList
37
+
38
+ # @rbs (Token lhs) -> bool
39
+ def alternative_end?: (Token lhs) -> bool
40
+
41
+ # @rbs (Token lhs) -> bool
42
+ def rule_start?: (Token lhs) -> bool
43
+
44
+ # @rbs () -> bool
45
+ def separated_list?: () -> bool
46
+ end
47
+ end
48
+ end
@@ -0,0 +1,16 @@
1
+ # Generated from lib/ibex/frontend/parser.rb with RBS::Inline
2
+
3
+ module Ibex
4
+ module Frontend
5
+ # Public grammar parser backed by Ibex's generated LR frontend.
6
+ class Parser
7
+ attr_reader implementation: GeneratedParser
8
+
9
+ # @rbs (String | Array[Token] source, ?file: String, ?mode: Symbol) -> void
10
+ def initialize: (String | Array[Token] source, ?file: String, ?mode: Symbol) -> void
11
+
12
+ # @rbs () -> AST::Root
13
+ def parse: () -> AST::Root
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,16 @@
1
+ # Generated from lib/ibex/frontend/regenerator.rb with RBS::Inline
2
+
3
+ module Ibex
4
+ module Frontend
5
+ # Builds the committed frontend parser from its canonical Ibex grammar.
6
+ module Regenerator
7
+ GRAMMAR_PATH: String
8
+
9
+ # @rbs () -> String
10
+ def self?.generate: () -> String
11
+
12
+ # @rbs () -> String
13
+ def self?.relative_grammar_path: () -> String
14
+ end
15
+ end
16
+ end