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.
- checksums.yaml +7 -0
- data/.rubocop.yml +43 -0
- data/CHANGELOG.md +30 -0
- data/LICENSE.txt +21 -0
- data/README.md +194 -0
- data/Rakefile +25 -0
- data/Steepfile +10 -0
- data/docs/architecture.md +99 -0
- data/docs/compat-notes.md +37 -0
- data/docs/grammar-reference.md +127 -0
- data/docs/lexer-coverage.md +14 -0
- data/docs/phase10-extensions.md +27 -0
- data/docs/racc-migration.md +47 -0
- data/exe/ibex +6 -0
- data/gemfiles/Gemfile +7 -0
- data/gemfiles/Gemfile.lock +98 -0
- data/lib/ibex/analysis/sets.rb +194 -0
- data/lib/ibex/analysis.rb +8 -0
- data/lib/ibex/cli/counterexample_options.rb +38 -0
- data/lib/ibex/cli/outputs.rb +88 -0
- data/lib/ibex/cli.rb +333 -0
- data/lib/ibex/codegen/dot.rb +52 -0
- data/lib/ibex/codegen/html.rb +110 -0
- data/lib/ibex/codegen/rbs.rb +54 -0
- data/lib/ibex/codegen/report.rb +149 -0
- data/lib/ibex/codegen/ruby.rb +235 -0
- data/lib/ibex/codegen/symbol_labels.rb +18 -0
- data/lib/ibex/error.rb +7 -0
- data/lib/ibex/frontend/action_scanner.rb +266 -0
- data/lib/ibex/frontend/ast.rb +146 -0
- data/lib/ibex/frontend/bootstrap_parser.rb +163 -0
- data/lib/ibex/frontend/dsl.rb +196 -0
- data/lib/ibex/frontend/generated_parser.rb +434 -0
- data/lib/ibex/frontend/generated_parser_base.rb +273 -0
- data/lib/ibex/frontend/grammar.y +156 -0
- data/lib/ibex/frontend/lexer.rb +165 -0
- data/lib/ibex/frontend/parser/declarations.rb +163 -0
- data/lib/ibex/frontend/parser/rules.rb +154 -0
- data/lib/ibex/frontend/parser.rb +23 -0
- data/lib/ibex/frontend/regenerator.rb +41 -0
- data/lib/ibex/frontend/source_cursor.rb +94 -0
- data/lib/ibex/frontend/token_adapter/declaration_state.rb +248 -0
- data/lib/ibex/frontend/token_adapter/delimiter_tracker.rb +37 -0
- data/lib/ibex/frontend/token_adapter/rule_state.rb +162 -0
- data/lib/ibex/frontend/token_adapter.rb +108 -0
- data/lib/ibex/frontend.rb +28 -0
- data/lib/ibex/ir/automaton_ir.rb +109 -0
- data/lib/ibex/ir/grammar_ir.rb +192 -0
- data/lib/ibex/ir/serialize.rb +154 -0
- data/lib/ibex/ir.rb +53 -0
- data/lib/ibex/lalr/builder.rb +270 -0
- data/lib/ibex/lalr/conflict.rb +120 -0
- data/lib/ibex/lalr/conflict_search.rb +332 -0
- data/lib/ibex/lalr/conflict_search_limits.rb +39 -0
- data/lib/ibex/lalr/counterexample.rb +138 -0
- data/lib/ibex/lalr/default_reductions.rb +67 -0
- data/lib/ibex/lalr.rb +27 -0
- data/lib/ibex/normalize/declarations.rb +60 -0
- data/lib/ibex/normalize/diagnostics.rb +99 -0
- data/lib/ibex/normalize/expander.rb +218 -0
- data/lib/ibex/normalize/expression.rb +54 -0
- data/lib/ibex/normalize.rb +166 -0
- data/lib/ibex/runtime/parser.rb +360 -0
- data/lib/ibex/runtime.rb +8 -0
- data/lib/ibex/tables.rb +125 -0
- data/lib/ibex/version.rb +6 -0
- data/lib/ibex.rb +23 -0
- data/sig/ibex/analysis/sets.rbs +72 -0
- data/sig/ibex/analysis.rbs +6 -0
- data/sig/ibex/cli/counterexample_options.rbs +16 -0
- data/sig/ibex/cli/outputs.rbs +31 -0
- data/sig/ibex/cli.rbs +108 -0
- data/sig/ibex/codegen/dot.rbs +19 -0
- data/sig/ibex/codegen/html.rbs +35 -0
- data/sig/ibex/codegen/rbs.rbs +31 -0
- data/sig/ibex/codegen/report.rbs +39 -0
- data/sig/ibex/codegen/ruby.rbs +92 -0
- data/sig/ibex/codegen/symbol_labels.rbs +11 -0
- data/sig/ibex/error.rbs +7 -0
- data/sig/ibex/frontend/action_scanner.rbs +74 -0
- data/sig/ibex/frontend/ast.rbs +223 -0
- data/sig/ibex/frontend/bootstrap_parser.rbs +80 -0
- data/sig/ibex/frontend/dsl.rbs +124 -0
- data/sig/ibex/frontend/generated_parser.rbs +163 -0
- data/sig/ibex/frontend/generated_parser_base.rbs +114 -0
- data/sig/ibex/frontend/lexer.rbs +61 -0
- data/sig/ibex/frontend/parser/declarations.rbs +56 -0
- data/sig/ibex/frontend/parser/rules.rbs +48 -0
- data/sig/ibex/frontend/parser.rbs +16 -0
- data/sig/ibex/frontend/regenerator.rbs +16 -0
- data/sig/ibex/frontend/source_cursor.rbs +73 -0
- data/sig/ibex/frontend/token_adapter/declaration_state.rbs +97 -0
- data/sig/ibex/frontend/token_adapter/delimiter_tracker.rbs +25 -0
- data/sig/ibex/frontend/token_adapter/rule_state.rbs +77 -0
- data/sig/ibex/frontend/token_adapter.rbs +67 -0
- data/sig/ibex/frontend.rbs +15 -0
- data/sig/ibex/ir/automaton_ir.rbs +77 -0
- data/sig/ibex/ir/grammar_ir.rbs +143 -0
- data/sig/ibex/ir/serialize.rbs +50 -0
- data/sig/ibex/ir.rbs +43 -0
- data/sig/ibex/lalr/builder.rbs +85 -0
- data/sig/ibex/lalr/conflict.rbs +47 -0
- data/sig/ibex/lalr/conflict_search.rbs +131 -0
- data/sig/ibex/lalr/conflict_search_limits.rbs +29 -0
- data/sig/ibex/lalr/counterexample.rbs +53 -0
- data/sig/ibex/lalr/default_reductions.rbs +20 -0
- data/sig/ibex/lalr.rbs +23 -0
- data/sig/ibex/normalize/declarations.rbs +20 -0
- data/sig/ibex/normalize/diagnostics.rbs +32 -0
- data/sig/ibex/normalize/expander.rbs +66 -0
- data/sig/ibex/normalize/expression.rbs +21 -0
- data/sig/ibex/normalize.rbs +96 -0
- data/sig/ibex/runtime/parser.rbs +167 -0
- data/sig/ibex/runtime.rbs +6 -0
- data/sig/ibex/tables.rbs +50 -0
- data/sig/ibex/version.rbs +6 -0
- data/sig/ibex.rbs +6 -0
- 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
|