lrama 0.5.12 → 0.6.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.github/workflows/test.yaml +20 -5
- data/Gemfile +1 -1
- data/NEWS.md +66 -0
- data/README.md +14 -3
- data/Steepfile +2 -0
- data/lib/lrama/command.rb +17 -3
- data/lib/lrama/context.rb +2 -22
- data/lib/lrama/grammar/binding.rb +24 -0
- data/lib/lrama/grammar/code/printer_code.rb +1 -1
- data/lib/lrama/grammar/code/rule_action.rb +2 -2
- data/lib/lrama/grammar/code.rb +19 -7
- data/lib/lrama/grammar/parameterizing_rule/resolver.rb +39 -0
- data/lib/lrama/grammar/parameterizing_rule/rhs.rb +15 -0
- data/lib/lrama/grammar/parameterizing_rule/rule.rb +16 -0
- data/lib/lrama/grammar/parameterizing_rule.rb +3 -0
- data/lib/lrama/grammar/percent_code.rb +3 -3
- data/lib/lrama/grammar/rule_builder.rb +69 -31
- data/lib/lrama/grammar/type.rb +13 -1
- data/lib/lrama/grammar.rb +15 -43
- data/lib/lrama/lexer/grammar_file.rb +21 -0
- data/lib/lrama/lexer/location.rb +77 -2
- data/lib/lrama/lexer/token/instantiate_rule.rb +23 -0
- data/lib/lrama/lexer/token/user_code.rb +10 -10
- data/lib/lrama/lexer/token.rb +6 -1
- data/lib/lrama/lexer.rb +23 -18
- data/lib/lrama/output.rb +2 -2
- data/lib/lrama/parser.rb +641 -458
- data/lib/lrama/states_reporter.rb +1 -1
- data/lib/lrama/version.rb +1 -1
- data/parser.y +97 -32
- data/sig/lrama/grammar/binding.rbs +16 -0
- data/sig/lrama/grammar/code/printer_code.rbs +1 -1
- data/sig/lrama/grammar/code.rbs +5 -5
- data/sig/lrama/grammar/parameterizing_rule/resolver.rbs +21 -0
- data/sig/lrama/grammar/parameterizing_rule/rhs.rbs +13 -0
- data/sig/lrama/grammar/parameterizing_rule/rule.rbs +14 -0
- data/sig/lrama/grammar/parameterizing_rule.rbs +6 -0
- data/sig/lrama/grammar/parameterizing_rules/builder/base.rbs +2 -2
- data/sig/lrama/grammar/parameterizing_rules/builder.rbs +1 -1
- data/sig/lrama/grammar/percent_code.rbs +3 -3
- data/sig/lrama/grammar/rule_builder.rbs +9 -8
- data/sig/lrama/lexer/grammar_file.rbs +15 -0
- data/sig/lrama/lexer/location.rbs +13 -1
- data/sig/lrama/lexer/token/instantiate_rule.rbs +14 -0
- data/sig/lrama/lexer/token.rbs +1 -0
- metadata +17 -5
- data/lib/lrama/lexer/token/parameterizing.rb +0 -34
- data/sig/lrama/lexer/token/parameterizing.rbs +0 -17
data/lib/lrama/version.rb
CHANGED
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
|
409
|
+
| rhs symbol parameterizing_suffix tag_opt
|
330
410
|
{
|
331
|
-
token = Lrama::Lexer::Token::
|
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::
|
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
|
-
@
|
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(@
|
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
|
-
|
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
|
-
|
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
|
-
|
462
|
-
|
463
|
-
|
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
|
-
|
471
|
-
first_column = error_value.first_column
|
472
|
-
last_column = error_value.last_column
|
543
|
+
location = error_value.location
|
473
544
|
else
|
474
|
-
|
475
|
-
first_column = @lexer.head_column
|
476
|
-
last_column = @lexer.column
|
545
|
+
location = @lexer.location
|
477
546
|
end
|
478
547
|
|
479
|
-
|
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
|
504
|
-
|
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
|
data/sig/lrama/grammar/code.rbs
CHANGED
@@ -3,16 +3,16 @@ module Lrama
|
|
3
3
|
class Code
|
4
4
|
extend Forwardable
|
5
5
|
|
6
|
-
attr_accessor type:
|
7
|
-
attr_accessor token_code:
|
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: ->
|
13
|
-
def references: ->
|
12
|
+
def column: -> Integer
|
13
|
+
def references: -> Array[Lrama::Grammar::Reference]
|
14
14
|
|
15
|
-
def initialize: (
|
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
|
@@ -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::
|
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::
|
12
|
+
@token: Lexer::Token::InstantiateRule
|
13
13
|
@key: Symbol
|
14
14
|
@rule_counter: Counter
|
15
15
|
@lhs_tag: untyped
|
@@ -1,10 +1,10 @@
|
|
1
1
|
module Lrama
|
2
2
|
class Grammar
|
3
3
|
class PercentCode
|
4
|
-
attr_reader
|
5
|
-
attr_reader code:
|
4
|
+
attr_reader name: String
|
5
|
+
attr_reader code: String
|
6
6
|
|
7
|
-
def initialize: (
|
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
|
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
|
data/sig/lrama/lexer/token.rbs
CHANGED
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.
|
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:
|
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/
|
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/
|
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.
|
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
|