antlr4ruby 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
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