depager 0.2.3 → 0.3.0.b20160729

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 (91) hide show
  1. checksums.yaml +7 -0
  2. data/README.en +4 -19
  3. data/README.ja +42 -79
  4. data/bin/depager +42 -45
  5. data/examples/action_pl0d/pl0d.action.dr +421 -0
  6. data/examples/action_pl0d/test.pl0ds +49 -0
  7. data/examples/c89/c89.dr +493 -496
  8. data/examples/c89/test.c89 +10 -10
  9. data/examples/extension/astdf.rb +10 -0
  10. data/examples/extension/atree.dr +55 -0
  11. data/examples/{sample_calc → extension}/calc.atree.dr +42 -43
  12. data/examples/extension/calc.simple_action.dr +33 -0
  13. data/examples/extension/paction.dr +16 -15
  14. data/examples/extension/pactiontest.dr +14 -14
  15. data/examples/extension/simple_action.rb +44 -0
  16. data/examples/pl0d/pl0ds.dr +337 -334
  17. data/examples/pl0d/test.pl0ds +33 -33
  18. data/examples/rie_calc/calc.rie.dr +57 -0
  19. data/examples/rie_calc/test.calc +4 -0
  20. data/examples/rie_dcuse/dcuse.rie.dr +71 -0
  21. data/examples/rie_dcuse/test.dcuse +1 -0
  22. data/examples/rie_pl0/orig_ex/exerrdg.pl0 +44 -0
  23. data/examples/rie_pl0/orig_ex/exerrm.pl0 +19 -0
  24. data/examples/rie_pl0/orig_ex/exerrmre.pl0 +20 -0
  25. data/examples/rie_pl0/orig_ex/exerrtok.pl0 +18 -0
  26. data/examples/rie_pl0/orig_ex/exmdg.pl0 +40 -0
  27. data/examples/rie_pl0/orig_ex/exmdgwwl.pl0 +43 -0
  28. data/examples/rie_pl0/orig_ex/exmrw.pl0 +22 -0
  29. data/examples/rie_pl0/orig_ex/exmwwl.pl0 +18 -0
  30. data/examples/rie_pl0/orig_ex/exnorw.pl0 +17 -0
  31. data/examples/rie_pl0/pl0.rie.dr +450 -0
  32. data/examples/rie_pl0/test.pl0 +10 -0
  33. data/examples/sample_calc/calc.action.dr +33 -33
  34. data/examples/sample_calc/calc.ast.action.dr +65 -66
  35. data/examples/sample_calc/calc.ast.dr +55 -55
  36. data/examples/sample_calc/calc.cst.dr +45 -45
  37. data/examples/sample_calc/calc.dr +43 -43
  38. data/examples/sample_calc/calc.lex.dr +29 -29
  39. data/examples/sample_calc/{calc_prec.nvaction.dr → calc_prec.action.dr} +31 -31
  40. data/examples/slex_test/divreg.slex.dr +29 -29
  41. data/examples/slex_test/ljoin.slex.dr +36 -36
  42. data/examples/slex_test/test.divreg +1 -1
  43. data/examples/slex_test/test.ljoin +3 -3
  44. data/lib/depager.rb +582 -670
  45. data/lib/depager/grammar.rb +256 -291
  46. data/lib/depager/lr.rb +574 -579
  47. data/lib/depager/parser.rb +282 -277
  48. data/lib/depager/ruby/plugins/_rie_debug.rb +35 -0
  49. data/lib/depager/ruby/plugins/action.rb +53 -43
  50. data/lib/depager/ruby/plugins/ast.dr +364 -269
  51. data/lib/depager/ruby/plugins/ast.rb +1367 -1308
  52. data/lib/depager/ruby/plugins/cst.dr +172 -180
  53. data/lib/depager/ruby/plugins/cst.rb +587 -626
  54. data/lib/depager/ruby/plugins/lex.dr +85 -89
  55. data/lib/depager/ruby/plugins/lex.rb +310 -336
  56. data/lib/depager/ruby/plugins/rie.dr +723 -0
  57. data/lib/depager/ruby/plugins/rie.rb +1653 -0
  58. data/lib/depager/ruby/plugins/slex.dr +202 -200
  59. data/lib/depager/ruby/plugins/slex.rb +780 -817
  60. data/lib/depager/ruby/plugins/srp.rb +56 -51
  61. data/lib/depager/ruby/templates/extension_lalr_master.erb +46 -51
  62. data/lib/depager/ruby/templates/extension_lalr_slave.erb +99 -107
  63. data/lib/depager/ruby/templates/single_lalr_parser.erb +115 -117
  64. data/lib/depager/utils.rb +148 -318
  65. data/lib/depager/version.rb +4 -3
  66. metadata +52 -60
  67. data/ChangeLog +0 -16
  68. data/data/depager/pre-setup.rb +0 -3
  69. data/examples/c89/c89.tab.rb +0 -7127
  70. data/examples/pl0d/pl0ds.tab.rb +0 -2698
  71. data/examples/sample_calc/calc.action.tab.rb +0 -457
  72. data/examples/sample_calc/calc.ast.action.tab.rb +0 -749
  73. data/examples/sample_calc/calc.ast.tab.rb +0 -665
  74. data/examples/sample_calc/calc.astdf.dr +0 -54
  75. data/examples/sample_calc/calc.astdf.tab.rb +0 -672
  76. data/examples/sample_calc/calc.atree.tab.rb +0 -451
  77. data/examples/sample_calc/calc.cst.tab.rb +0 -644
  78. data/examples/sample_calc/calc.lex.tab.rb +0 -374
  79. data/examples/sample_calc/calc.nvaction.dr +0 -33
  80. data/examples/sample_calc/calc.nvaction.tab.rb +0 -465
  81. data/examples/sample_calc/calc.tab.rb +0 -365
  82. data/examples/sample_calc/calc_prec.nvaction.tab.rb +0 -431
  83. data/examples/slex_test/divreg.slex.tab.rb +0 -303
  84. data/examples/slex_test/ljoin.slex.tab.rb +0 -370
  85. data/lib/depager/ruby/plugins/_ast_tmpl.rb +0 -73
  86. data/lib/depager/ruby/plugins/astdf.rb +0 -6
  87. data/lib/depager/ruby/plugins/atree.dr +0 -55
  88. data/lib/depager/ruby/plugins/atree.rb +0 -347
  89. data/lib/depager/ruby/plugins/nvaction.rb +0 -19
  90. data/lib/depager/ruby/templates/simple.erb +0 -23
  91. data/setup.rb +0 -1585
@@ -1,33 +1,33 @@
1
- %class TinyCalc
2
- %extend Lexer ('plugins/lex.rb')
3
- %extend Action ('plugins/action.rb')
4
- %decorate @Action
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
- #begin-rule
15
- expr :
16
- expr '+' term { val[0] + val[2] }
17
- | expr '-' term { val[0] - val[2] }
18
- | term { val[0] }
19
- ;
20
- term :
21
- term '*' fact { val[0] * val[2] }
22
- | term '/' fact { val[0] / val[2] }
23
- | fact { val[0] }
24
- ;
25
- fact :
26
- NUM { val[0].value }
27
- | '(' expr ')' { val[1] }
28
- ;
29
- #end-rule
30
- %%
31
- parser = TinyCalc::createDecoratedParser
32
- r, = parser.parse(STDIN)
33
- puts r
1
+ %class TinyCalc::Parser
2
+ %extend Depager::Lexer ('plugins/lex.rb')
3
+ %extend Depager::Action ('plugins/action.rb')
4
+ %decorate @Action
5
+ #%decorate Depager::LALR::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
+ #begin-rule
15
+ expr :
16
+ expr '+' term { _expr + _term }
17
+ | expr '-' term { _expr - _term }
18
+ | term { _term }
19
+ ;
20
+ term :
21
+ term '*' fact { _term * _fact }
22
+ | term '/' fact { _term / _fact }
23
+ | fact { _fact }
24
+ ;
25
+ fact :
26
+ NUM { _NUM.value }
27
+ | '(' expr ')' { _expr }
28
+ ;
29
+ #end-rule
30
+ %%
31
+ parser = TinyCalc.create_decorated_parser
32
+ r, = parser.parse(STDIN)
33
+ puts r
@@ -1,66 +1,65 @@
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 ('plugins/lex.rb')
3
+ %extend Depager::ASTBuilder ('plugins/ast.rb')
4
+ %extend Depager::Action ('plugins/action.rb')
5
+ %decorate @ASTBuilder
6
+ %decorate @Action
7
+ #%decorate Depager::LALR::ShiftReducePrinter ('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
+ require 'pp'
60
+ parser = TinyCalc.create_decorated_parser()
61
+ t, r = parser.parse(STDIN)
62
+ v = TinyCalc::Visitor.new
63
+ pp r
64
+ pp t.accept(v).value
65
+ pp t
@@ -1,55 +1,55 @@
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 ('plugins/lex.rb')
3
+ %extend Depager::ASTBuilder ('plugins/ast.rb')
4
+ %decorate @ASTBuilder
5
+ #%decorate Depager::LALR::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 = TinyCalc.create_decorated_parser()
51
+ t, = parser.parse(STDIN)
52
+ v = TinyCalc::Visitor.new
53
+ pp t.accept(v).value
54
+ pp t
55
+
@@ -1,45 +1,45 @@
1
- %class TinyCalc
2
- %extend Lexer ('plugins/lex.rb')
3
- %extend CSTBuilder ('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
- %}
21
-
22
- #begin-rule
23
- expr :
24
- expr '+' term { ~value = ~expr.value + ~term.value }
25
- | expr '-' term { ~value = ~expr.value + ~term.value }
26
- | term { ~value = ~term.value }
27
- ;
28
- term :
29
- term '*' fact { ~value = ~term.value * ~fact.value }
30
- | term '/' fact { ~value = ~term.value / ~fact.value }
31
- | fact { ~value = ~fact.value }
32
- ;
33
- fact :
34
- NUM { ~value = ~num.value }
35
- | '(' expr ')' { ~value = ~expr }
36
- ;
37
- #end-rule
38
- %%
39
- require 'pp'
40
- parser = createDecoratedTinyCalc
41
- r, = parser.parse(STDIN)
42
- v = Visitor.new
43
- r.accept(v)
44
- pp r
45
- puts r.value
1
+ %class TinyCalc::Parser
2
+ %extend Depager::Lexer ('plugins/lex.rb')
3
+ %extend Depager::CSTBuilder ('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
+ %}
21
+
22
+ #begin-rule
23
+ expr :
24
+ expr '+' term { $.value = $.expr.value + $.term.value }
25
+ | expr '-' term { $.value = $.expr.value + $.term.value }
26
+ | term { $.value = $.term.value }
27
+ ;
28
+ term :
29
+ term '*' fact { $.value = $.term.value * $.fact.value }
30
+ | term '/' fact { $.value = $.term.value / $.fact.value }
31
+ | fact { $.value = $.fact.value }
32
+ ;
33
+ fact :
34
+ NUM { $.value = $.num.value }
35
+ | '(' expr ')' { $.value = $.expr }
36
+ ;
37
+ #end-rule
38
+ %%
39
+ require 'pp'
40
+ parser = TinyCalc.create_decorated_parser
41
+ r, = parser.parse(STDIN)
42
+ v = TinyCalc::Visitor.new
43
+ r.accept(v)
44
+ pp r
45
+ puts r.value
@@ -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(STDIN)