lrama 0.6.2 → 0.6.4
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 +2 -3
- data/Gemfile +1 -1
- data/NEWS.md +101 -1
- data/README.md +23 -0
- data/Steepfile +5 -0
- data/lib/lrama/context.rb +4 -4
- data/lib/lrama/grammar/code/destructor_code.rb +40 -0
- data/lib/lrama/grammar/code/initial_action_code.rb +6 -0
- data/lib/lrama/grammar/code/no_reference_code.rb +4 -0
- data/lib/lrama/grammar/code/printer_code.rb +6 -0
- data/lib/lrama/grammar/code/rule_action.rb +11 -1
- data/lib/lrama/grammar/code.rb +1 -0
- data/lib/lrama/grammar/destructor.rb +9 -0
- data/lib/lrama/grammar/reference.rb +4 -3
- data/lib/lrama/grammar/rule_builder.rb +10 -3
- data/lib/lrama/grammar/stdlib.y +42 -0
- data/lib/lrama/grammar/symbol.rb +4 -2
- data/lib/lrama/grammar/symbols/resolver.rb +293 -0
- data/lib/lrama/grammar/symbols.rb +1 -0
- data/lib/lrama/grammar.rb +32 -244
- data/lib/lrama/lexer/token/user_code.rb +13 -2
- data/lib/lrama/lexer/token.rb +1 -1
- data/lib/lrama/lexer.rb +7 -0
- data/lib/lrama/option_parser.rb +25 -12
- data/lib/lrama/options.rb +1 -0
- data/lib/lrama/output.rb +75 -2
- data/lib/lrama/parser.rb +537 -464
- data/lib/lrama/state.rb +4 -4
- data/lib/lrama/states/item.rb +6 -8
- data/lib/lrama/states_reporter.rb +2 -2
- data/lib/lrama/version.rb +1 -1
- data/lrama.gemspec +7 -0
- data/parser.y +27 -0
- data/sig/lrama/grammar/binding.rbs +0 -1
- data/sig/lrama/grammar/code/destructor_code.rbs +15 -0
- data/sig/lrama/grammar/destructor.rbs +11 -0
- data/sig/lrama/grammar/parameterizing_rule/resolver.rbs +0 -1
- data/sig/lrama/grammar/reference.rbs +2 -2
- data/sig/lrama/grammar/symbol.rbs +5 -4
- data/sig/lrama/grammar/symbols/resolver.rbs +41 -0
- data/sig/lrama/grammar/type.rbs +11 -0
- data/sig/lrama/options.rbs +17 -0
- data/template/bison/yacc.c +12 -1
- metadata +17 -3
data/lib/lrama/state.rb
CHANGED
@@ -29,8 +29,8 @@ module Lrama
|
|
29
29
|
end
|
30
30
|
|
31
31
|
def non_default_reduces
|
32
|
-
reduces.
|
33
|
-
reduce.rule
|
32
|
+
reduces.reject do |reduce|
|
33
|
+
reduce.rule == @default_reduction_rule
|
34
34
|
end
|
35
35
|
end
|
36
36
|
|
@@ -105,8 +105,8 @@ module Lrama
|
|
105
105
|
end
|
106
106
|
|
107
107
|
def selected_term_transitions
|
108
|
-
term_transitions.
|
109
|
-
|
108
|
+
term_transitions.reject do |shift, next_state|
|
109
|
+
shift.not_selected
|
110
110
|
end
|
111
111
|
end
|
112
112
|
|
data/lib/lrama/states/item.rb
CHANGED
@@ -1,8 +1,14 @@
|
|
1
1
|
# TODO: Validate position is not over rule rhs
|
2
2
|
|
3
|
+
require "forwardable"
|
4
|
+
|
3
5
|
module Lrama
|
4
6
|
class States
|
5
7
|
class Item < Struct.new(:rule, :position, keyword_init: true)
|
8
|
+
extend Forwardable
|
9
|
+
|
10
|
+
def_delegators "rule", :lhs, :rhs
|
11
|
+
|
6
12
|
# Optimization for States#setup_state
|
7
13
|
def hash
|
8
14
|
[rule_id, position].hash
|
@@ -20,14 +26,6 @@ module Lrama
|
|
20
26
|
rhs.count - position
|
21
27
|
end
|
22
28
|
|
23
|
-
def lhs
|
24
|
-
rule.lhs
|
25
|
-
end
|
26
|
-
|
27
|
-
def rhs
|
28
|
-
rule.rhs
|
29
|
-
end
|
30
|
-
|
31
29
|
def next_sym
|
32
30
|
rhs[position]
|
33
31
|
end
|
@@ -109,8 +109,8 @@ module Lrama
|
|
109
109
|
io << "\n"
|
110
110
|
|
111
111
|
# Report shifts
|
112
|
-
tmp = state.term_transitions.
|
113
|
-
|
112
|
+
tmp = state.term_transitions.reject do |shift, _|
|
113
|
+
shift.not_selected
|
114
114
|
end.map do |shift, next_state|
|
115
115
|
[shift.next_sym, next_state.id]
|
116
116
|
end
|
data/lib/lrama/version.rb
CHANGED
data/lrama.gemspec
CHANGED
@@ -16,6 +16,13 @@ Gem::Specification.new do |spec|
|
|
16
16
|
spec.files = Dir.chdir(File.expand_path(__dir__)) do
|
17
17
|
`git ls-files -z`.split("\x0").reject { |f| f.match(%r{\A(?:test|spec|features)/}) }
|
18
18
|
end
|
19
|
+
|
20
|
+
spec.metadata["homepage_uri"] = spec.homepage
|
21
|
+
spec.metadata["source_code_uri"] = spec.homepage
|
22
|
+
spec.metadata["documentation_uri"] = spec.homepage
|
23
|
+
spec.metadata["changelog_uri"] = "#{spec.homepage}/releases"
|
24
|
+
spec.metadata["bug_tracker_uri"] = "#{spec.homepage}/issues"
|
25
|
+
|
19
26
|
spec.bindir = "exe"
|
20
27
|
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
21
28
|
spec.require_paths = ["lib"]
|
data/parser.y
CHANGED
@@ -97,6 +97,13 @@ rule
|
|
97
97
|
end_c_declaration
|
98
98
|
}
|
99
99
|
"}" generic_symlist
|
100
|
+
{
|
101
|
+
@grammar.add_destructor(
|
102
|
+
ident_or_tags: val[6],
|
103
|
+
token_code: val[3],
|
104
|
+
lineno: val[3].line
|
105
|
+
)
|
106
|
+
}
|
100
107
|
| "%printer" "{"
|
101
108
|
{
|
102
109
|
begin_c_declaration("}")
|
@@ -129,6 +136,26 @@ rule
|
|
129
136
|
lineno: val[3].line
|
130
137
|
)
|
131
138
|
}
|
139
|
+
| "%after-shift" IDENTIFIER
|
140
|
+
{
|
141
|
+
@grammar.after_shift = val[1]
|
142
|
+
}
|
143
|
+
| "%before-reduce" IDENTIFIER
|
144
|
+
{
|
145
|
+
@grammar.before_reduce = val[1]
|
146
|
+
}
|
147
|
+
| "%after-reduce" IDENTIFIER
|
148
|
+
{
|
149
|
+
@grammar.after_reduce = val[1]
|
150
|
+
}
|
151
|
+
| "%after-shift-error-token" IDENTIFIER
|
152
|
+
{
|
153
|
+
@grammar.after_shift_error_token = val[1]
|
154
|
+
}
|
155
|
+
| "%after-pop-stack" IDENTIFIER
|
156
|
+
{
|
157
|
+
@grammar.after_pop_stack = val[1]
|
158
|
+
}
|
132
159
|
|
133
160
|
symbol_declaration: "%token" token_declarations
|
134
161
|
| "%type" symbol_declarations
|
@@ -0,0 +1,15 @@
|
|
1
|
+
module Lrama
|
2
|
+
class Grammar
|
3
|
+
class Code
|
4
|
+
class DestructorCode < Code
|
5
|
+
@tag: untyped
|
6
|
+
def initialize: (type: untyped, token_code: untyped, tag: untyped) -> void
|
7
|
+
|
8
|
+
private
|
9
|
+
|
10
|
+
# ref: Lrama::Grammar::Code.token_code.references
|
11
|
+
def reference_to_c: (untyped ref) -> untyped
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,11 @@
|
|
1
|
+
module Lrama
|
2
|
+
class Grammar
|
3
|
+
class Destructor
|
4
|
+
attr_accessor ident_or_tags: Array[Lexer::Token::Ident|Lexer::Token::Tag]
|
5
|
+
attr_accessor token_code: Grammar::Code
|
6
|
+
attr_accessor lineno: Integer
|
7
|
+
|
8
|
+
def translated_code: (Lexer::Token member) -> String
|
9
|
+
end
|
10
|
+
end
|
11
|
+
end
|
@@ -8,7 +8,6 @@ module Lrama
|
|
8
8
|
|
9
9
|
def initialize: () -> void
|
10
10
|
def add_parameterizing_rule: (Grammar::ParameterizingRule::Rule rule) -> void
|
11
|
-
def defined?: (Lexer::Token::InstantiateRule token) -> bool
|
12
11
|
def find: (Lexer::Token::InstantiateRule token) -> Grammar::ParameterizingRule::Rule?
|
13
12
|
def created_lhs: (String lhs_s_value) -> Lexer::Token?
|
14
13
|
|
@@ -3,6 +3,7 @@ module Lrama
|
|
3
3
|
class Reference
|
4
4
|
attr_accessor type: ::Symbol
|
5
5
|
attr_accessor name: String
|
6
|
+
attr_accessor number: Integer
|
6
7
|
attr_accessor index: Integer
|
7
8
|
attr_accessor ex_tag: Lexer::Token?
|
8
9
|
attr_accessor first_column: Integer
|
@@ -10,13 +11,12 @@ module Lrama
|
|
10
11
|
attr_accessor position_in_rhs: Integer?
|
11
12
|
|
12
13
|
def initialize: (
|
13
|
-
type: ::Symbol, ?name: String, ?index: Integer, ?ex_tag: Lexer::Token?,
|
14
|
+
type: ::Symbol, ?name: String, ?number: Integer, ?index: Integer, ?ex_tag: Lexer::Token?,
|
14
15
|
first_column: Integer, last_column: Integer,
|
15
16
|
?position_in_rhs: Integer?
|
16
17
|
) -> void
|
17
18
|
|
18
19
|
def value: () -> (String|Integer)
|
19
|
-
def tag: () -> untyped
|
20
20
|
end
|
21
21
|
end
|
22
22
|
end
|
@@ -2,7 +2,7 @@ module Lrama
|
|
2
2
|
class Grammar
|
3
3
|
class Symbol
|
4
4
|
attr_accessor id: Lexer::Token
|
5
|
-
attr_accessor alias_name: String
|
5
|
+
attr_accessor alias_name: String?
|
6
6
|
attr_accessor number: Integer
|
7
7
|
attr_accessor tag: Lexer::Token?
|
8
8
|
attr_accessor term: bool
|
@@ -10,6 +10,7 @@ module Lrama
|
|
10
10
|
attr_accessor nullable: bool
|
11
11
|
attr_accessor precedence: Precedence?
|
12
12
|
attr_accessor printer: Printer?
|
13
|
+
attr_accessor destructor: Destructor?
|
13
14
|
attr_accessor error_token: ErrorToken
|
14
15
|
|
15
16
|
attr_accessor first_set: Set[Array[Symbol]]
|
@@ -20,8 +21,8 @@ module Lrama
|
|
20
21
|
attr_writer accept_symbol: Symbol
|
21
22
|
|
22
23
|
def initialize: (
|
23
|
-
id: Lexer::Token, alias_name: String?, number: Integer?, tag: Lexer::Token?,
|
24
|
-
|
24
|
+
id: Lexer::Token, term: bool, ?alias_name: String?, ?number: Integer?, ?tag: Lexer::Token?,
|
25
|
+
?token_id: Integer?, ?nullable: bool?, ?precedence: Precedence?, ?printer: Printer?) -> void
|
25
26
|
|
26
27
|
def term?: () -> bool
|
27
28
|
def nterm?: () -> bool
|
@@ -31,7 +32,7 @@ module Lrama
|
|
31
32
|
def accept_symbol?: () -> bool
|
32
33
|
def display_name: () -> String
|
33
34
|
def enum_name: () -> String
|
34
|
-
def comment: () -> String
|
35
|
+
def comment: () -> String?
|
35
36
|
end
|
36
37
|
end
|
37
38
|
end
|
@@ -0,0 +1,41 @@
|
|
1
|
+
module Lrama
|
2
|
+
class Grammar
|
3
|
+
class Symbols
|
4
|
+
class Resolver
|
5
|
+
attr_reader terms: Array[Grammar::Symbol]
|
6
|
+
attr_reader nterms: Array[Grammar::Symbol]
|
7
|
+
|
8
|
+
@symbols: Array[Grammar::Symbol]?
|
9
|
+
@number: Integer
|
10
|
+
@used_numbers: Hash[Integer, bool]
|
11
|
+
|
12
|
+
def initialize: () -> void
|
13
|
+
def symbols: () -> Array[Grammar::Symbol]
|
14
|
+
def sort_by_number!: () -> void
|
15
|
+
def add_term: (id: Lexer::Token, ?alias_name: String?, ?tag: Lexer::Token?, ?token_id: Integer?, ?replace: bool) -> Grammar::Symbol
|
16
|
+
def add_nterm: (id: Lexer::Token, ?alias_name: String?, ?tag: Lexer::Token?) -> Grammar::Symbol?
|
17
|
+
def find_symbol_by_s_value: (Grammar::Symbol s_value) -> Grammar::Symbol?
|
18
|
+
def find_symbol_by_s_value!: (Grammar::Symbol s_value) -> Grammar::Symbol
|
19
|
+
def find_symbol_by_id: (Lexer::Token id) -> Grammar::Symbol?
|
20
|
+
def find_symbol_by_id!: (Lexer::Token id) -> Grammar::Symbol
|
21
|
+
def find_symbol_by_token_id: (Integer token_id) -> Grammar::Symbol?
|
22
|
+
def find_symbol_by_number!: (Integer number) -> Grammar::Symbol
|
23
|
+
def fill_symbol_number: () -> void
|
24
|
+
def fill_nterm_type: (Array[Grammar::Type] types) -> void
|
25
|
+
def fill_printer: (Array[Grammar::Printer] printers) -> void
|
26
|
+
def fill_error_token: (Array[Grammar::ErrorToken] error_tokens) -> void
|
27
|
+
def token_to_symbol: (Lexer::Token token) -> Grammar::Symbol
|
28
|
+
def validate!: () -> void
|
29
|
+
|
30
|
+
private
|
31
|
+
|
32
|
+
def find_nterm_by_id!: (Lexer::Token id) -> Grammar::Symbol
|
33
|
+
def fill_terms_number: () -> void
|
34
|
+
def fill_nterms_number: () -> void
|
35
|
+
def used_numbers: () -> Hash[Integer, bool]
|
36
|
+
def validate_number_uniqueness!: () -> void
|
37
|
+
def validate_alias_name_uniqueness!: () -> void
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
module Lrama
|
2
|
+
class Options
|
3
|
+
attr_accessor skeleton: String
|
4
|
+
attr_accessor header: bool
|
5
|
+
attr_accessor header_file: String?
|
6
|
+
attr_accessor report_file: String?
|
7
|
+
attr_accessor outfile: String
|
8
|
+
attr_accessor error_recovery: bool
|
9
|
+
attr_accessor grammar_file: String?
|
10
|
+
attr_accessor trace_opts: Hash[Symbol, bool]?
|
11
|
+
attr_accessor report_opts: Hash[Symbol, bool]?
|
12
|
+
attr_accessor y: IO
|
13
|
+
attr_accessor debug: bool
|
14
|
+
|
15
|
+
def initialize: () -> void
|
16
|
+
end
|
17
|
+
end
|
data/template/bison/yacc.c
CHANGED
@@ -1145,7 +1145,12 @@ yydestruct (const char *yymsg,
|
|
1145
1145
|
YY_SYMBOL_PRINT (yymsg, yykind, yyvaluep, yylocationp<%= output.user_args %>);
|
1146
1146
|
|
1147
1147
|
YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
|
1148
|
-
|
1148
|
+
switch (yykind)
|
1149
|
+
{
|
1150
|
+
<%= output.symbol_actions_for_destructor -%>
|
1151
|
+
default:
|
1152
|
+
break;
|
1153
|
+
}
|
1149
1154
|
YY_IGNORE_MAYBE_UNINITIALIZED_END
|
1150
1155
|
}
|
1151
1156
|
|
@@ -1752,6 +1757,7 @@ yybackup:
|
|
1752
1757
|
*++yyvsp = yylval;
|
1753
1758
|
YY_IGNORE_MAYBE_UNINITIALIZED_END
|
1754
1759
|
*++yylsp = yylloc;
|
1760
|
+
<%= output.after_shift_function("/* %after-shift code. */") %>
|
1755
1761
|
|
1756
1762
|
/* Discard the shifted token. */
|
1757
1763
|
yychar = YYEMPTY;
|
@@ -1784,6 +1790,7 @@ yyreduce:
|
|
1784
1790
|
unconditionally makes the parser a bit smaller, and it avoids a
|
1785
1791
|
GCC warning that YYVAL may be used uninitialized. */
|
1786
1792
|
yyval = yyvsp[1-yylen];
|
1793
|
+
<%= output.before_reduce_function("/* %before-reduce function. */") %>
|
1787
1794
|
|
1788
1795
|
/* Default location. */
|
1789
1796
|
YYLLOC_DEFAULT (yyloc, (yylsp - yylen), yylen);
|
@@ -1809,6 +1816,7 @@ yyreduce:
|
|
1809
1816
|
YY_SYMBOL_PRINT ("-> $$ =", YY_CAST (yysymbol_kind_t, yyr1[yyn]), &yyval, &yyloc<%= output.user_args %>);
|
1810
1817
|
|
1811
1818
|
YYPOPSTACK (yylen);
|
1819
|
+
<%= output.after_reduce_function("/* %after-reduce function. */") %>
|
1812
1820
|
yylen = 0;
|
1813
1821
|
|
1814
1822
|
*++yyvsp = yyval;
|
@@ -1910,6 +1918,7 @@ yyerrorlab:
|
|
1910
1918
|
/* Do not reclaim the symbols of the rule whose action triggered
|
1911
1919
|
this YYERROR. */
|
1912
1920
|
YYPOPSTACK (yylen);
|
1921
|
+
<%= output.after_pop_stack_function("yylen", "/* %after-pop-stack function. */") %>
|
1913
1922
|
yylen = 0;
|
1914
1923
|
YY_STACK_PRINT (yyss, yyssp<%= output.user_args %>);
|
1915
1924
|
yystate = *yyssp;
|
@@ -1969,6 +1978,7 @@ yyerrlab1:
|
|
1969
1978
|
yydestruct ("Error: popping",
|
1970
1979
|
YY_ACCESSING_SYMBOL (yystate), yyvsp, yylsp<%= output.user_args %>);
|
1971
1980
|
YYPOPSTACK (1);
|
1981
|
+
<%= output.after_pop_stack_function(1, "/* %after-pop-stack function. */") %>
|
1972
1982
|
yystate = *yyssp;
|
1973
1983
|
YY_STACK_PRINT (yyss, yyssp<%= output.user_args %>);
|
1974
1984
|
}
|
@@ -1983,6 +1993,7 @@ yyerrlab1:
|
|
1983
1993
|
|
1984
1994
|
/* Shift the error token. */
|
1985
1995
|
YY_SYMBOL_PRINT ("Shifting", YY_ACCESSING_SYMBOL (yyn), yyvsp, yylsp<%= output.user_args %>);
|
1996
|
+
<%= output.after_shift_error_token_function("/* %after-shift-error-token code. */") %>
|
1986
1997
|
|
1987
1998
|
yystate = yyn;
|
1988
1999
|
goto yynewstate;
|
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.6.
|
4
|
+
version: 0.6.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Yuichiro Kaneko
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2024-
|
11
|
+
date: 2024-03-22 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
13
|
description: LALR (1) parser generator written by Ruby
|
14
14
|
email:
|
@@ -50,11 +50,13 @@ files:
|
|
50
50
|
- lib/lrama/grammar/auxiliary.rb
|
51
51
|
- lib/lrama/grammar/binding.rb
|
52
52
|
- lib/lrama/grammar/code.rb
|
53
|
+
- lib/lrama/grammar/code/destructor_code.rb
|
53
54
|
- lib/lrama/grammar/code/initial_action_code.rb
|
54
55
|
- lib/lrama/grammar/code/no_reference_code.rb
|
55
56
|
- lib/lrama/grammar/code/printer_code.rb
|
56
57
|
- lib/lrama/grammar/code/rule_action.rb
|
57
58
|
- lib/lrama/grammar/counter.rb
|
59
|
+
- lib/lrama/grammar/destructor.rb
|
58
60
|
- lib/lrama/grammar/error_token.rb
|
59
61
|
- lib/lrama/grammar/parameterizing_rule.rb
|
60
62
|
- lib/lrama/grammar/parameterizing_rule/resolver.rb
|
@@ -68,6 +70,8 @@ files:
|
|
68
70
|
- lib/lrama/grammar/rule_builder.rb
|
69
71
|
- lib/lrama/grammar/stdlib.y
|
70
72
|
- lib/lrama/grammar/symbol.rb
|
73
|
+
- lib/lrama/grammar/symbols.rb
|
74
|
+
- lib/lrama/grammar/symbols/resolver.rb
|
71
75
|
- lib/lrama/grammar/type.rb
|
72
76
|
- lib/lrama/grammar/union.rb
|
73
77
|
- lib/lrama/lexer.rb
|
@@ -109,8 +113,10 @@ files:
|
|
109
113
|
- sig/lrama/grammar.rbs
|
110
114
|
- sig/lrama/grammar/binding.rbs
|
111
115
|
- sig/lrama/grammar/code.rbs
|
116
|
+
- sig/lrama/grammar/code/destructor_code.rbs
|
112
117
|
- sig/lrama/grammar/code/printer_code.rbs
|
113
118
|
- sig/lrama/grammar/counter.rbs
|
119
|
+
- sig/lrama/grammar/destructor.rbs
|
114
120
|
- sig/lrama/grammar/error_token.rbs
|
115
121
|
- sig/lrama/grammar/parameterizing_rule.rbs
|
116
122
|
- sig/lrama/grammar/parameterizing_rule/resolver.rbs
|
@@ -123,6 +129,8 @@ files:
|
|
123
129
|
- sig/lrama/grammar/rule.rbs
|
124
130
|
- sig/lrama/grammar/rule_builder.rbs
|
125
131
|
- sig/lrama/grammar/symbol.rbs
|
132
|
+
- sig/lrama/grammar/symbols/resolver.rbs
|
133
|
+
- sig/lrama/grammar/type.rbs
|
126
134
|
- sig/lrama/lexer/grammar_file.rbs
|
127
135
|
- sig/lrama/lexer/location.rbs
|
128
136
|
- sig/lrama/lexer/token.rbs
|
@@ -131,6 +139,7 @@ files:
|
|
131
139
|
- sig/lrama/lexer/token/instantiate_rule.rbs
|
132
140
|
- sig/lrama/lexer/token/tag.rbs
|
133
141
|
- sig/lrama/lexer/token/user_code.rbs
|
142
|
+
- sig/lrama/options.rbs
|
134
143
|
- sig/lrama/report/duration.rbs
|
135
144
|
- sig/lrama/report/profile.rbs
|
136
145
|
- sig/lrama/warning.rbs
|
@@ -141,7 +150,12 @@ files:
|
|
141
150
|
homepage: https://github.com/ruby/lrama
|
142
151
|
licenses:
|
143
152
|
- GPL-3.0-or-later
|
144
|
-
metadata:
|
153
|
+
metadata:
|
154
|
+
homepage_uri: https://github.com/ruby/lrama
|
155
|
+
source_code_uri: https://github.com/ruby/lrama
|
156
|
+
documentation_uri: https://github.com/ruby/lrama
|
157
|
+
changelog_uri: https://github.com/ruby/lrama/releases
|
158
|
+
bug_tracker_uri: https://github.com/ruby/lrama/issues
|
145
159
|
post_install_message:
|
146
160
|
rdoc_options: []
|
147
161
|
require_paths:
|