depager 0.2.3 → 0.3.0.b20250423

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 (106) hide show
  1. checksums.yaml +7 -0
  2. data/.rubocop.yml +44 -0
  3. data/.simplecov +5 -0
  4. data/Gemfile +12 -0
  5. data/LICENSE.gpl +339 -0
  6. data/Manifest.txt +73 -0
  7. data/README.en +7 -21
  8. data/README.ja +19 -99
  9. data/Rakefile +31 -0
  10. data/bin/depager +7 -45
  11. data/examples/action_pl0d/pl0d.action.dr +421 -0
  12. data/examples/action_pl0d/test.pl0ds +48 -0
  13. data/examples/c89/c89.dr +493 -496
  14. data/examples/c89/test.c89 +10 -10
  15. data/examples/extension/astdf.rb +9 -0
  16. data/examples/extension/atree.dr +55 -0
  17. data/examples/{sample_calc → extension}/calc.atree.dr +42 -43
  18. data/examples/{sample_calc/calc.action.dr → extension/calc.simple_action.dr} +33 -33
  19. data/examples/extension/paction.dr +16 -15
  20. data/examples/extension/pactiontest.dr +14 -14
  21. data/examples/extension/simple_action.rb +46 -0
  22. data/examples/pl0d/pl0ds.dr +337 -334
  23. data/examples/pl0d/test.pl0ds +33 -33
  24. data/examples/rie_calc/calc.rie.dr +57 -0
  25. data/examples/rie_calc/test.calc +4 -0
  26. data/examples/rie_dcuse/dcuse.rie.dr +71 -0
  27. data/examples/rie_dcuse/test.dcuse +1 -0
  28. data/examples/rie_pl0/orig_ex/exerrdg.pl0 +44 -0
  29. data/examples/rie_pl0/orig_ex/exerrm.pl0 +19 -0
  30. data/examples/rie_pl0/orig_ex/exerrmre.pl0 +20 -0
  31. data/examples/rie_pl0/orig_ex/exerrtok.pl0 +18 -0
  32. data/examples/rie_pl0/orig_ex/exmdg.pl0 +40 -0
  33. data/examples/rie_pl0/orig_ex/exmdgwwl.pl0 +43 -0
  34. data/examples/rie_pl0/orig_ex/exmrw.pl0 +22 -0
  35. data/examples/rie_pl0/orig_ex/exmwwl.pl0 +18 -0
  36. data/examples/rie_pl0/orig_ex/exnorw.pl0 +17 -0
  37. data/examples/rie_pl0/pl0.rie.dr +450 -0
  38. data/examples/rie_pl0/test.pl0 +10 -0
  39. data/examples/slex_test/divreg.slex.dr +29 -29
  40. data/examples/slex_test/ljoin.slex.dr +36 -36
  41. data/examples/slex_test/test.divreg +1 -1
  42. data/examples/slex_test/test.ljoin +3 -3
  43. data/examples/{sample_calc/calc.nvaction.dr → tiny_calc/calc.action.dr} +33 -33
  44. data/examples/{sample_calc → tiny_calc}/calc.ast.action.dr +76 -66
  45. data/examples/{sample_calc → tiny_calc}/calc.ast.dr +67 -55
  46. data/examples/tiny_calc/calc.cst.dr +50 -0
  47. data/examples/{sample_calc → tiny_calc}/calc.dr +43 -43
  48. data/examples/{sample_calc → tiny_calc}/calc.lex.dr +29 -29
  49. data/examples/{sample_calc/calc_prec.nvaction.dr → tiny_calc/calc_prec.action.dr} +31 -31
  50. data/lib/depager/cli.rb +44 -0
  51. data/lib/depager/grammar.rb +253 -291
  52. data/lib/depager/lr.rb +589 -579
  53. data/lib/depager/parser.rb +269 -277
  54. data/lib/depager/plugins/_rie_debug.rb +63 -0
  55. data/lib/depager/plugins/action.rb +47 -0
  56. data/lib/depager/plugins/ast.dr +367 -0
  57. data/lib/depager/plugins/ast.rb +1329 -0
  58. data/lib/depager/{ruby/plugins → plugins}/cst.dr +174 -180
  59. data/lib/depager/plugins/cst.rb +591 -0
  60. data/lib/depager/{ruby/plugins → plugins}/lex.dr +85 -89
  61. data/lib/depager/plugins/lex.rb +313 -0
  62. data/lib/depager/plugins/rie.dr +725 -0
  63. data/lib/depager/plugins/rie.rb +1614 -0
  64. data/lib/depager/{ruby/plugins → plugins}/slex.dr +201 -200
  65. data/lib/depager/plugins/slex.rb +769 -0
  66. data/lib/depager/plugins/srp.rb +46 -0
  67. data/lib/depager/ruby/templates/extension_lalr_master.erb +40 -51
  68. data/lib/depager/ruby/templates/extension_lalr_slave.erb +113 -107
  69. data/lib/depager/ruby/templates/single_lalr_parser.erb +124 -117
  70. data/lib/depager/utils.rb +158 -318
  71. data/lib/depager/version.rb +3 -3
  72. data/lib/depager.rb +572 -670
  73. metadata +77 -80
  74. data/ChangeLog +0 -16
  75. data/data/depager/pre-setup.rb +0 -3
  76. data/examples/c89/c89.tab.rb +0 -7127
  77. data/examples/pl0d/pl0ds.tab.rb +0 -2698
  78. data/examples/sample_calc/calc.action.tab.rb +0 -457
  79. data/examples/sample_calc/calc.ast.action.tab.rb +0 -749
  80. data/examples/sample_calc/calc.ast.tab.rb +0 -665
  81. data/examples/sample_calc/calc.astdf.dr +0 -54
  82. data/examples/sample_calc/calc.astdf.tab.rb +0 -672
  83. data/examples/sample_calc/calc.atree.tab.rb +0 -451
  84. data/examples/sample_calc/calc.cst.dr +0 -45
  85. data/examples/sample_calc/calc.cst.tab.rb +0 -644
  86. data/examples/sample_calc/calc.lex.tab.rb +0 -374
  87. data/examples/sample_calc/calc.nvaction.tab.rb +0 -465
  88. data/examples/sample_calc/calc.tab.rb +0 -365
  89. data/examples/sample_calc/calc_prec.nvaction.tab.rb +0 -431
  90. data/examples/slex_test/divreg.slex.tab.rb +0 -303
  91. data/examples/slex_test/ljoin.slex.tab.rb +0 -370
  92. data/lib/depager/ruby/plugins/_ast_tmpl.rb +0 -73
  93. data/lib/depager/ruby/plugins/action.rb +0 -43
  94. data/lib/depager/ruby/plugins/ast.dr +0 -269
  95. data/lib/depager/ruby/plugins/ast.rb +0 -1308
  96. data/lib/depager/ruby/plugins/astdf.rb +0 -6
  97. data/lib/depager/ruby/plugins/atree.dr +0 -55
  98. data/lib/depager/ruby/plugins/atree.rb +0 -347
  99. data/lib/depager/ruby/plugins/cst.rb +0 -626
  100. data/lib/depager/ruby/plugins/lex.rb +0 -336
  101. data/lib/depager/ruby/plugins/nvaction.rb +0 -19
  102. data/lib/depager/ruby/plugins/slex.rb +0 -817
  103. data/lib/depager/ruby/plugins/srp.rb +0 -51
  104. data/lib/depager/ruby/templates/simple.erb +0 -23
  105. data/setup.rb +0 -1585
  106. /data/examples/{sample_calc → tiny_calc}/test.calc +0 -0
@@ -1,66 +1,76 @@
1
- %class TinyCalc
2
- %extend Lexer ('plugins/lex.rb')
3
- %extend ASTBuilder ('plugins/ast.rb')
4
- %extend Action ('plugins/action.rb')
5
- %decorate @ASTBuilder
6
- %decorate @Action
7
- #%decorate ShiftReducePrinter ('plugins/srp.rb')
8
- %mixin Depager
9
- %%
10
-
11
- %LEX{
12
- /\s+/, /\#.*/, /\n/ { }
13
- /[1-9][0-9]*/ { yield token(:NUM, $&.to_i) }
14
- /./ { yield token($&, $&) }
15
- %}
16
-
17
- %AST{
18
- Node [value] { @value = nil }
19
- Visitor { }
20
- add(left, right) { $.value = visit($.left).value + visit($.right).value }
21
- sub(left, right) { $.value = visit($.left).value - visit($.right).value }
22
- mul(left, right) { $.value = visit($.left).value * visit($.right).value }
23
- div(left, right) { $.value = visit($.left).value / visit($.right).value }
24
- literal(-n) { $.value = $.n.value }
25
- %}
26
-
27
- #begin-rule
28
- expr :
29
- expr '+' term
30
- => add(expr, term)
31
- { val[0] + val[2] }
32
- | expr '-' term
33
- => sub(expr, term)
34
- { val[0] - val[2] }
35
- | term
36
- => term
37
- { val[0] }
38
- ;
39
- term :
40
- term '*' fact
41
- => mul(term, fact)
42
- { val[0] * val[2] }
43
- | term '/' fact
44
- => div(term, fact)
45
- { val[0] / val[2] }
46
- | fact
47
- => fact
48
- { val[0] }
49
- ;
50
- fact :
51
- NUM
52
- => literal(NUM)
53
- { val[0].value }
54
- | '(' expr ')'
55
- => expr
56
- { val[1].value }
57
- ;
58
- #end-rule
59
- %%
60
- require 'pp'
61
- parser = createDecoratedTinyCalc()
62
- t, r = parser.parse(STDIN)
63
- v = Visitor.new
64
- pp r
65
- pp t.accept(v).value
66
- pp t
1
+ %class TinyCalc::Parser
2
+ %extend Depager::Lexer ('depager/plugins/lex.rb')
3
+ %extend Depager::ASTBuilder ('depager/plugins/ast.rb')
4
+ %extend Depager::Action ('depager/plugins/action.rb')
5
+ %decorate @ASTBuilder
6
+ %decorate @Action
7
+ #%decorate Depager::LALR::ShiftReducePrinter ('depager/plugins/srp.rb')
8
+ %%
9
+
10
+ %LEX{
11
+ /\s+/, /\#.*/, /\n/ { }
12
+ /[1-9][0-9]*/ { yield token(:NUM, $&.to_i) }
13
+ /./ { yield token($&, $&) }
14
+ %}
15
+
16
+ %AST{
17
+ Node [value] { @value = nil }
18
+ Visitor { }
19
+ add(left, right) { $.value = visit($.left).value + visit($.right).value }
20
+ sub(left, right) { $.value = visit($.left).value - visit($.right).value }
21
+ mul(left, right) { $.value = visit($.left).value * visit($.right).value }
22
+ div(left, right) { $.value = visit($.left).value / visit($.right).value }
23
+ literal(-n) { $.value = $.n.value }
24
+ %}
25
+
26
+ #begin-rule
27
+ expr :
28
+ expr '+' term
29
+ => add(expr, term)
30
+ { val[0] + val[2] }
31
+ | expr '-' term
32
+ => sub(expr, term)
33
+ { val[0] - val[2] }
34
+ | term
35
+ => term
36
+ { val[0] }
37
+ ;
38
+ term :
39
+ term '*' fact
40
+ => mul(term, fact)
41
+ { val[0] * val[2] }
42
+ | term '/' fact
43
+ => div(term, fact)
44
+ { val[0] / val[2] }
45
+ | fact
46
+ => fact
47
+ { val[0] }
48
+ ;
49
+ fact :
50
+ NUM
51
+ => literal(NUM)
52
+ { val[0].value }
53
+ | '(' expr ')'
54
+ => expr
55
+ { val[1].value }
56
+ ;
57
+ #end-rule
58
+ %%
59
+
60
+ module TinyCalc
61
+ class Node
62
+ def to_s
63
+ "#{self.class.name}:\n" + attributes.flat_map do |k, v|
64
+ lines = v.to_s.lines.map(&:rstrip)
65
+ " #{k} = #{lines.shift}\n" + lines.map { |j| " #{j}\n" }.join
66
+ end.join
67
+ end
68
+ end
69
+ end
70
+
71
+ parser = TinyCalc.create_decorated_parser()
72
+ r, a = parser.parse(ARGF)
73
+ v = TinyCalc::Visitor.new
74
+ puts r
75
+ puts r.accept(v).value
76
+ puts a
@@ -1,55 +1,67 @@
1
- %class TinyCalc
2
- %extend Lexer ('plugins/lex.rb')
3
- %extend ASTBuilder ('plugins/ast.rb')
4
- %decorate @ASTBuilder
5
- #%decorate ShiftReducePrinter ('plugins/srp.rb')
6
- %%
7
-
8
- %LEX{
9
- /\s+/, /\#.*/ { }
10
- /[1-9][0-9]*/ { yield token(:NUM, $&.to_i) }
11
- /./ { yield token($&, $&) }
12
- %}
13
-
14
- %AST{
15
- Node [value] { @value = nil }
16
- Visitor { }
17
- add(left, right) { $.value = visit($.left).value + visit($.right).value }
18
- sub(left, right) { $.value = visit($.left).value - visit($.right).value }
19
- mul(left, right) { $.value = visit($.left).value * visit($.right).value }
20
- div(left, right) { $.value = visit($.left).value / visit($.right).value }
21
- literal(-n) { $.value = $.n.value }
22
- %}
23
-
24
- #begin-rule
25
- expr :
26
- expr '+' term
27
- => add(expr, term)
28
- | expr '-' term
29
- => sub(expr, term)
30
- | term
31
- => term
32
- ;
33
- term :
34
- term '*' fact
35
- => mul(term, fact)
36
- | term '/' fact
37
- => div(term, fact)
38
- | fact
39
- => fact
40
- ;
41
- fact :
42
- NUM
43
- => literal(NUM)
44
- | '(' expr ')'
45
- => expr
46
- ;
47
- #end-rule
48
- %%
49
- require 'pp'
50
- parser = createDecoratedTinyCalc()
51
- t, = parser.parse(STDIN)
52
- v = Visitor.new
53
- pp t.accept(v).value
54
- pp t
55
-
1
+ %class TinyCalc::Parser
2
+ %extend Depager::Lexer ('depager/plugins/lex.rb')
3
+ %extend Depager::ASTBuilder ('depager/plugins/ast.rb')
4
+ %decorate @ASTBuilder
5
+ #%decorate Depager::LALR::ShiftReducePrinter ('depager/plugins/srp.rb')
6
+ %%
7
+
8
+ %LEX{
9
+ /\s+/, /\#.*/ { }
10
+ /[1-9][0-9]*/ { yield token(:NUM, $&.to_i) }
11
+ /./ { yield token($&, $&) }
12
+ %}
13
+
14
+ %AST{
15
+ Node [value] { @value = nil }
16
+ Visitor { }
17
+ add(left, right) { $.value = visit($.left).value + visit($.right).value }
18
+ sub(left, right) { $.value = visit($.left).value - visit($.right).value }
19
+ mul(left, right) { $.value = visit($.left).value * visit($.right).value }
20
+ div(left, right) { $.value = visit($.left).value / visit($.right).value }
21
+ literal(-n) { $.value = $.n.value }
22
+ %}
23
+
24
+ #begin-rule
25
+ expr :
26
+ expr '+' term
27
+ => add(expr, term)
28
+ | expr '-' term
29
+ => sub(expr, term)
30
+ | term
31
+ => term
32
+ ;
33
+ term :
34
+ term '*' fact
35
+ => mul(term, fact)
36
+ | term '/' fact
37
+ => div(term, fact)
38
+ | fact
39
+ => fact
40
+ ;
41
+ fact :
42
+ NUM
43
+ => literal(NUM)
44
+ | '(' expr ')'
45
+ => expr
46
+ ;
47
+ #end-rule
48
+ %%
49
+
50
+ module TinyCalc
51
+ class Node
52
+ def to_s
53
+ "#{self.class.name}:\n" + attributes.flat_map do |k, v|
54
+ lines = v.to_s.lines.map(&:rstrip)
55
+ " #{k} = #{lines.shift}\n" + lines.map { |j| " #{j}\n" }.join
56
+ end.join
57
+ end
58
+ end
59
+ end
60
+
61
+ parser = TinyCalc.create_decorated_parser()
62
+ r, = parser.parse(ARGF)
63
+ v = TinyCalc::Visitor.new
64
+ puts r
65
+ puts r.accept(v).value
66
+
67
+
@@ -0,0 +1,50 @@
1
+ %class TinyCalc::Parser
2
+ %extend Depager::Lexer ('depager/plugins/lex.rb')
3
+ %extend Depager::CSTBuilder ('depager/plugins/cst.rb')
4
+ %decorate @CSTBuilder
5
+ %%
6
+
7
+ %LEX{
8
+ /\s+/, /\#.*/ { }
9
+ /[1-9][0-9]*/ { yield token(:NUM, $&.to_i) }
10
+ /./ { yield token($&, $&) }
11
+ %}
12
+
13
+ %CST{
14
+ Node {
15
+ attr_accessor :value
16
+ def initialize
17
+ @value = nil
18
+ end
19
+
20
+ def to_s
21
+ "#{self.class.name}:\n" + children.flat_map do |i|
22
+ i.to_s.lines.map { |j| " #{j.rstrip}\n" }
23
+ end.join
24
+ end
25
+ }
26
+ %}
27
+
28
+ #begin-rule
29
+ expr :
30
+ expr '+' term { $.value = $.expr.value + $.term.value }
31
+ | expr '-' term { $.value = $.expr.value + $.term.value }
32
+ | term { $.value = $.term.value }
33
+ ;
34
+ term :
35
+ term '*' fact { $.value = $.term.value * $.fact.value }
36
+ | term '/' fact { $.value = $.term.value / $.fact.value }
37
+ | fact { $.value = $.fact.value }
38
+ ;
39
+ fact :
40
+ NUM { $.value = $.num.value }
41
+ | '(' expr ')' { $.value = $.expr }
42
+ ;
43
+ #end-rule
44
+ %%
45
+
46
+ parser = TinyCalc.create_decorated_parser
47
+ r, = parser.parse(ARGF)
48
+ v = TinyCalc::Visitor.new
49
+ puts r
50
+ puts r.accept(v)
@@ -1,43 +1,43 @@
1
- %class TinyCalc
2
- %inner{
3
- def lex
4
- until @file.eof?
5
- @line = @file.gets
6
- until @line.empty? do
7
- case @line
8
- when /\A\s+/, /\A\#.*/, /\A\n/
9
- #skip blank and comment
10
- when /\A[0-9]+/
11
- yield :NUM, $&
12
- when /\A./
13
- yield $&, $&
14
- else
15
- raise RuntimeError, "must not happen #{line}"
16
- end
17
- @line = $'
18
- end
19
- end
20
- yield nil, nil
21
- end
22
- %}
23
- %%
24
-
25
- #begin-rule
26
- expr :
27
- expr '+' term
28
- | expr '-' term
29
- | term
30
- ;
31
- term :
32
- term '*' fact
33
- | term '/' fact
34
- | fact
35
- ;
36
- fact :
37
- NUM
38
- | '(' expr ')'
39
- ;
40
- #end-rule
41
- %%
42
- parser = TinyCalc.new()
43
- parser.parse(STDIN)
1
+ %class TinyCalc::Parser
2
+ %inner{
3
+ def lex
4
+ until @file.eof?
5
+ @line = @file.gets
6
+ until @line.empty? do
7
+ case @line
8
+ when /\A\s+/, /\A\#.*/, /\A\n/
9
+ #skip blank and comment
10
+ when /\A[0-9]+/
11
+ yield :NUM, $&
12
+ when /\A./
13
+ yield $&, $&
14
+ else
15
+ raise RuntimeError, "must not happen #{line}"
16
+ end
17
+ @line = $'
18
+ end
19
+ end
20
+ yield nil, nil
21
+ end
22
+ %}
23
+ %%
24
+
25
+ #begin-rule
26
+ expr :
27
+ expr '+' term
28
+ | expr '-' term
29
+ | term
30
+ ;
31
+ term :
32
+ term '*' fact
33
+ | term '/' fact
34
+ | fact
35
+ ;
36
+ fact :
37
+ NUM
38
+ | '(' expr ')'
39
+ ;
40
+ #end-rule
41
+ %%
42
+ parser = TinyCalc.create_decorated_parser()
43
+ parser.parse(ARGF)
@@ -1,29 +1,29 @@
1
- %class TinyCalc
2
- %extend Lexer ('plugins/lex.rb')
3
- %%
4
-
5
- %LEX{
6
- /\s+/, /\#.*/, /\n/ { }
7
- /[1-9][0-9]*/ { yield token(:NUM, $&.to_i) }
8
- /./ { yield token($&, $&) }
9
- %}
10
-
11
- #begin-rule
12
- expr :
13
- expr '+' term
14
- | expr '-' term
15
- | term
16
- ;
17
- term :
18
- term '*' fact
19
- | term '/' fact
20
- | fact
21
- ;
22
- fact :
23
- NUM
24
- | '(' expr ')'
25
- ;
26
- #end-rule
27
- %%
28
- parser = TinyCalc.new()
29
- parser.parse(STDIN)
1
+ %class TinyCalc::Parser
2
+ %extend Depager::Lexer ('depager/plugins/lex.rb')
3
+ %%
4
+
5
+ %LEX{
6
+ /\s+/, /\#.*/, /\n/ { }
7
+ /[1-9][0-9]*/ { yield token(:NUM, $&.to_i) }
8
+ /./ { yield token($&, $&) }
9
+ %}
10
+
11
+ #begin-rule
12
+ expr :
13
+ expr '+' term
14
+ | expr '-' term
15
+ | term
16
+ ;
17
+ term :
18
+ term '*' fact
19
+ | term '/' fact
20
+ | fact
21
+ ;
22
+ fact :
23
+ NUM
24
+ | '(' expr ')'
25
+ ;
26
+ #end-rule
27
+ %%
28
+ parser = TinyCalc.create_decorated_parser()
29
+ parser.parse(ARGF)
@@ -1,31 +1,31 @@
1
- %class TinyCalc
2
- %extend Lexer ('plugins/lex.rb')
3
- %extend NVAction ('plugins/nvaction.rb')
4
- %decorate @NVAction
5
- #%decorate ShiftReducePrinter ('plugins/srp.rb')
6
- %prec{
7
- left '*' '/'
8
- left '+' '-'
9
- %}
10
- %%
11
-
12
- %LEX{
13
- /\s+/, /\#.*/ { }
14
- /[1-9][0-9]*/ { yield token(:NUM, $&.to_i) }
15
- /./ { yield token($&, $&) }
16
- %}
17
-
18
- #begin-rule
19
- expr :
20
- expr-left '+' expr-right { _left + _right }
21
- | expr-left '-' expr-right { _left - _right }
22
- | expr-left '*' expr-right { _left * _right }
23
- | expr-left '/' expr-right { _left / _right }
24
- | '(' expr ')' { _expr }
25
- | NUM { _NUM.value }
26
- ;
27
- #end-rule
28
- %%
29
- parser = createDecoratedTinyCalc
30
- r, = parser.parse(STDIN)
31
- puts r
1
+ %class TinyCalc::Parser
2
+ %extend Depager::Lexer ('depager/plugins/lex.rb')
3
+ %extend Depager::Action ('depager/plugins/action.rb')
4
+ %decorate @Action
5
+ #%decorate Depager::LALR::ShiftReducePrinter ('depager/plugins/srp.rb')
6
+ %prec{
7
+ left '*' '/'
8
+ left '+' '-'
9
+ %}
10
+ %%
11
+
12
+ %LEX{
13
+ /\s+/, /\#.*/ { }
14
+ /[1-9][0-9]*/ { yield token(:NUM, $&.to_i) }
15
+ /./ { yield token($&, $&) }
16
+ %}
17
+
18
+ #begin-rule
19
+ expr :
20
+ expr-left '+' expr-right { _left + _right }
21
+ | expr-left '-' expr-right { _left - _right }
22
+ | expr-left '*' expr-right { _left * _right }
23
+ | expr-left '/' expr-right { _left / _right }
24
+ | '(' expr ')' { _expr }
25
+ | NUM { _NUM.value }
26
+ ;
27
+ #end-rule
28
+ %%
29
+ parser = TinyCalc.create_decorated_parser
30
+ r, = parser.parse(ARGF)
31
+ puts r
@@ -0,0 +1,44 @@
1
+ require "depager"
2
+ require "depager/version"
3
+ require "optparse"
4
+
5
+ module Depager
6
+ class CLI
7
+ def run(argv)
8
+ output_file_name = nil
9
+
10
+ OptionParser.new do |opt|
11
+ opt.banner = "Usage: depager [options] [file]"
12
+ opt.version = Depager::VERSION
13
+ opt.on("-v", "Enable verbose mode") { Depager.configuration[:verbose] = true }
14
+ opt.on("-g[FLAGS]", "Enable debug mode") { |v| Depager.configuration[:debug] = v || "sgc" }
15
+ opt.on("-I DIRECTORY", "Add the directory to $LOAD_PATH") { |v| $LOAD_PATH.unshift(v) }
16
+ opt.on("-o OUTPUT", "Set the output file name") { |v| output_file_name = v }
17
+ opt.parse!(argv)
18
+ end
19
+
20
+ d_parser = Depager::DeclarationPartParser.new
21
+ result = d_parser.parse(argv[0] ? File.open(argv[0]) : $stdin)
22
+
23
+ if output_file_name
24
+ File.write(output_file_name, result)
25
+ else
26
+ $stdout.write result
27
+ end
28
+ 0
29
+ rescue Depager::ErrorExit
30
+ 1
31
+ rescue SystemExit => e
32
+ e.status
33
+ rescue Exception => e # rubocop:disable Lint/RescueException
34
+ warn "#{File.basename $PROGRAM_NAME}: fatal error."
35
+ warn "| #{e}"
36
+ warn "| - #{d_parser.input_path}:#{d_parser.file.lineno}" if d_parser
37
+ warn "| ( #{File.basename $1}:#{$2} )" if e.backtrace[0] =~ /^(.+):(\d+)(:.+)?$/
38
+ raise if Depager.debug_mode?
39
+
40
+ warn "Try -g option if you want to see more error infomation."
41
+ 2
42
+ end
43
+ end
44
+ end