antlr4ruby 0.1.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 (285) hide show
  1. checksums.yaml +7 -0
  2. data/.rspec +3 -0
  3. data/.standard.yml +3 -0
  4. data/CHANGELOG.md +5 -0
  5. data/CODE_OF_CONDUCT.md +84 -0
  6. data/Gemfile +12 -0
  7. data/Gemfile.lock +65 -0
  8. data/LICENSE +21 -0
  9. data/LICENSE.txt +21 -0
  10. data/README.md +39 -0
  11. data/Rakefile +10 -0
  12. data/lib/antlr4ruby/atn/action/lexer_action_executor.rb +75 -0
  13. data/lib/antlr4ruby/atn/action/lexer_action_type.rb +6 -0
  14. data/lib/antlr4ruby/atn/action/lexer_channel_action.rb +41 -0
  15. data/lib/antlr4ruby/atn/action/lexer_custom_action.rb +43 -0
  16. data/lib/antlr4ruby/atn/action/lexer_indexed_custom_action.rb +43 -0
  17. data/lib/antlr4ruby/atn/action/lexer_mode_action.rb +45 -0
  18. data/lib/antlr4ruby/atn/action/lexer_more_action.rb +34 -0
  19. data/lib/antlr4ruby/atn/action/lexer_pop_mode_action.rb +32 -0
  20. data/lib/antlr4ruby/atn/action/lexer_push_mode_action.rb +43 -0
  21. data/lib/antlr4ruby/atn/action/lexer_skip_action.rb +33 -0
  22. data/lib/antlr4ruby/atn/action/lexer_type_action.rb +42 -0
  23. data/lib/antlr4ruby/atn/atn.rb +43 -0
  24. data/lib/antlr4ruby/atn/atn_deserialization_options.rb +49 -0
  25. data/lib/antlr4ruby/atn/atn_deserializer.rb +429 -0
  26. data/lib/antlr4ruby/atn/atn_serializer.rb +4 -0
  27. data/lib/antlr4ruby/atn/atn_simulator.rb +36 -0
  28. data/lib/antlr4ruby/atn/atn_type.rb +6 -0
  29. data/lib/antlr4ruby/atn/config/atn_config.rb +46 -0
  30. data/lib/antlr4ruby/atn/config/atn_config_set.rb +5 -0
  31. data/lib/antlr4ruby/atn/config/lexer_atn_config.rb +47 -0
  32. data/lib/antlr4ruby/atn/config/ordered_atn_config_set.rb +4 -0
  33. data/lib/antlr4ruby/atn/context/array_prediction_context.rb +29 -0
  34. data/lib/antlr4ruby/atn/context/empty_prediction_context.rb +36 -0
  35. data/lib/antlr4ruby/atn/context/prediction_context.rb +111 -0
  36. data/lib/antlr4ruby/atn/context/prediction_context_cache.rb +17 -0
  37. data/lib/antlr4ruby/atn/context/semantic_context.rb +74 -0
  38. data/lib/antlr4ruby/atn/context/singleton_prediction_context.rb +36 -0
  39. data/lib/antlr4ruby/atn/info/accept_state_info.rb +26 -0
  40. data/lib/antlr4ruby/atn/info/ambiguity_info.rb +13 -0
  41. data/lib/antlr4ruby/atn/info/conflict_info.rb +39 -0
  42. data/lib/antlr4ruby/atn/info/context_sensitivity_info.rb +10 -0
  43. data/lib/antlr4ruby/atn/info/decision_event_info.rb +14 -0
  44. data/lib/antlr4ruby/atn/info/decision_info.rb +25 -0
  45. data/lib/antlr4ruby/atn/info/error_info.rb +9 -0
  46. data/lib/antlr4ruby/atn/info/lookahead_event_info.rb +12 -0
  47. data/lib/antlr4ruby/atn/info/parse_info.rb +18 -0
  48. data/lib/antlr4ruby/atn/info/predicate_eval_info.rb +5 -0
  49. data/lib/antlr4ruby/atn/lexer_atn_simulator.rb +150 -0
  50. data/lib/antlr4ruby/atn/ll1_analyzer.rb +4 -0
  51. data/lib/antlr4ruby/atn/parser_atn_simulator.rb +4 -0
  52. data/lib/antlr4ruby/atn/prediction_mode.rb +5 -0
  53. data/lib/antlr4ruby/atn/profiling_atn_simulator.rb +5 -0
  54. data/lib/antlr4ruby/atn/state/atn_state.rb +109 -0
  55. data/lib/antlr4ruby/atn/state/basic_block_start_state.rb +12 -0
  56. data/lib/antlr4ruby/atn/state/basic_state.rb +13 -0
  57. data/lib/antlr4ruby/atn/state/block_end_state.rb +13 -0
  58. data/lib/antlr4ruby/atn/state/block_start_state.rb +14 -0
  59. data/lib/antlr4ruby/atn/state/decision_state.rb +17 -0
  60. data/lib/antlr4ruby/atn/state/invalid_state.rb +12 -0
  61. data/lib/antlr4ruby/atn/state/loop_end_state.rb +14 -0
  62. data/lib/antlr4ruby/atn/state/plus_block_start_state.rb +11 -0
  63. data/lib/antlr4ruby/atn/state/plus_loopback_state.rb +10 -0
  64. data/lib/antlr4ruby/atn/state/rule_start_state.rb +10 -0
  65. data/lib/antlr4ruby/atn/state/rule_stop_state.rb +9 -0
  66. data/lib/antlr4ruby/atn/state/simulator_state.rb +17 -0
  67. data/lib/antlr4ruby/atn/state/star_block_start_state.rb +8 -0
  68. data/lib/antlr4ruby/atn/state/star_loop_entry_state.rb +15 -0
  69. data/lib/antlr4ruby/atn/state/star_loopback_state.rb +10 -0
  70. data/lib/antlr4ruby/atn/state/tokens_start_state.rb +10 -0
  71. data/lib/antlr4ruby/atn/transition/abstract_predicate_transition.rb +11 -0
  72. data/lib/antlr4ruby/atn/transition/action_transition.rb +36 -0
  73. data/lib/antlr4ruby/atn/transition/atom_transition.rb +29 -0
  74. data/lib/antlr4ruby/atn/transition/code_point_transitions.rb +7 -0
  75. data/lib/antlr4ruby/atn/transition/epsilon_transition.rb +35 -0
  76. data/lib/antlr4ruby/atn/transition/not_set_transition.rb +23 -0
  77. data/lib/antlr4ruby/atn/transition/precedence_predicate_transition.rb +34 -0
  78. data/lib/antlr4ruby/atn/transition/predicate_transition.rb +29 -0
  79. data/lib/antlr4ruby/atn/transition/range_transition.rb +30 -0
  80. data/lib/antlr4ruby/atn/transition/rule_transition.rb +29 -0
  81. data/lib/antlr4ruby/atn/transition/set_transition.rb +31 -0
  82. data/lib/antlr4ruby/atn/transition/transition.rb +63 -0
  83. data/lib/antlr4ruby/atn/transition/wildcard_transition.rb +21 -0
  84. data/lib/antlr4ruby/bail_error_strategy.rb +28 -0
  85. data/lib/antlr4ruby/base_error_listener.rb +14 -0
  86. data/lib/antlr4ruby/buffered_token_stream.rb +115 -0
  87. data/lib/antlr4ruby/char_streams.rb +34 -0
  88. data/lib/antlr4ruby/code_point_buffer.rb +31 -0
  89. data/lib/antlr4ruby/code_point_char_stream.rb +88 -0
  90. data/lib/antlr4ruby/common_token.rb +113 -0
  91. data/lib/antlr4ruby/common_token_factory.rb +39 -0
  92. data/lib/antlr4ruby/common_token_stream.rb +62 -0
  93. data/lib/antlr4ruby/console_error_listener.rb +10 -0
  94. data/lib/antlr4ruby/default_error_strategy.rb +108 -0
  95. data/lib/antlr4ruby/dfa/dfa.rb +67 -0
  96. data/lib/antlr4ruby/dfa/dfa_serializer.rb +28 -0
  97. data/lib/antlr4ruby/dfa/dfa_state.rb +80 -0
  98. data/lib/antlr4ruby/dfa/lexer_dfa_serializer.rb +12 -0
  99. data/lib/antlr4ruby/diagnostic_error_listener.rb +18 -0
  100. data/lib/antlr4ruby/exception/failed_predicate_exception.rb +27 -0
  101. data/lib/antlr4ruby/exception/input_mismatch_exception.rb +16 -0
  102. data/lib/antlr4ruby/exception/lexer_no_viable_alt_exception.rb +36 -0
  103. data/lib/antlr4ruby/exception/no_viable_alt_exception.rb +29 -0
  104. data/lib/antlr4ruby/exception/parse_cancellation_exception.rb +10 -0
  105. data/lib/antlr4ruby/exception/recognition_exception.rb +55 -0
  106. data/lib/antlr4ruby/int_stream.rb +11 -0
  107. data/lib/antlr4ruby/interpreter_rule_context.rb +19 -0
  108. data/lib/antlr4ruby/lexer.rb +180 -0
  109. data/lib/antlr4ruby/lexer_interpreter.rb +5 -0
  110. data/lib/antlr4ruby/list_token_source.rb +6 -0
  111. data/lib/antlr4ruby/misc/bit_set.rb +9 -0
  112. data/lib/antlr4ruby/misc/double_key_map.rb +28 -0
  113. data/lib/antlr4ruby/misc/integer_stack.rb +9 -0
  114. data/lib/antlr4ruby/misc/murmur_hash.rb +75 -0
  115. data/lib/antlr4ruby/misc/pair.rb +18 -0
  116. data/lib/antlr4ruby/misc/range_set.rb +223 -0
  117. data/lib/antlr4ruby/parser.rb +225 -0
  118. data/lib/antlr4ruby/parser_interpreter.rb +25 -0
  119. data/lib/antlr4ruby/parser_rule_context.rb +161 -0
  120. data/lib/antlr4ruby/proxy_error_listener.rb +33 -0
  121. data/lib/antlr4ruby/recognizer.rb +133 -0
  122. data/lib/antlr4ruby/rule_context.rb +109 -0
  123. data/lib/antlr4ruby/rule_context_with_alt_num.rb +22 -0
  124. data/lib/antlr4ruby/runtime_meta_data.rb +40 -0
  125. data/lib/antlr4ruby/token.rb +10 -0
  126. data/lib/antlr4ruby/token_stream_rewriter.rb +5 -0
  127. data/lib/antlr4ruby/tree/abstract_parse_tree_visitor.rb +56 -0
  128. data/lib/antlr4ruby/tree/error_node.rb +15 -0
  129. data/lib/antlr4ruby/tree/iterative_parse_tree_walker.rb +10 -0
  130. data/lib/antlr4ruby/tree/parse_tree_property.rb +6 -0
  131. data/lib/antlr4ruby/tree/parse_tree_walker.rb +38 -0
  132. data/lib/antlr4ruby/tree/terminal_node.rb +79 -0
  133. data/lib/antlr4ruby/tree/trees.rb +161 -0
  134. data/lib/antlr4ruby/unbuffered_char_stream.rb +7 -0
  135. data/lib/antlr4ruby/unbuffered_token_stream.rb +8 -0
  136. data/lib/antlr4ruby/version.rb +5 -0
  137. data/lib/antlr4ruby/vocabulary.rb +73 -0
  138. data/lib/antlr4ruby.rb +8 -0
  139. data/lib/example/Hello.g4 +9 -0
  140. data/lib/example/hello_lexer.rb +80 -0
  141. data/lib/example/hello_lexer.rbs +37 -0
  142. data/lib/main.rb +14 -0
  143. data/sig/antlr4ruby/antlr_error_listener.rbs +23 -0
  144. data/sig/antlr4ruby/antlr_error_strategy.rbs +13 -0
  145. data/sig/antlr4ruby/atn/action/lexer_action.rbs +10 -0
  146. data/sig/antlr4ruby/atn/action/lexer_action_executor.rbs +22 -0
  147. data/sig/antlr4ruby/atn/action/lexer_action_type.rbs +6 -0
  148. data/sig/antlr4ruby/atn/action/lexer_channel_action.rbs +15 -0
  149. data/sig/antlr4ruby/atn/action/lexer_custom_action.rbs +17 -0
  150. data/sig/antlr4ruby/atn/action/lexer_indexed_custom_action.rbs +19 -0
  151. data/sig/antlr4ruby/atn/action/lexer_mode_action.rbs +16 -0
  152. data/sig/antlr4ruby/atn/action/lexer_more_action.rbs +9 -0
  153. data/sig/antlr4ruby/atn/action/lexer_pop_mode_action.rbs +10 -0
  154. data/sig/antlr4ruby/atn/action/lexer_push_mode_action.rbs +16 -0
  155. data/sig/antlr4ruby/atn/action/lexer_skip_action.rbs +10 -0
  156. data/sig/antlr4ruby/atn/action/lexer_type_action.rbs +12 -0
  157. data/sig/antlr4ruby/atn/atn.rbs +32 -0
  158. data/sig/antlr4ruby/atn/atn_deserialization_options.rbs +27 -0
  159. data/sig/antlr4ruby/atn/atn_deserializer.rbs +26 -0
  160. data/sig/antlr4ruby/atn/atn_serializer.rbs +5 -0
  161. data/sig/antlr4ruby/atn/atn_simulator.rbs +19 -0
  162. data/sig/antlr4ruby/atn/atn_type.rbs +7 -0
  163. data/sig/antlr4ruby/atn/config/atn_config.rbs +21 -0
  164. data/sig/antlr4ruby/atn/config/atn_config_set.rbs +5 -0
  165. data/sig/antlr4ruby/atn/config/lexer_atn_config.rbs +19 -0
  166. data/sig/antlr4ruby/atn/config/ordered_atn_config_set.rbs +5 -0
  167. data/sig/antlr4ruby/atn/context/array_prediction_context.rbs +11 -0
  168. data/sig/antlr4ruby/atn/context/empty_prediction_context.rbs +6 -0
  169. data/sig/antlr4ruby/atn/context/prediction_context.rbs +52 -0
  170. data/sig/antlr4ruby/atn/context/prediction_context_cache.rbs +12 -0
  171. data/sig/antlr4ruby/atn/context/semantic_context.rbs +36 -0
  172. data/sig/antlr4ruby/atn/context/singleton_prediction_context.rbs +11 -0
  173. data/sig/antlr4ruby/atn/info/accept_state_info.rbs +15 -0
  174. data/sig/antlr4ruby/atn/info/ambiguity_info.rbs +8 -0
  175. data/sig/antlr4ruby/atn/info/conflict_info.rbs +16 -0
  176. data/sig/antlr4ruby/atn/info/context_sensitivity_info.rbs +5 -0
  177. data/sig/antlr4ruby/atn/info/decision_event_info.rbs +14 -0
  178. data/sig/antlr4ruby/atn/info/decision_info.rbs +29 -0
  179. data/sig/antlr4ruby/atn/info/error_info.rbs +5 -0
  180. data/sig/antlr4ruby/atn/info/lookahead_event_info.rbs +8 -0
  181. data/sig/antlr4ruby/atn/info/parse_info.rbs +8 -0
  182. data/sig/antlr4ruby/atn/info/predicate_eval_info.rbs +6 -0
  183. data/sig/antlr4ruby/atn/lexer_atn_simulator.rbs +83 -0
  184. data/sig/antlr4ruby/atn/ll1_analyzer.rbs +5 -0
  185. data/sig/antlr4ruby/atn/parser_atn_simulator.rbs +5 -0
  186. data/sig/antlr4ruby/atn/prediction_mode.rbs +6 -0
  187. data/sig/antlr4ruby/atn/profiling_atn_simulator.rbs +6 -0
  188. data/sig/antlr4ruby/atn/state/atn_state.rbs +50 -0
  189. data/sig/antlr4ruby/atn/state/basic_block_start_state.rbs +6 -0
  190. data/sig/antlr4ruby/atn/state/basic_state.rbs +7 -0
  191. data/sig/antlr4ruby/atn/state/block_end_state.rbs +7 -0
  192. data/sig/antlr4ruby/atn/state/block_start_state.rbs +8 -0
  193. data/sig/antlr4ruby/atn/state/decision_state.rbs +14 -0
  194. data/sig/antlr4ruby/atn/state/invalid_state.rbs +7 -0
  195. data/sig/antlr4ruby/atn/state/loop_end_state.rbs +7 -0
  196. data/sig/antlr4ruby/atn/state/plus_block_start_state.rbs +6 -0
  197. data/sig/antlr4ruby/atn/state/plus_loopback_state.rbs +6 -0
  198. data/sig/antlr4ruby/atn/state/rule_start_state.rbs +7 -0
  199. data/sig/antlr4ruby/atn/state/rule_stop_state.rbs +6 -0
  200. data/sig/antlr4ruby/atn/state/simulator_state.rbs +12 -0
  201. data/sig/antlr4ruby/atn/state/star_block_start_state.rbs +6 -0
  202. data/sig/antlr4ruby/atn/state/star_loop_entry_state.rbs +8 -0
  203. data/sig/antlr4ruby/atn/state/star_loopback_state.rbs +5 -0
  204. data/sig/antlr4ruby/atn/state/tokens_start_state.rbs +6 -0
  205. data/sig/antlr4ruby/atn/transition/abstract_predicate_transition.rbs +10 -0
  206. data/sig/antlr4ruby/atn/transition/action_transition.rbs +15 -0
  207. data/sig/antlr4ruby/atn/transition/atom_transition.rbs +10 -0
  208. data/sig/antlr4ruby/atn/transition/code_point_transitions.rbs +5 -0
  209. data/sig/antlr4ruby/atn/transition/epsilon_transition.rbs +12 -0
  210. data/sig/antlr4ruby/atn/transition/not_set_transition.rbs +7 -0
  211. data/sig/antlr4ruby/atn/transition/precedence_predicate_transition.rbs +10 -0
  212. data/sig/antlr4ruby/atn/transition/predicate_transition.rbs +11 -0
  213. data/sig/antlr4ruby/atn/transition/range_transition.rbs +8 -0
  214. data/sig/antlr4ruby/atn/transition/rule_transition.rbs +10 -0
  215. data/sig/antlr4ruby/atn/transition/set_transition.rbs +8 -0
  216. data/sig/antlr4ruby/atn/transition/transition.rbs +40 -0
  217. data/sig/antlr4ruby/atn/transition/wildcard_transition.rbs +5 -0
  218. data/sig/antlr4ruby/bail_error_strategy.rbs +7 -0
  219. data/sig/antlr4ruby/base_error_listener.rbs +6 -0
  220. data/sig/antlr4ruby/buffered_token_stream.rbs +48 -0
  221. data/sig/antlr4ruby/char_stream.rbs +9 -0
  222. data/sig/antlr4ruby/char_streams.rbs +14 -0
  223. data/sig/antlr4ruby/code_point_buffer.rbs +20 -0
  224. data/sig/antlr4ruby/code_point_char_stream.rbs +19 -0
  225. data/sig/antlr4ruby/common_token.rbs +35 -0
  226. data/sig/antlr4ruby/common_token_factory.rbs +12 -0
  227. data/sig/antlr4ruby/common_token_stream.rbs +9 -0
  228. data/sig/antlr4ruby/console_error_listener.rbs +6 -0
  229. data/sig/antlr4ruby/default_error_strategy.rbs +56 -0
  230. data/sig/antlr4ruby/dfa/dfa.rbs +29 -0
  231. data/sig/antlr4ruby/dfa/dfa_serializer.rbs +11 -0
  232. data/sig/antlr4ruby/dfa/dfa_state.rbs +50 -0
  233. data/sig/antlr4ruby/dfa/lexer_dfa_serializer.rbs +5 -0
  234. data/sig/antlr4ruby/diagnostic_error_listener.rbs +10 -0
  235. data/sig/antlr4ruby/exception/failed_predicate_exception.rbs +23 -0
  236. data/sig/antlr4ruby/exception/input_mismatch_exception.rbs +7 -0
  237. data/sig/antlr4ruby/exception/lexer_no_viable_alt_exception.rbs +15 -0
  238. data/sig/antlr4ruby/exception/no_viable_alt_exception.rbs +14 -0
  239. data/sig/antlr4ruby/exception/recognition_exception.rbs +30 -0
  240. data/sig/antlr4ruby/int_stream.rbs +19 -0
  241. data/sig/antlr4ruby/interpreter_rule_context.rbs +6 -0
  242. data/sig/antlr4ruby/lexer.rbs +88 -0
  243. data/sig/antlr4ruby/lexer_interpreter.rbs +5 -0
  244. data/sig/antlr4ruby/list_token_source.rbs +6 -0
  245. data/sig/antlr4ruby/misc/bit_set.rbs +6 -0
  246. data/sig/antlr4ruby/misc/double_key_map.rbs +11 -0
  247. data/sig/antlr4ruby/misc/equality_comparator.rbs +7 -0
  248. data/sig/antlr4ruby/misc/int_set.rbs +29 -0
  249. data/sig/antlr4ruby/misc/integer_stack.rbs +9 -0
  250. data/sig/antlr4ruby/misc/murmur_hash.rbs +13 -0
  251. data/sig/antlr4ruby/misc/pair.rbs +15 -0
  252. data/sig/antlr4ruby/misc/predicate.rbs +7 -0
  253. data/sig/antlr4ruby/misc/range_set.rbs +49 -0
  254. data/sig/antlr4ruby/parser.rbs +109 -0
  255. data/sig/antlr4ruby/parser_interpreter.rbs +24 -0
  256. data/sig/antlr4ruby/parser_rule_context.rbs +53 -0
  257. data/sig/antlr4ruby/proxy_error_listener.rbs +10 -0
  258. data/sig/antlr4ruby/recognizer.rbs +76 -0
  259. data/sig/antlr4ruby/rule_context.rbs +31 -0
  260. data/sig/antlr4ruby/rule_context_with_alt_num.rbs +8 -0
  261. data/sig/antlr4ruby/runtime_meta_data.rbs +12 -0
  262. data/sig/antlr4ruby/token.rbs +26 -0
  263. data/sig/antlr4ruby/token_factory.rbs +10 -0
  264. data/sig/antlr4ruby/token_source.rbs +12 -0
  265. data/sig/antlr4ruby/token_stream.rbs +13 -0
  266. data/sig/antlr4ruby/token_stream_rewriter.rbs +5 -0
  267. data/sig/antlr4ruby/tree/abstract_parse_tree_visitor.rbs +14 -0
  268. data/sig/antlr4ruby/tree/error_node.rbs +13 -0
  269. data/sig/antlr4ruby/tree/iterative_parse_tree_walker.rbs +7 -0
  270. data/sig/antlr4ruby/tree/parse_tree.rbs +21 -0
  271. data/sig/antlr4ruby/tree/parse_tree_listener.rbs +13 -0
  272. data/sig/antlr4ruby/tree/parse_tree_property.rbs +5 -0
  273. data/sig/antlr4ruby/tree/parse_tree_visitor.rbs +12 -0
  274. data/sig/antlr4ruby/tree/parse_tree_walker.rbs +12 -0
  275. data/sig/antlr4ruby/tree/rule_node.rbs +8 -0
  276. data/sig/antlr4ruby/tree/syntax_tree.rbs +8 -0
  277. data/sig/antlr4ruby/tree/terminal_node.rbs +20 -0
  278. data/sig/antlr4ruby/tree/tree.rbs +15 -0
  279. data/sig/antlr4ruby/tree/trees.rbs +32 -0
  280. data/sig/antlr4ruby/unbuffered_char_stream.rbs +6 -0
  281. data/sig/antlr4ruby/unbuffered_token_stream.rbs +6 -0
  282. data/sig/antlr4ruby/vocabulary.rbs +36 -0
  283. data/sig/antlr4ruby/writable_token.rbs +13 -0
  284. data/sig/antlr4ruby.rbs +4 -0
  285. metadata +328 -0
@@ -0,0 +1,6 @@
1
+ # 暂时先不管
2
+ module Antlr4ruby
3
+ class ListTokenSource
4
+
5
+ end
6
+ end
@@ -0,0 +1,9 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Antlr4ruby
4
+
5
+ class BitSet
6
+ end
7
+ end
8
+
9
+
@@ -0,0 +1,28 @@
1
+ # frozen_string_literal: true
2
+
3
+
4
+
5
+ module Antlr4ruby
6
+ class DoubleKeyMap
7
+
8
+ private
9
+ attr_accessor :data
10
+
11
+ public
12
+ def put(key1, key2, value)
13
+ data[key1] = {} unless data.has_key?(key1)
14
+ sub_data = data[key1]
15
+ prev = sub_data[key2]
16
+ sub_data[key2] = value
17
+ prev
18
+ end
19
+
20
+ def get(key1, key2)
21
+ sub_data = data[key1]
22
+ return nil unless sub_data
23
+ sub_data[key2]
24
+ end
25
+
26
+
27
+ end
28
+ end
@@ -0,0 +1,9 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Antlr4ruby
4
+
5
+ class IntegerStack
6
+ end
7
+ end
8
+
9
+
@@ -0,0 +1,75 @@
1
+ # finished
2
+ # frozen_string_literal: true
3
+
4
+ module Antlr4ruby
5
+ class MurmurHash
6
+ DEFAULT_SEED = 0
7
+
8
+ def initialize
9
+ raise "不能实例化 #{self.class.name}."
10
+ end
11
+
12
+ class << self
13
+ def init(seed = DEFAULT_SEED) seed; end
14
+ def update(hash, value)
15
+ v = value.hash
16
+ # 首先判断 hash 是否在 32 位整数所能够表达的范围内, 貌似超出范围也无所谓
17
+ # raise "hash 值超出范围" if v < -2147483648 || v > 2147483647
18
+
19
+ c1 = 0xCC9E2D51
20
+ c2 = 0x1B873593
21
+ r1 = 15
22
+ r2 = 13
23
+ m = 5
24
+ n = 0xE6546B64
25
+ mask = 0xffffffff
26
+
27
+ v = (v * c1) & mask # 通过 & 0xffffffff 可以将有符号数转换为无符号
28
+ v = ((v << r1) | (v >> (32 - r1))) & mask
29
+ v = (v * c2) & mask
30
+
31
+ hash = (hash ^ v) & mask
32
+ hash = ((hash << r2) | hash >> (32 - r2)) & mask
33
+
34
+ # 减去 4294967296 是为了将无符号数再次转换回有符号数
35
+ hash = ((hash * m + n) & mask)
36
+ if hash > 2147483647
37
+ hash - 4294967296
38
+ else
39
+ hash
40
+ end
41
+ end
42
+
43
+ def finish(hash, number_of_words)
44
+ mask = 0xffffffff
45
+ hash &= mask; number_of_words &= mask
46
+
47
+ hash = (hash ^ (number_of_words << 2)) & mask
48
+ hash = (hash ^ (hash >> 16)) & mask
49
+ hash = (hash * 0x85EBCA6B) & mask
50
+ hash = (hash ^ (hash >> 13)) & mask
51
+ hash = (hash * 0xC2B2AE35) & mask
52
+ hash = (hash ^ (hash >> 16)) & mask
53
+ if hash > 2147483647
54
+ hash - 4294967296
55
+ else
56
+ hash
57
+ end
58
+ end
59
+
60
+ def hash(data, seed)
61
+ hash = init(seed)
62
+ data.each do |value|
63
+ hash = update(hash, value)
64
+ end
65
+
66
+ finish(hash, data.length)
67
+ end
68
+
69
+
70
+
71
+
72
+ end
73
+ end
74
+
75
+ end
@@ -0,0 +1,18 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Antlr4ruby
4
+
5
+ class Pair
6
+
7
+ attr_accessor :first, :second
8
+
9
+ def initialize(a, b)
10
+ super()
11
+ @first, @second = a, b
12
+ end
13
+
14
+ # todo equals hash to_s
15
+
16
+ end
17
+ end
18
+
@@ -0,0 +1,223 @@
1
+ # frozen_string_literal: true
2
+ # 使用 RangeSet 来代替原来的 IntervalSet
3
+
4
+ module Antlr4ruby
5
+ class RangeSet
6
+ attr_accessor :data
7
+
8
+ def initialize(data = [])
9
+ @data = data
10
+ end
11
+
12
+ def clear
13
+ data.clear
14
+ end
15
+
16
+ def add(range)
17
+ i = 0
18
+ result = []
19
+ while i < data.length
20
+ a = data[i]
21
+ if a.min > range.max + 1
22
+ break
23
+ elsif a.max < range.min - 1
24
+ result << a; i += 1; next
25
+ else
26
+ # 直接将 a 合并到 range 里面
27
+ start = a.min < range.min ? a.min : range.min
28
+ stop = a.max > range.max ? a.max : range.max
29
+ range = start..stop; i += 1
30
+ end
31
+ end
32
+
33
+ result << range
34
+ while i < data.length
35
+ result << data[i]; i += 1
36
+ end
37
+
38
+
39
+ @data = result
40
+ end
41
+
42
+ def + (other)
43
+ # other_data = other.data.reverse
44
+ # range = other_data.pop
45
+ # i = 0
46
+ # result = []
47
+ # while range && i < data.length
48
+ # a = data[i]
49
+ # if a.min > range.max + 1
50
+ # new_range = other_data.pop
51
+ # result << range; range = other_data.pop
52
+ # elsif a.max < range.min - 1
53
+ # result << a; i += 1
54
+ # else
55
+ # # 直接将 a 合并到 range 里面
56
+ # start = a.min < range.min ? a.min : range.min
57
+ # stop = a.max > range.max ? a.max : range.max
58
+ # range = start..stop; i += 1
59
+ # end
60
+ #
61
+ # end
62
+ #
63
+ # result << range if range
64
+ # while i < data.length
65
+ # result << data[i]; i += 1
66
+ # end
67
+ #
68
+ # while other_data.length > 0
69
+ # result << other_data.pop
70
+ # end
71
+ # RangeSet.new(result)
72
+ #
73
+ result = self.clone
74
+ other.data.each { |item| result.add(item) }
75
+ result
76
+ end
77
+
78
+ def | (other)
79
+ self + other
80
+ end
81
+
82
+ def & (other)
83
+ result = []
84
+ i, j = 0, 0
85
+
86
+ while i < data.length && j < other.data.length
87
+ while j < other.data.length && data[i].min > other.data[j].max
88
+ j += 1
89
+ end
90
+ break if j >= other.data.length
91
+ while i < data.length && other.data[j].min > data[i].max
92
+ i += 1
93
+ end
94
+ break if i >= data.length
95
+
96
+
97
+ a, b = data[i], other.data[j]
98
+ if a.cover?(b)
99
+ result << b; j += 1
100
+ elsif b.cover?(a)
101
+ result << a; i += 1
102
+ elsif a.include?(b.min)
103
+ result << (b.min..a.max); i += 1
104
+ elsif b.include?(a.min)
105
+ result << (a.min..b.max); j += 1
106
+
107
+ end
108
+ end
109
+
110
+ RangeSet.new(result)
111
+ # other.data.each do |a|
112
+ # data.each do |b|
113
+ # next if a.min > b.max || a.max < b.min
114
+ # if a.cover?(b)
115
+ # result.push(b)
116
+ # elsif b.cover?(a)
117
+ # result.push(a)
118
+ # else
119
+ # start = a.min > b.min ? a.min : b.min
120
+ # stop = a.max < b.max ? a.max : b.max
121
+ # result.push(start..stop)
122
+ # end
123
+ # end
124
+ # end
125
+ # RangeSet.new(result)
126
+ end
127
+
128
+ def add_all(ranges)
129
+ other_data = ranges.instance_of?(RangeSet) ? ranges.data : ranges
130
+ other_data.each do |item|
131
+ add(item)
132
+ end
133
+ end
134
+
135
+ def delete(range)
136
+ result = []
137
+ data.each do |item|
138
+ next if range.cover?(item)
139
+ result.push(item.min...range.min) if item.include?(range.min) && range.min > item.min
140
+ result.push(range.max + 1..item.max) if item.include?(range.max) && range.max < item.max
141
+ result.push(item) if item.max < range.min || item.min > range.max
142
+ end
143
+
144
+ @data = result
145
+ end
146
+
147
+ def delete_all(ranges)
148
+ other_data = ranges.instance_of?(RangeSet) ? ranges.data : ranges
149
+ other_data.each do |item|
150
+ delete(item)
151
+ end
152
+ end
153
+
154
+ def - (other)
155
+ result = self.clone
156
+ other.data.each { |item| result.delete(item) }
157
+ result
158
+ end
159
+
160
+ def complement(total)
161
+ total - self
162
+ end
163
+
164
+ def nil?
165
+ data.empty?
166
+ end
167
+
168
+ def empty?
169
+ data.empty?
170
+ end
171
+
172
+ def include?(n)
173
+ data.each { |item| return true if item.include?(n) }
174
+ false
175
+ end
176
+
177
+ def cover?(range)
178
+ data.each do |item|
179
+ return true if item.cover?(range)
180
+ end
181
+ false
182
+ end
183
+
184
+ def start
185
+ nil if empty?
186
+ data.sort! do |a, b|
187
+ a.min == b.min ? a.max <=> b.max : a.min <=> b.min
188
+ end
189
+
190
+ data[0].min
191
+ end
192
+
193
+ def stop
194
+ nil if empty?
195
+ data.sort! do |a, b|
196
+ a.min == b.min ? a.max <=> b.max : a.min <=> b.min
197
+ end
198
+ data[-1].max
199
+ end
200
+
201
+ def to_a
202
+ @data
203
+ end
204
+
205
+ def to_set
206
+ data.to_set
207
+ end
208
+
209
+ def eql?(other)
210
+ return false if !other || data.length != other.data.length
211
+ data.length.times do |i|
212
+ return false unless data[i].eql?(other.data[i])
213
+ end
214
+ true
215
+ end
216
+
217
+ def == (other)
218
+ self.eql?(other)
219
+ end
220
+
221
+ end
222
+ end
223
+
@@ -0,0 +1,225 @@
1
+
2
+ module Antlr4ruby
3
+ class Parser < Recognizer
4
+ def initialize(input)
5
+ super()
6
+ set_input_stream(input)
7
+ end
8
+
9
+ private
10
+ attr_accessor :bypass_alt_atn_cache
11
+
12
+ protected
13
+ attr_accessor :err_handler, :input, :ctx,
14
+ :build_parse_trees, :parse_listeners, :syntax_errors, :matched_eof
15
+ attr_reader :precedence_stack
16
+
17
+ def trigger_enter_rule_event
18
+ # todo
19
+ end
20
+
21
+ def trigger_exit_rule_event
22
+ # todo
23
+ end
24
+
25
+ public
26
+ def reset
27
+ # todo
28
+ end
29
+
30
+ def match(token_type)
31
+ # todo
32
+ end
33
+
34
+ def match_wildcard
35
+ # todo
36
+ end
37
+
38
+ def set_build_parse_tree(build_parse_trees)
39
+ @build_parse_trees = build_parse_trees
40
+ end
41
+
42
+ def get_build_parse_tree
43
+ @build_parse_trees
44
+ end
45
+
46
+ # 不要 set_trim_parse_tree get_trim_parse_tree
47
+
48
+ def get_parse_listeners
49
+ # todo
50
+ end
51
+
52
+ def add_parse_listener(listener)
53
+ # todo
54
+ end
55
+
56
+ def remove_parse_listener(listener)
57
+ # todo
58
+ end
59
+
60
+ def remove_parse_listeners
61
+ listeners.clear
62
+ end
63
+
64
+ def get_syntax_error_count
65
+ @syntax_errors
66
+ end
67
+
68
+ def get_token_factory
69
+ input.get_token_source.get_token_factory
70
+ end
71
+
72
+ def set_token_factory(factory)
73
+ input.get_token_source.set_token_factory(factory)
74
+ end
75
+
76
+ def get_atn_with_bypass_alts
77
+ # todo
78
+ end
79
+
80
+ # compile_parse_tree_pattern 不要
81
+
82
+ def get_error_handler
83
+ @err_handler
84
+ end
85
+
86
+ def set_error_handler(handler)
87
+ @err_handler = handler
88
+ end
89
+
90
+ def get_token_stream
91
+ @input
92
+ end
93
+
94
+ def get_input_stream
95
+ get_token_stream
96
+ end
97
+
98
+ def set_token_stream(input)
99
+ @input = nil
100
+ reset
101
+ @input = input
102
+ end
103
+
104
+ def set_input_stream(input)
105
+ set_token_stream(input)
106
+ end
107
+
108
+ def get_current_token
109
+ input.lt(1)
110
+ end
111
+
112
+ def notify_error_listeners(msg, token, e)
113
+ unless token
114
+ token = get_current_token
115
+ end
116
+ # todo
117
+ end
118
+
119
+ def consume
120
+ # todo
121
+ end
122
+
123
+ def create_terminal_node(parent, token)
124
+ # todo
125
+ end
126
+
127
+ def add_contex_to_parse_tree
128
+ # todo
129
+ end
130
+
131
+ def enter_rule(localctx, state, rule_index)
132
+ # todo
133
+ end
134
+
135
+ # 不要 enterOuterAlt
136
+
137
+ def get_precedence
138
+ # todo
139
+ end
140
+
141
+ def enter_recursion_rule(localctx, state, rule_index, precedence)
142
+ # todo
143
+ end
144
+
145
+ def push_new_recursion_context(localctx, state, rule_index)
146
+ # todo
147
+ end
148
+
149
+ def unroll_recursion_contexts(parent)
150
+ # todo
151
+ end
152
+
153
+ def get_invoking_context(rule_index)
154
+ # todo
155
+ end
156
+
157
+ def get_context
158
+ @ctx
159
+ end
160
+
161
+ def set_context(ctx)
162
+ @ctx = ctx
163
+ end
164
+
165
+ def precpred(localctx, precedence)
166
+ # todo
167
+ # precedence >= @precedence_stack.peek()
168
+ end
169
+
170
+ # 不要 in_context
171
+
172
+ def is_expected_token(symbol)
173
+ # todo
174
+ end
175
+
176
+ def is_matched_eof?
177
+ @matched_eof
178
+ end
179
+
180
+ def get_expected_tokens
181
+ # todo
182
+ end
183
+
184
+ def get_expected_tokens_within_current_rule
185
+ # todo
186
+ end
187
+
188
+ def get_rule_index(rule_name)
189
+ # todo
190
+ end
191
+
192
+ def get_rule_context
193
+ @ctx
194
+ end
195
+
196
+ def get_rule_invocation_stack(rule_context)
197
+ # rule_context = rule_context || ctx
198
+ # todo
199
+ end
200
+
201
+ def get_dfa_strings
202
+ # todo
203
+ end
204
+
205
+ def dump_dfa
206
+ # todo
207
+ end
208
+
209
+ def get_source_name
210
+ input.get_source_name
211
+ end
212
+
213
+ def get_parse_info
214
+ # todo
215
+ end
216
+
217
+ def set_profile(profile)
218
+ # todo
219
+ end
220
+
221
+
222
+
223
+
224
+ end
225
+ end
@@ -0,0 +1,25 @@
1
+
2
+ module Antlr4ruby
3
+ class ParserInterpreter < Parser
4
+ def initialize(grammar_file_name, vocabulary, rule_names, atn, input)
5
+ super(input)
6
+ @grammar_file_name, @atn, @rule_names, @vocabulary, = grammar_file_name, atn, rule_names, vocabulary
7
+ # number_of_decisions = todo
8
+ end
9
+
10
+ protected
11
+ attr_reader :grammar_file_name, :atn, :decision_to_dfa, :shared_context_cache,
12
+ :rule_names, :parent_context_stack
13
+
14
+ attr_accessor :override_decision, :override_decision_input_index, :override_decision_alt,
15
+ :override_decision_reached, :override_decision_root, :root_context
16
+ private
17
+ attr_reader :vocabulary
18
+
19
+ public
20
+ # def reset
21
+ #
22
+ # end
23
+
24
+ end
25
+ end