natalie_parser 1.0.0

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 (142) hide show
  1. checksums.yaml +7 -0
  2. data/CHANGELOG.md +22 -0
  3. data/Dockerfile +26 -0
  4. data/Gemfile +10 -0
  5. data/LICENSE +21 -0
  6. data/README.md +55 -0
  7. data/Rakefile +242 -0
  8. data/ext/natalie_parser/extconf.rb +9 -0
  9. data/ext/natalie_parser/mri_creator.hpp +139 -0
  10. data/ext/natalie_parser/natalie_parser.cpp +144 -0
  11. data/include/natalie_parser/creator/debug_creator.hpp +113 -0
  12. data/include/natalie_parser/creator.hpp +108 -0
  13. data/include/natalie_parser/lexer/interpolated_string_lexer.hpp +64 -0
  14. data/include/natalie_parser/lexer/regexp_lexer.hpp +37 -0
  15. data/include/natalie_parser/lexer/word_array_lexer.hpp +57 -0
  16. data/include/natalie_parser/lexer.hpp +135 -0
  17. data/include/natalie_parser/node/alias_node.hpp +35 -0
  18. data/include/natalie_parser/node/arg_node.hpp +74 -0
  19. data/include/natalie_parser/node/array_node.hpp +34 -0
  20. data/include/natalie_parser/node/array_pattern_node.hpp +28 -0
  21. data/include/natalie_parser/node/assignment_node.hpp +34 -0
  22. data/include/natalie_parser/node/back_ref_node.hpp +28 -0
  23. data/include/natalie_parser/node/begin_block_node.hpp +25 -0
  24. data/include/natalie_parser/node/begin_node.hpp +52 -0
  25. data/include/natalie_parser/node/begin_rescue_node.hpp +47 -0
  26. data/include/natalie_parser/node/bignum_node.hpp +37 -0
  27. data/include/natalie_parser/node/block_node.hpp +55 -0
  28. data/include/natalie_parser/node/block_pass_node.hpp +33 -0
  29. data/include/natalie_parser/node/break_node.hpp +32 -0
  30. data/include/natalie_parser/node/call_node.hpp +85 -0
  31. data/include/natalie_parser/node/case_in_node.hpp +40 -0
  32. data/include/natalie_parser/node/case_node.hpp +52 -0
  33. data/include/natalie_parser/node/case_when_node.hpp +43 -0
  34. data/include/natalie_parser/node/class_node.hpp +39 -0
  35. data/include/natalie_parser/node/colon2_node.hpp +44 -0
  36. data/include/natalie_parser/node/colon3_node.hpp +34 -0
  37. data/include/natalie_parser/node/constant_node.hpp +26 -0
  38. data/include/natalie_parser/node/def_node.hpp +55 -0
  39. data/include/natalie_parser/node/defined_node.hpp +33 -0
  40. data/include/natalie_parser/node/encoding_node.hpp +26 -0
  41. data/include/natalie_parser/node/end_block_node.hpp +25 -0
  42. data/include/natalie_parser/node/evaluate_to_string_node.hpp +37 -0
  43. data/include/natalie_parser/node/false_node.hpp +23 -0
  44. data/include/natalie_parser/node/fixnum_node.hpp +36 -0
  45. data/include/natalie_parser/node/float_node.hpp +36 -0
  46. data/include/natalie_parser/node/hash_node.hpp +34 -0
  47. data/include/natalie_parser/node/hash_pattern_node.hpp +27 -0
  48. data/include/natalie_parser/node/identifier_node.hpp +123 -0
  49. data/include/natalie_parser/node/if_node.hpp +43 -0
  50. data/include/natalie_parser/node/infix_op_node.hpp +46 -0
  51. data/include/natalie_parser/node/interpolated_node.hpp +33 -0
  52. data/include/natalie_parser/node/interpolated_regexp_node.hpp +28 -0
  53. data/include/natalie_parser/node/interpolated_shell_node.hpp +22 -0
  54. data/include/natalie_parser/node/interpolated_string_node.hpp +31 -0
  55. data/include/natalie_parser/node/interpolated_symbol_key_node.hpp +18 -0
  56. data/include/natalie_parser/node/interpolated_symbol_node.hpp +28 -0
  57. data/include/natalie_parser/node/iter_node.hpp +45 -0
  58. data/include/natalie_parser/node/keyword_arg_node.hpp +25 -0
  59. data/include/natalie_parser/node/keyword_splat_node.hpp +38 -0
  60. data/include/natalie_parser/node/logical_and_node.hpp +40 -0
  61. data/include/natalie_parser/node/logical_or_node.hpp +40 -0
  62. data/include/natalie_parser/node/match_node.hpp +38 -0
  63. data/include/natalie_parser/node/module_node.hpp +32 -0
  64. data/include/natalie_parser/node/multiple_assignment_arg_node.hpp +32 -0
  65. data/include/natalie_parser/node/multiple_assignment_node.hpp +37 -0
  66. data/include/natalie_parser/node/next_node.hpp +37 -0
  67. data/include/natalie_parser/node/nil_node.hpp +23 -0
  68. data/include/natalie_parser/node/nil_sexp_node.hpp +23 -0
  69. data/include/natalie_parser/node/node.hpp +155 -0
  70. data/include/natalie_parser/node/node_with_args.hpp +47 -0
  71. data/include/natalie_parser/node/not_match_node.hpp +35 -0
  72. data/include/natalie_parser/node/not_node.hpp +37 -0
  73. data/include/natalie_parser/node/nth_ref_node.hpp +27 -0
  74. data/include/natalie_parser/node/op_assign_accessor_node.hpp +74 -0
  75. data/include/natalie_parser/node/op_assign_and_node.hpp +34 -0
  76. data/include/natalie_parser/node/op_assign_node.hpp +47 -0
  77. data/include/natalie_parser/node/op_assign_or_node.hpp +34 -0
  78. data/include/natalie_parser/node/pin_node.hpp +33 -0
  79. data/include/natalie_parser/node/range_node.hpp +52 -0
  80. data/include/natalie_parser/node/redo_node.hpp +20 -0
  81. data/include/natalie_parser/node/regexp_node.hpp +36 -0
  82. data/include/natalie_parser/node/retry_node.hpp +20 -0
  83. data/include/natalie_parser/node/return_node.hpp +34 -0
  84. data/include/natalie_parser/node/safe_call_node.hpp +31 -0
  85. data/include/natalie_parser/node/sclass_node.hpp +37 -0
  86. data/include/natalie_parser/node/self_node.hpp +23 -0
  87. data/include/natalie_parser/node/shadow_arg_node.hpp +40 -0
  88. data/include/natalie_parser/node/shell_node.hpp +32 -0
  89. data/include/natalie_parser/node/splat_node.hpp +39 -0
  90. data/include/natalie_parser/node/splat_value_node.hpp +32 -0
  91. data/include/natalie_parser/node/stabby_proc_node.hpp +29 -0
  92. data/include/natalie_parser/node/string_node.hpp +42 -0
  93. data/include/natalie_parser/node/super_node.hpp +44 -0
  94. data/include/natalie_parser/node/symbol_key_node.hpp +19 -0
  95. data/include/natalie_parser/node/symbol_node.hpp +30 -0
  96. data/include/natalie_parser/node/to_array_node.hpp +33 -0
  97. data/include/natalie_parser/node/true_node.hpp +23 -0
  98. data/include/natalie_parser/node/unary_op_node.hpp +41 -0
  99. data/include/natalie_parser/node/undef_node.hpp +31 -0
  100. data/include/natalie_parser/node/until_node.hpp +21 -0
  101. data/include/natalie_parser/node/while_node.hpp +52 -0
  102. data/include/natalie_parser/node/yield_node.hpp +29 -0
  103. data/include/natalie_parser/node.hpp +89 -0
  104. data/include/natalie_parser/parser.hpp +218 -0
  105. data/include/natalie_parser/token.hpp +842 -0
  106. data/include/tm/defer.hpp +34 -0
  107. data/include/tm/hashmap.hpp +826 -0
  108. data/include/tm/macros.hpp +16 -0
  109. data/include/tm/optional.hpp +223 -0
  110. data/include/tm/owned_ptr.hpp +186 -0
  111. data/include/tm/recursion_guard.hpp +156 -0
  112. data/include/tm/shared_ptr.hpp +259 -0
  113. data/include/tm/string.hpp +1447 -0
  114. data/include/tm/tests.hpp +78 -0
  115. data/include/tm/vector.hpp +796 -0
  116. data/lib/natalie_parser/sexp.rb +36 -0
  117. data/lib/natalie_parser/version.rb +5 -0
  118. data/lib/natalie_parser.rb +3 -0
  119. data/natalie_parser.gemspec +23 -0
  120. data/src/lexer/interpolated_string_lexer.cpp +88 -0
  121. data/src/lexer/regexp_lexer.cpp +95 -0
  122. data/src/lexer/word_array_lexer.cpp +134 -0
  123. data/src/lexer.cpp +1703 -0
  124. data/src/node/alias_node.cpp +11 -0
  125. data/src/node/assignment_node.cpp +33 -0
  126. data/src/node/begin_node.cpp +29 -0
  127. data/src/node/begin_rescue_node.cpp +33 -0
  128. data/src/node/class_node.cpp +22 -0
  129. data/src/node/interpolated_regexp_node.cpp +19 -0
  130. data/src/node/interpolated_shell_node.cpp +25 -0
  131. data/src/node/interpolated_string_node.cpp +111 -0
  132. data/src/node/interpolated_symbol_node.cpp +25 -0
  133. data/src/node/match_node.cpp +14 -0
  134. data/src/node/module_node.cpp +21 -0
  135. data/src/node/multiple_assignment_node.cpp +37 -0
  136. data/src/node/node.cpp +10 -0
  137. data/src/node/node_with_args.cpp +35 -0
  138. data/src/node/op_assign_node.cpp +36 -0
  139. data/src/node/string_node.cpp +33 -0
  140. data/src/parser.cpp +2972 -0
  141. data/src/token.cpp +27 -0
  142. metadata +186 -0
data/src/token.cpp ADDED
@@ -0,0 +1,27 @@
1
+ #include "natalie_parser/token.hpp"
2
+ #include "natalie_parser/parser.hpp"
3
+ #include "tm/string.hpp"
4
+
5
+ namespace NatalieParser {
6
+
7
+ void Token::validate() {
8
+ switch (m_type) {
9
+ case Type::Invalid:
10
+ throw Parser::SyntaxError { String::format("{}: syntax error, unexpected '{}'", m_line + 1, literal_or_blank()) };
11
+ case Type::InvalidUnicodeEscape:
12
+ throw Parser::SyntaxError { String::format("{}: invalid Unicode escape", m_line + 1) };
13
+ case Type::InvalidCharacterEscape:
14
+ throw Parser::SyntaxError { String::format("{}: invalid character escape", m_line + 1) };
15
+ case Type::UnterminatedRegexp:
16
+ throw Parser::SyntaxError { String::format("unterminated regexp meets end of file at line {} and column {}: {}", m_line, m_column, literal_or_blank()) };
17
+ case Type::UnterminatedString:
18
+ throw Parser::SyntaxError { String::format("unterminated string meets end of file at line {} and column {}: {}", m_line, m_column, literal_or_blank()) };
19
+ case Type::UnterminatedWordArray:
20
+ throw Parser::SyntaxError { String::format("unterminated word array meets end of file at line {} and column {}: {}", m_line, m_column, literal_or_blank()) };
21
+ default:
22
+ assert(type_value()); // all other types should return a string for type_value()
23
+ return;
24
+ }
25
+ }
26
+
27
+ }
metadata ADDED
@@ -0,0 +1,186 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: natalie_parser
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.0
5
+ platform: ruby
6
+ authors:
7
+ - Tim Morgan
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2022-06-03 00:00:00.000000000 Z
12
+ dependencies: []
13
+ description: NatalieParser is a zero-dependency, from-scratch, hand-written recursive
14
+ descent parser for the Ruby Programming Language.
15
+ email:
16
+ - tim@timmorgan.org
17
+ executables: []
18
+ extensions:
19
+ - ext/natalie_parser/extconf.rb
20
+ extra_rdoc_files: []
21
+ files:
22
+ - CHANGELOG.md
23
+ - Dockerfile
24
+ - Gemfile
25
+ - LICENSE
26
+ - README.md
27
+ - Rakefile
28
+ - ext/natalie_parser/extconf.rb
29
+ - ext/natalie_parser/mri_creator.hpp
30
+ - ext/natalie_parser/natalie_parser.cpp
31
+ - include/natalie_parser/creator.hpp
32
+ - include/natalie_parser/creator/debug_creator.hpp
33
+ - include/natalie_parser/lexer.hpp
34
+ - include/natalie_parser/lexer/interpolated_string_lexer.hpp
35
+ - include/natalie_parser/lexer/regexp_lexer.hpp
36
+ - include/natalie_parser/lexer/word_array_lexer.hpp
37
+ - include/natalie_parser/node.hpp
38
+ - include/natalie_parser/node/alias_node.hpp
39
+ - include/natalie_parser/node/arg_node.hpp
40
+ - include/natalie_parser/node/array_node.hpp
41
+ - include/natalie_parser/node/array_pattern_node.hpp
42
+ - include/natalie_parser/node/assignment_node.hpp
43
+ - include/natalie_parser/node/back_ref_node.hpp
44
+ - include/natalie_parser/node/begin_block_node.hpp
45
+ - include/natalie_parser/node/begin_node.hpp
46
+ - include/natalie_parser/node/begin_rescue_node.hpp
47
+ - include/natalie_parser/node/bignum_node.hpp
48
+ - include/natalie_parser/node/block_node.hpp
49
+ - include/natalie_parser/node/block_pass_node.hpp
50
+ - include/natalie_parser/node/break_node.hpp
51
+ - include/natalie_parser/node/call_node.hpp
52
+ - include/natalie_parser/node/case_in_node.hpp
53
+ - include/natalie_parser/node/case_node.hpp
54
+ - include/natalie_parser/node/case_when_node.hpp
55
+ - include/natalie_parser/node/class_node.hpp
56
+ - include/natalie_parser/node/colon2_node.hpp
57
+ - include/natalie_parser/node/colon3_node.hpp
58
+ - include/natalie_parser/node/constant_node.hpp
59
+ - include/natalie_parser/node/def_node.hpp
60
+ - include/natalie_parser/node/defined_node.hpp
61
+ - include/natalie_parser/node/encoding_node.hpp
62
+ - include/natalie_parser/node/end_block_node.hpp
63
+ - include/natalie_parser/node/evaluate_to_string_node.hpp
64
+ - include/natalie_parser/node/false_node.hpp
65
+ - include/natalie_parser/node/fixnum_node.hpp
66
+ - include/natalie_parser/node/float_node.hpp
67
+ - include/natalie_parser/node/hash_node.hpp
68
+ - include/natalie_parser/node/hash_pattern_node.hpp
69
+ - include/natalie_parser/node/identifier_node.hpp
70
+ - include/natalie_parser/node/if_node.hpp
71
+ - include/natalie_parser/node/infix_op_node.hpp
72
+ - include/natalie_parser/node/interpolated_node.hpp
73
+ - include/natalie_parser/node/interpolated_regexp_node.hpp
74
+ - include/natalie_parser/node/interpolated_shell_node.hpp
75
+ - include/natalie_parser/node/interpolated_string_node.hpp
76
+ - include/natalie_parser/node/interpolated_symbol_key_node.hpp
77
+ - include/natalie_parser/node/interpolated_symbol_node.hpp
78
+ - include/natalie_parser/node/iter_node.hpp
79
+ - include/natalie_parser/node/keyword_arg_node.hpp
80
+ - include/natalie_parser/node/keyword_splat_node.hpp
81
+ - include/natalie_parser/node/logical_and_node.hpp
82
+ - include/natalie_parser/node/logical_or_node.hpp
83
+ - include/natalie_parser/node/match_node.hpp
84
+ - include/natalie_parser/node/module_node.hpp
85
+ - include/natalie_parser/node/multiple_assignment_arg_node.hpp
86
+ - include/natalie_parser/node/multiple_assignment_node.hpp
87
+ - include/natalie_parser/node/next_node.hpp
88
+ - include/natalie_parser/node/nil_node.hpp
89
+ - include/natalie_parser/node/nil_sexp_node.hpp
90
+ - include/natalie_parser/node/node.hpp
91
+ - include/natalie_parser/node/node_with_args.hpp
92
+ - include/natalie_parser/node/not_match_node.hpp
93
+ - include/natalie_parser/node/not_node.hpp
94
+ - include/natalie_parser/node/nth_ref_node.hpp
95
+ - include/natalie_parser/node/op_assign_accessor_node.hpp
96
+ - include/natalie_parser/node/op_assign_and_node.hpp
97
+ - include/natalie_parser/node/op_assign_node.hpp
98
+ - include/natalie_parser/node/op_assign_or_node.hpp
99
+ - include/natalie_parser/node/pin_node.hpp
100
+ - include/natalie_parser/node/range_node.hpp
101
+ - include/natalie_parser/node/redo_node.hpp
102
+ - include/natalie_parser/node/regexp_node.hpp
103
+ - include/natalie_parser/node/retry_node.hpp
104
+ - include/natalie_parser/node/return_node.hpp
105
+ - include/natalie_parser/node/safe_call_node.hpp
106
+ - include/natalie_parser/node/sclass_node.hpp
107
+ - include/natalie_parser/node/self_node.hpp
108
+ - include/natalie_parser/node/shadow_arg_node.hpp
109
+ - include/natalie_parser/node/shell_node.hpp
110
+ - include/natalie_parser/node/splat_node.hpp
111
+ - include/natalie_parser/node/splat_value_node.hpp
112
+ - include/natalie_parser/node/stabby_proc_node.hpp
113
+ - include/natalie_parser/node/string_node.hpp
114
+ - include/natalie_parser/node/super_node.hpp
115
+ - include/natalie_parser/node/symbol_key_node.hpp
116
+ - include/natalie_parser/node/symbol_node.hpp
117
+ - include/natalie_parser/node/to_array_node.hpp
118
+ - include/natalie_parser/node/true_node.hpp
119
+ - include/natalie_parser/node/unary_op_node.hpp
120
+ - include/natalie_parser/node/undef_node.hpp
121
+ - include/natalie_parser/node/until_node.hpp
122
+ - include/natalie_parser/node/while_node.hpp
123
+ - include/natalie_parser/node/yield_node.hpp
124
+ - include/natalie_parser/parser.hpp
125
+ - include/natalie_parser/token.hpp
126
+ - include/tm/defer.hpp
127
+ - include/tm/hashmap.hpp
128
+ - include/tm/macros.hpp
129
+ - include/tm/optional.hpp
130
+ - include/tm/owned_ptr.hpp
131
+ - include/tm/recursion_guard.hpp
132
+ - include/tm/shared_ptr.hpp
133
+ - include/tm/string.hpp
134
+ - include/tm/tests.hpp
135
+ - include/tm/vector.hpp
136
+ - lib/natalie_parser.rb
137
+ - lib/natalie_parser/sexp.rb
138
+ - lib/natalie_parser/version.rb
139
+ - natalie_parser.gemspec
140
+ - src/lexer.cpp
141
+ - src/lexer/interpolated_string_lexer.cpp
142
+ - src/lexer/regexp_lexer.cpp
143
+ - src/lexer/word_array_lexer.cpp
144
+ - src/node/alias_node.cpp
145
+ - src/node/assignment_node.cpp
146
+ - src/node/begin_node.cpp
147
+ - src/node/begin_rescue_node.cpp
148
+ - src/node/class_node.cpp
149
+ - src/node/interpolated_regexp_node.cpp
150
+ - src/node/interpolated_shell_node.cpp
151
+ - src/node/interpolated_string_node.cpp
152
+ - src/node/interpolated_symbol_node.cpp
153
+ - src/node/match_node.cpp
154
+ - src/node/module_node.cpp
155
+ - src/node/multiple_assignment_node.cpp
156
+ - src/node/node.cpp
157
+ - src/node/node_with_args.cpp
158
+ - src/node/op_assign_node.cpp
159
+ - src/node/string_node.cpp
160
+ - src/parser.cpp
161
+ - src/token.cpp
162
+ homepage: https://github.com/natalie-lang/natalie_parser
163
+ licenses:
164
+ - MIT
165
+ metadata: {}
166
+ post_install_message:
167
+ rdoc_options: []
168
+ require_paths:
169
+ - lib
170
+ - ext
171
+ required_ruby_version: !ruby/object:Gem::Requirement
172
+ requirements:
173
+ - - ">="
174
+ - !ruby/object:Gem::Version
175
+ version: '0'
176
+ required_rubygems_version: !ruby/object:Gem::Requirement
177
+ requirements:
178
+ - - ">="
179
+ - !ruby/object:Gem::Version
180
+ version: '0'
181
+ requirements: []
182
+ rubygems_version: 3.2.33
183
+ signing_key:
184
+ specification_version: 4
185
+ summary: A Parser for the Ruby Programming Language
186
+ test_files: []