parser 0.9.1 → 0.9.2
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 +4 -4
- data/.gitignore +1 -0
- data/Rakefile +2 -1
- data/TODO.md +20 -0
- data/bin/explain-parse +1 -1
- data/lib/parser/all.rb +1 -0
- data/lib/parser/builders/default.rb +30 -2
- data/lib/parser/lexer/literal.rb +41 -20
- data/lib/parser/lexer/stack_state.rb +4 -0
- data/lib/parser/lexer.rb +2585 -2545
- data/lib/parser/lexer.rl +61 -38
- data/lib/parser/ruby18.rb +3133 -3171
- data/lib/parser/ruby18.y +16 -30
- data/lib/parser/ruby19.rb +3319 -3388
- data/lib/parser/ruby19.y +35 -50
- data/lib/parser/ruby20.rb +6961 -0
- data/lib/parser/ruby20.y +2190 -0
- data/lib/parser.rb +0 -1
- data/parse.y.diff +12201 -0
- data/parser.gemspec +2 -1
- data/test/helper.rb +1 -1
- data/test/parse_helper.rb +2 -2
- data/test/test_lexer.rb +95 -5
- data/test/test_lexer_stack_state.rb +7 -0
- data/test/test_parser.rb +138 -5
- metadata +6 -2
data/lib/parser/ruby19.y
CHANGED
@@ -44,14 +44,14 @@ preclow
|
|
44
44
|
|
45
45
|
rule
|
46
46
|
|
47
|
-
program:
|
47
|
+
program: top_compstmt
|
48
48
|
|
49
49
|
top_compstmt: top_stmts opt_terms
|
50
50
|
{
|
51
51
|
result = @builder.compstmt(val[0])
|
52
52
|
}
|
53
53
|
|
54
|
-
top_stmts:
|
54
|
+
top_stmts: # nothing
|
55
55
|
{
|
56
56
|
result = []
|
57
57
|
}
|
@@ -69,15 +69,9 @@ rule
|
|
69
69
|
}
|
70
70
|
|
71
71
|
top_stmt: stmt
|
72
|
-
| klBEGIN
|
72
|
+
| klBEGIN tLCURLY top_compstmt tRCURLY
|
73
73
|
{
|
74
|
-
@
|
75
|
-
}
|
76
|
-
tLCURLY top_compstmt tRCURLY
|
77
|
-
{
|
78
|
-
@static_env.unextend
|
79
|
-
|
80
|
-
result = @builder.preexe(val[0], val[2], val[3], val[4])
|
74
|
+
result = @builder.preexe(val[0], val[1], val[2], val[3])
|
81
75
|
}
|
82
76
|
|
83
77
|
bodystmt: compstmt opt_rescue opt_else opt_ensure
|
@@ -101,7 +95,7 @@ rule
|
|
101
95
|
result = @builder.compstmt(val[0])
|
102
96
|
}
|
103
97
|
|
104
|
-
stmts:
|
98
|
+
stmts: # nothing
|
105
99
|
{
|
106
100
|
result = []
|
107
101
|
}
|
@@ -846,13 +840,13 @@ rule
|
|
846
840
|
result = val
|
847
841
|
}
|
848
842
|
|
849
|
-
opt_paren_args:
|
843
|
+
opt_paren_args: # nothing
|
850
844
|
{
|
851
845
|
result = [ nil, [], nil ]
|
852
846
|
}
|
853
847
|
| paren_args
|
854
848
|
|
855
|
-
opt_call_args:
|
849
|
+
opt_call_args: # nothing
|
856
850
|
{
|
857
851
|
result = []
|
858
852
|
}
|
@@ -895,7 +889,7 @@ rule
|
|
895
889
|
result = @lexer.cmdarg.dup
|
896
890
|
@lexer.cmdarg.push(true)
|
897
891
|
}
|
898
|
-
|
892
|
+
call_args
|
899
893
|
{
|
900
894
|
@lexer.cmdarg = val[0]
|
901
895
|
|
@@ -911,7 +905,7 @@ rule
|
|
911
905
|
{
|
912
906
|
result = [ val[1] ]
|
913
907
|
}
|
914
|
-
|
|
908
|
+
| # nothing
|
915
909
|
{
|
916
910
|
result = []
|
917
911
|
}
|
@@ -968,10 +962,7 @@ rule
|
|
968
962
|
}
|
969
963
|
opt_nl tRPAREN
|
970
964
|
{
|
971
|
-
|
972
|
-
diagnostic :warning, :grouped_expression, val[0]
|
973
|
-
|
974
|
-
result = @builder.parenthesize(val[0], val[1], val[3])
|
965
|
+
result = @builder.parenthesize(val[0], val[1], val[4])
|
975
966
|
}
|
976
967
|
| tLPAREN compstmt tRPAREN
|
977
968
|
{
|
@@ -1399,11 +1390,14 @@ rule
|
|
1399
1390
|
result = [ val[0] ]
|
1400
1391
|
}
|
1401
1392
|
|
1402
|
-
opt_block_param:
|
1393
|
+
opt_block_param: # nothing
|
1403
1394
|
{
|
1404
1395
|
result = @builder.args(nil, [], nil)
|
1405
1396
|
}
|
1406
1397
|
| block_param_def
|
1398
|
+
{
|
1399
|
+
@lexer.state = :expr_value
|
1400
|
+
}
|
1407
1401
|
|
1408
1402
|
block_param_def: tPIPE opt_bv_decl tPIPE
|
1409
1403
|
{
|
@@ -1418,7 +1412,7 @@ rule
|
|
1418
1412
|
result = @builder.args(val[0], val[1].concat(val[2]), val[3])
|
1419
1413
|
}
|
1420
1414
|
|
1421
|
-
opt_bv_decl:
|
1415
|
+
opt_bv_decl: # nothing
|
1422
1416
|
{
|
1423
1417
|
result = []
|
1424
1418
|
}
|
@@ -1558,7 +1552,7 @@ rule
|
|
1558
1552
|
{
|
1559
1553
|
@static_env.extend_dynamic
|
1560
1554
|
}
|
1561
|
-
|
1555
|
+
opt_block_param compstmt kEND
|
1562
1556
|
{
|
1563
1557
|
result = [ val[0], val[2], val[3], val[4] ]
|
1564
1558
|
|
@@ -1653,40 +1647,35 @@ rule
|
|
1653
1647
|
result = @builder.regexp_compose(val[0], val[1], val[2], opts)
|
1654
1648
|
}
|
1655
1649
|
|
1656
|
-
words: tWORDS_BEG
|
1657
|
-
{ # :nocov: TODO: unused with Ragel lexer; remove?
|
1658
|
-
result = @builder.words_compose(val[0], [], val[2])
|
1659
|
-
}
|
1660
|
-
| tWORDS_BEG word_list tSTRING_END
|
1650
|
+
words: tWORDS_BEG word_list tSTRING_END
|
1661
1651
|
{
|
1662
1652
|
result = @builder.words_compose(val[0], val[1], val[2])
|
1663
1653
|
}
|
1664
1654
|
|
1665
|
-
word_list:
|
1655
|
+
word_list: # nothing
|
1666
1656
|
{
|
1667
1657
|
result = []
|
1668
1658
|
}
|
1669
1659
|
| word_list word tSPACE
|
1670
1660
|
{
|
1671
|
-
result = val[0] << val[1]
|
1661
|
+
result = val[0] << @builder.word(val[1])
|
1672
1662
|
}
|
1673
1663
|
|
1674
1664
|
word: string_content
|
1665
|
+
{
|
1666
|
+
result = [ val[0] ]
|
1667
|
+
}
|
1675
1668
|
| word string_content
|
1676
|
-
{
|
1677
|
-
|
1669
|
+
{
|
1670
|
+
result = val[0] << val[1]
|
1678
1671
|
}
|
1679
1672
|
|
1680
|
-
qwords: tQWORDS_BEG
|
1681
|
-
{ # :nocov: TODO: unused with Ragel lexer; remove?
|
1682
|
-
result = @builder.words_compose(val[0], [], val[2])
|
1683
|
-
}
|
1684
|
-
| tQWORDS_BEG qword_list tSTRING_END
|
1673
|
+
qwords: tQWORDS_BEG qword_list tSTRING_END
|
1685
1674
|
{
|
1686
1675
|
result = @builder.words_compose(val[0], val[1], val[2])
|
1687
1676
|
}
|
1688
1677
|
|
1689
|
-
qword_list:
|
1678
|
+
qword_list: # nothing
|
1690
1679
|
{
|
1691
1680
|
result = []
|
1692
1681
|
}
|
@@ -1695,7 +1684,7 @@ rule
|
|
1695
1684
|
result = val[0] << @builder.string(val[1])
|
1696
1685
|
}
|
1697
1686
|
|
1698
|
-
string_contents:
|
1687
|
+
string_contents: # nothing
|
1699
1688
|
{
|
1700
1689
|
result = []
|
1701
1690
|
}
|
@@ -1704,7 +1693,7 @@ rule
|
|
1704
1693
|
result = val[0] << val[1]
|
1705
1694
|
}
|
1706
1695
|
|
1707
|
-
xstring_contents:
|
1696
|
+
xstring_contents: # nothing
|
1708
1697
|
{
|
1709
1698
|
result = []
|
1710
1699
|
}
|
@@ -1713,7 +1702,7 @@ xstring_contents: none # TODO: replace with string_contents?
|
|
1713
1702
|
result = val[0] << val[1]
|
1714
1703
|
}
|
1715
1704
|
|
1716
|
-
regexp_contents:
|
1705
|
+
regexp_contents: # nothing
|
1717
1706
|
{
|
1718
1707
|
result = []
|
1719
1708
|
}
|
@@ -1758,17 +1747,11 @@ regexp_contents: none
|
|
1758
1747
|
| backref
|
1759
1748
|
|
1760
1749
|
|
1761
|
-
symbol:
|
1762
|
-
{ # :nocov: TODO: not used, delete.
|
1763
|
-
result = nil
|
1764
|
-
}
|
1765
|
-
| tSYMBOL
|
1750
|
+
symbol: tSYMBOL
|
1766
1751
|
{
|
1767
1752
|
result = @builder.symbol(val[0])
|
1768
1753
|
}
|
1769
1754
|
|
1770
|
-
sym: fname | tIVAR | tGVAR | tCVAR
|
1771
|
-
|
1772
1755
|
dsym: tSYMBEG xstring_contents tSTRING_END
|
1773
1756
|
{
|
1774
1757
|
result = @builder.symbol_compose(val[0], val[1], val[2])
|
@@ -1886,11 +1869,13 @@ keyword_variable: kNIL
|
|
1886
1869
|
{
|
1887
1870
|
result = @builder.args(val[0], val[1], val[2])
|
1888
1871
|
|
1889
|
-
@lexer.state = :
|
1872
|
+
@lexer.state = :expr_value
|
1890
1873
|
}
|
1891
1874
|
| f_args term
|
1892
1875
|
{
|
1893
1876
|
result = @builder.args(nil, val[0], nil)
|
1877
|
+
|
1878
|
+
@lexer.state = :expr_value
|
1894
1879
|
}
|
1895
1880
|
|
1896
1881
|
f_args: f_arg tCOMMA f_optarg tCOMMA f_rest_arg opt_f_block_arg
|
@@ -2081,7 +2066,7 @@ keyword_variable: kNIL
|
|
2081
2066
|
{
|
2082
2067
|
result = [ val[1] ]
|
2083
2068
|
}
|
2084
|
-
|
|
2069
|
+
| # nothing
|
2085
2070
|
{
|
2086
2071
|
result = []
|
2087
2072
|
}
|
@@ -2092,7 +2077,7 @@ keyword_variable: kNIL
|
|
2092
2077
|
result = val[1]
|
2093
2078
|
}
|
2094
2079
|
|
2095
|
-
assoc_list:
|
2080
|
+
assoc_list: # nothing
|
2096
2081
|
{
|
2097
2082
|
result = []
|
2098
2083
|
}
|