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,79 @@
1
+ # frozen_string_literal: true
2
+ # 已完成
3
+
4
+ module Antlr4ruby
5
+
6
+ class TerminalNode
7
+ attr_accessor :symbol, :parent
8
+
9
+ def initialize(symbol)
10
+ super()
11
+ @symbol = symbol
12
+ end
13
+
14
+ # @!override
15
+ def get_child(i)
16
+ nil
17
+ end
18
+
19
+ # @!override
20
+ def get_symbol
21
+ @symbol
22
+ end
23
+
24
+ def get_parent
25
+ @parent
26
+ end
27
+
28
+ # @!override
29
+ def set_parent(parent)
30
+ @parent = parent
31
+ end
32
+
33
+ # @!override
34
+ def get_payload
35
+ @symbol
36
+ end
37
+
38
+ # @!override
39
+ def get_source_interval
40
+ unless @symbol
41
+ return (-1)..(-2)
42
+ end
43
+ token_index = self.symbol.get_token_index
44
+ token_index..token_index
45
+ end
46
+
47
+ # @override
48
+ def get_child_count
49
+ 0
50
+ end
51
+
52
+ # @override
53
+ def accept(visitor)
54
+ visitor.visit_terminal(self)
55
+ end
56
+
57
+ # @override
58
+ def get_text
59
+ self.symbol.get_text
60
+ end
61
+
62
+ # @override
63
+ def to_string_tree(recognizer: nil, rule_names: [])
64
+ self.to_s
65
+ end
66
+
67
+ # @override
68
+ def to_s
69
+ if @symbol.get_type == Token::EOF
70
+ return '<EOF>'
71
+ end
72
+ self.symbol.get_text
73
+ end
74
+
75
+ end
76
+ end
77
+
78
+
79
+
@@ -0,0 +1,161 @@
1
+ # 已完成
2
+
3
+ module Antlr4ruby
4
+
5
+ class Trees
6
+
7
+ class << self
8
+ def to_string_tree(tree, recognizer: nil, rule_names: [])
9
+ rule_names = recognizer.get_rule_names if recognizer
10
+ # todo 转义处理
11
+ s = get_node_text(tree, rule_names: rule_names)
12
+ return s if tree.get_child_count <= 0
13
+ tree.get_child_count.times do |i|
14
+ child = tree.get_child(i)
15
+ s += ' ' + to_string_tree(child, rule_names: rule_names) if child
16
+ end
17
+ "(#{s})"
18
+ end
19
+
20
+ def get_node_text(tree, recognizer: nil, rule_names: [])
21
+
22
+ rule_names = recognizer.get_rule_names if recognizer
23
+ if tree.instance_of?(RuleContext)
24
+ rule_index = tree.get_rule_context.get_rule_index
25
+ return rule_names[rule_index]
26
+ elsif tree.instance_of?(ErrorNode)
27
+ return tree.to_s
28
+ elsif tree.instance_of?(TerminalNode)
29
+ symbol = tree.get_symbol
30
+ return symbol.get_text if symbol
31
+ end
32
+ tree.get_payload.to_s
33
+ end
34
+
35
+ def get_children(tree)
36
+ kids = []
37
+ tree.get_child_count.times do |i|
38
+ kids.push(tree.get_child(i))
39
+ end
40
+ kids
41
+ end
42
+
43
+ def get_ancestors(tree)
44
+ return [] if tree.get_parent == nil
45
+ ancestors = []
46
+ tree = tree.get_parent
47
+ while tree
48
+ ancestors.push(tree)
49
+ tree = tree.get_parent
50
+ end
51
+ ancestors
52
+ end
53
+
54
+ def is_ancestor_of?(t, u)
55
+ return false if t == nil || u == nil || t.get_parent == nil
56
+ p = u.get_parent
57
+ while p
58
+ return true if t.equal?(p)
59
+ p = p.get_parent
60
+ end
61
+ false
62
+ end
63
+
64
+ def find_all_token_nodes(t, token_type)
65
+ find_all_nodes(t, token_type, true)
66
+ end
67
+
68
+ def find_all_rule_nodes(t, rule_index)
69
+ find_all_nodes(t, rule_index, false)
70
+ end
71
+
72
+ def find_all_nodes(t, index, find_tokens)
73
+ nodes = []
74
+ _find_all_nodes(t, index, find_tokens, nodes)
75
+ nodes
76
+ end
77
+
78
+ def _find_all_nodes(t, index, find_tokens, nodes)
79
+ if find_tokens && t.instance_of?(TerminalNode)
80
+ nodes.push(t) if t.get_symbol.get_type == index
81
+ elsif !find_tokens && t.instance_of?(ParserRuleContext)
82
+ nodes.push(t) if t.get_rule_index == index
83
+ end
84
+
85
+ t.get_child_count.times do |i|
86
+ child = t.get_child(i)
87
+ _find_all_nodes(child, index, find_tokens, nodes) if child
88
+ end
89
+ end
90
+
91
+ def get_descendants(t)
92
+ nodes = [t]
93
+ n = t.get_child_count
94
+ n.times do |i|
95
+ child = t.get_child(i)
96
+ nodes.push(*get_descendants(child)) if child
97
+ end
98
+ nodes
99
+ end
100
+
101
+ def get_root_of_subtree_enclosing_region(t, start_token_index, stop_token_index)
102
+ n = t.get_child_count
103
+ n.times do |i|
104
+ child = t.get_child(i)
105
+ if child
106
+ r = get_root_of_subtree_enclosing_region(child, start_token_index, stop_token_index)
107
+ return r if r
108
+ end
109
+
110
+ end
111
+ if t.instance_of?(ParserRuleContext)
112
+ return t if start_token_index >= t.get_start.get_token_index && (t.get_stop == nil || stop_token_index <= t.get_stop.get_token_index)
113
+ end
114
+ nil
115
+ end
116
+
117
+ def strip_children_out_of_range(t, root, start_index, stop_index)
118
+ if t == nil
119
+ return
120
+ end
121
+
122
+ t.get_child_count.times do |i|
123
+ child = t.get_child(i, nil )
124
+ if child and child.instance_of?(ParserRuleContext)
125
+ range = child.get_source_interval
126
+ if (range.first < start_index || range.last > stop_index) && is_ancestor_of?(child, root)
127
+ abbrev = CommonToken.new(type: Token::INVALID_TYPE, text: '...')
128
+ t.children[i] = TerminalNode.new(abbrev)
129
+ end
130
+ end
131
+
132
+ end
133
+ end
134
+
135
+ def find_node_such_that(t, pred)
136
+ if pred.test(t)
137
+ return t
138
+ end
139
+
140
+ unless t
141
+ return nil
142
+ end
143
+
144
+ n = t.get_child_count
145
+ n.times do |i|
146
+ u = find_node_such_that(t.get_child(i), pred)
147
+ if u
148
+ return u
149
+ end
150
+ end
151
+ nil
152
+
153
+ end
154
+
155
+ end
156
+
157
+ end
158
+
159
+ end
160
+
161
+
@@ -0,0 +1,7 @@
1
+ # 似乎用不上
2
+
3
+ module Antlr4ruby
4
+ class UnbufferedCharStream
5
+
6
+ end
7
+ end
@@ -0,0 +1,8 @@
1
+ # 似乎用不上
2
+
3
+
4
+ module Antlr4ruby
5
+ class UnbufferedTokenStream
6
+
7
+ end
8
+ end
@@ -0,0 +1,5 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Antlr4ruby
4
+ VERSION = "0.1.0"
5
+ end
@@ -0,0 +1,73 @@
1
+ # frozen_string_literal: true
2
+ # 已完成
3
+
4
+ module Antlr4ruby
5
+
6
+ class Vocabulary
7
+ def initialize(literal_names, symbolic_names, display_names = [])
8
+ super()
9
+ @literal_names = literal_names || EMPTY_NAMES
10
+ @symbolic_names = symbolic_names || EMPTY_NAMES
11
+ @display_names = display_names || EMPTY_NAMES
12
+ longer = literal_names.length > symbolic_names.length ? literal_names.length : symbolic_names.length
13
+ @max_token_type = (longer > @display_names.length ? longer : @display_names.length) - 1
14
+ end
15
+
16
+
17
+ private
18
+ EMPTY_NAMES = [].freeze
19
+
20
+ attr_reader :literal_names, :symbolic_names,
21
+ :display_names, :max_token_type
22
+
23
+ public
24
+ EMPTY_VOCABULARY = Vocabulary.new(EMPTY_NAMES, EMPTY_NAMES, EMPTY_NAMES)
25
+
26
+ def get_literal_name(token_type)
27
+ @literal_names[token_type]
28
+ end
29
+
30
+ def get_symbolic_name(token_type)
31
+ return 'EOF' if token_type == Token::EOF
32
+
33
+ @symbolic_names[token_type]
34
+ end
35
+
36
+ def get_display_name(token_type)
37
+ @display_names[token_type] || get_literal_name(token_type) || get_symbolic_name(token_type) || token_type.to_s
38
+ end
39
+
40
+ def get_max_token_type
41
+ @max_token_type
42
+ end
43
+
44
+
45
+
46
+ class << self
47
+ def from_token_names(token_names)
48
+ return EMPTY_VOCABULARY if !token_names || (token_names.length <= 0)
49
+
50
+ literal_names = token_names.clone
51
+ symbolic_names = token_names.clone
52
+ (0..token_names.length).each do |i|
53
+ token_name = token_names[i]
54
+ next unless token_name
55
+
56
+ unless token_name.empty?
57
+ case token_name[0]
58
+ when '\''
59
+ symbolic_names[i] = nil
60
+ next
61
+ when /[A-Z]+/
62
+ literal_names[i] = nil
63
+ next
64
+ end
65
+ end
66
+ literal_names[i] = nil
67
+ symbolic_names[i] = nil
68
+ end
69
+ Vocabulary.new(literal_names, symbolic_names, token_names)
70
+ end
71
+ end
72
+ end
73
+ end
data/lib/antlr4ruby.rb ADDED
@@ -0,0 +1,8 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "antlr4ruby/version"
4
+
5
+ module Antlr4ruby
6
+ class Error < StandardError; end
7
+ # Your code goes here...
8
+ end
@@ -0,0 +1,9 @@
1
+ lexer grammar Hello;
2
+
3
+ fragment Digit: [0-9];
4
+ fragment Letter: [a-zA-Z];
5
+ ID: Letter (Digit | Letter)*;
6
+ NUMBER: Digit + ;
7
+
8
+
9
+
@@ -0,0 +1,80 @@
1
+ =begin
2
+ 版本(ANTLR Version): 4.11.1
3
+ 语法(Grammar): Hello.g4
4
+ =end
5
+
6
+
7
+ require 'antlr4ruby/lexer'
8
+ require 'antlr4ruby/vocabulary'
9
+ require 'antlr4ruby/atn/atn_deserializer'
10
+ include Antlr4ruby
11
+
12
+ # todo LexerATNSimulator Lexer ATN PredictionContextCache DFA
13
+ class HelloLexer < Lexer
14
+ def initialize(input)
15
+ super(input)
16
+ @interpreter = LexerATNSimulator.new(self, @atn, @decision_to_dfa, @shared_context_cache)
17
+ end
18
+
19
+ ID=1, NUMBER=2, WS=3
20
+ @@channel_names = %w[DEFAULT_TOKEN_CHANNEL HIDDEN]
21
+
22
+ @@mode_names = [
23
+ "DEFAULT_MODE"
24
+ ]
25
+
26
+ @@rule_names = %w[Digit Letter ID NUMBER WS]
27
+
28
+ LITERAL_NAMES = []
29
+ SYMBOLIC_NAMES = [nil, "ID", "NUMBER", "WS"]
30
+ VOCABULARY = Vocabulary.new(LITERAL_NAMES, SYMBOLIC_NAMES);
31
+
32
+ def get_vocabulary
33
+ VOCABULARY
34
+ end
35
+
36
+
37
+ def get_grammar_file_name
38
+ "Hello.g4"
39
+ end
40
+
41
+ def get_rule_names
42
+ @@rule_names
43
+ end
44
+
45
+ def get_serialized_atn
46
+ @@serialized_atn
47
+ end
48
+
49
+ def get_channel_names
50
+ @@channel_names
51
+ end
52
+
53
+ def get_mode_names
54
+ @@mode_names
55
+ end
56
+
57
+ def get_atn
58
+ @@atn
59
+ end
60
+
61
+ @@serialized_atn = [4,0,3,32,6,-1,2,0,7,0,2,1,7,1,2,2,7,2,2,3,7,3,2,4,
62
+ 7,4,1,0,1,0,1,1,1,1,1,2,1,2,1,2,5,2,19,8,2,10,2,12,2,22,9,2,1,3,4,3,25,
63
+ 8,3,11,3,12,3,26,1,4,1,4,1,4,1,4,0,0,5,1,0,3,0,5,1,7,2,9,3,1,0,3,1,0,48,
64
+ 57,2,0,65,90,97,122,3,0,9,10,13,13,32,32,32,0,5,1,0,0,0,0,7,1,0,0,0,0,
65
+ 9,1,0,0,0,1,11,1,0,0,0,3,13,1,0,0,0,5,15,1,0,0,0,7,24,1,0,0,0,9,28,1,0,
66
+ 0,0,11,12,7,0,0,0,12,2,1,0,0,0,13,14,7,1,0,0,14,4,1,0,0,0,15,20,3,3,1,
67
+ 0,16,19,3,1,0,0,17,19,3,3,1,0,18,16,1,0,0,0,18,17,1,0,0,0,19,22,1,0,0,
68
+ 0,20,18,1,0,0,0,20,21,1,0,0,0,21,6,1,0,0,0,22,20,1,0,0,0,23,25,3,1,0,0,
69
+ 24,23,1,0,0,0,25,26,1,0,0,0,26,24,1,0,0,0,26,27,1,0,0,0,27,8,1,0,0,0,28,
70
+ 29,7,2,0,0,29,30,1,0,0,0,30,31,6,4,0,0,31,10,1,0,0,0,4,0,18,20,26,1,6,
71
+ 0,0]
72
+ @@atn = ATNDeserializer.new.deserialize(@@serialized_atn)
73
+
74
+
75
+ protected
76
+ @@decision_to_dfa = (0...@@atn.get_number_of_decisions).map { |i| DFA.new(@@atn.get_decision_state(i), i) }
77
+ @@shared_context_cache = PredictionContextCache.new
78
+
79
+ end
80
+
@@ -0,0 +1,37 @@
1
+ class HelloLexer < Antlr4ruby::Lexer
2
+ Id: Integer
3
+ ID: Integer
4
+ LITERAL_NAMES: Array[String]
5
+ NUMBER: Integer
6
+ Number: Integer
7
+
8
+ SYMBOLIC_NAMES: Array[String]
9
+
10
+ VOCABULARY: Antlr4ruby::Vocabulary
11
+
12
+ WS: Integer
13
+
14
+ @@atn: Antlr4ruby::ATN
15
+ @@channel_names: Array[String]
16
+ @@decision_to_dfa: Array[Antlr4ruby::DFA]
17
+ @@mode_names: Array[String]
18
+ @@rule_names: Array[String]
19
+
20
+ @@serialized_atn: Array[Integer]
21
+
22
+ @@shared_context_cache: Antlr4ruby::PredictionContextCache
23
+
24
+ def get_atn: -> Antlr4ruby::ATN
25
+
26
+ def get_channel_names: -> Array[String]
27
+
28
+ def get_grammar_file_name: -> String
29
+
30
+ def get_mode_names: -> Array[String]
31
+
32
+ def get_rule_names: -> Array[String]
33
+
34
+ def get_serialized_atn: -> Array[Integer]
35
+
36
+ def get_vocabulary: -> Antlr4ruby::Vocabulary
37
+ end
data/lib/main.rb ADDED
@@ -0,0 +1,14 @@
1
+ require 'antlr4ruby/common_token_stream'
2
+ require 'antlr4ruby/char_streams'
3
+ require 'example/hello_lexer'
4
+
5
+ include Antlr4ruby
6
+
7
+ stream = CharStreams.from_string('hello world 123456 ____123___ 89231 GH')
8
+ lexer = HelloLexer.new(stream)
9
+ tokens = CommonTokenStream.new(lexer)
10
+ tokens.get_number_of_on_channel_tokens.times do |i|
11
+ p tokens.get(i)
12
+ end
13
+
14
+
@@ -0,0 +1,23 @@
1
+ # 已完成
2
+
3
+ module Antlr4ruby
4
+ interface _ANTLRErrorListener
5
+ def syntax_error: (
6
+ Recognizer[untyped, untyped], Object, Integer, Integer, String, RecognitionException
7
+ ) -> void
8
+
9
+ # 后面这些看情况取舍
10
+ def report_ambiguity: (
11
+ Parser, DFA, Integer, Integer, bool, BitSet, ATNConfigSet
12
+ ) -> void
13
+
14
+ def report_attempting_full_context: (
15
+ Parser, DFA, Integer, Integer, BitSet, ATNConfigSet
16
+ ) -> void
17
+
18
+ def report_context_sensitivity: (
19
+ Parser, DFA, Integer, Integer, Integer, ATNConfigSet
20
+ ) -> void
21
+ end
22
+ end
23
+
@@ -0,0 +1,13 @@
1
+ # 已完成
2
+
3
+ module Antlr4ruby
4
+ interface _ANTLRErrorStrategy
5
+ def reset: (Parser) -> void
6
+ def recover_in_line:(Parser) -> _Token
7
+ def recover: (Parser, RecognitionException) -> void
8
+ def sync: (Parser) -> void
9
+ def in_error_recovery_mode: (Parser) -> bool
10
+ def report_match: (Parser) -> void
11
+ def report_error: (Parser, RecognitionException) -> void
12
+ end
13
+ end
@@ -0,0 +1,10 @@
1
+ module Antlr4ruby
2
+
3
+ interface _LexerAction
4
+ def get_action_type: -> Symbol
5
+
6
+ def is_position_dependent: -> bool
7
+
8
+ def execute: (Lexer) -> void
9
+ end
10
+ end
@@ -0,0 +1,22 @@
1
+ module Antlr4ruby
2
+
3
+ class LexerActionExecutor
4
+ def self.append: (LexerActionExecutor, _LexerAction) -> LexerActionExecutor
5
+
6
+ attr_reader hash_code: Integer
7
+
8
+ def initialize: (Array[_LexerAction]) -> void
9
+
10
+ def execute: (Lexer, _CharStream, Integer) -> void
11
+
12
+ def fix_offset_before_match: (Integer) -> LexerActionExecutor
13
+
14
+ def get_lexer_actions: -> Array[_LexerAction]
15
+
16
+ # def execute: () -> void
17
+
18
+ private
19
+
20
+ attr_reader lexer_actions: Array[_LexerAction]
21
+ end
22
+ end
@@ -0,0 +1,6 @@
1
+ module Antlr4ruby
2
+
3
+ class LexerActionType
4
+ # todo
5
+ end
6
+ end
@@ -0,0 +1,15 @@
1
+ module Antlr4ruby
2
+
3
+ # @final 实现接口 LexerAction
4
+ class LexerChannelAction
5
+ include _LexerAction
6
+
7
+ def initialize: (Integer) -> void
8
+
9
+ def get_channel: -> Integer
10
+
11
+ private
12
+
13
+ attr_reader channel: Integer
14
+ end
15
+ end
@@ -0,0 +1,17 @@
1
+ module Antlr4ruby
2
+
3
+ # @final LexerAction
4
+ class LexerCustomAction
5
+ include _LexerAction
6
+
7
+ attr_reader action_index: Integer
8
+
9
+ def get_action_index: -> Integer
10
+
11
+ def get_rule_index: -> Integer
12
+
13
+ private
14
+
15
+ attr_reader rule_index: Integer
16
+ end
17
+ end
@@ -0,0 +1,19 @@
1
+ module Antlr4ruby
2
+
3
+ # @final LexerAction
4
+ class LexerIndexedCustomAction
5
+ include _LexerAction
6
+
7
+ def initialize: (Integer, _LexerAction) -> void
8
+
9
+ attr_reader action: _LexerAction
10
+
11
+ def get_action: -> _LexerAction
12
+
13
+ def get_offset: -> Integer
14
+
15
+ private
16
+
17
+ attr_reader offset: Integer
18
+ end
19
+ end
@@ -0,0 +1,16 @@
1
+ module Antlr4ruby
2
+
3
+ # @final LexerAction
4
+ class LexerModeAction
5
+ include _LexerAction
6
+
7
+ def initialize: (Integer) -> void
8
+
9
+ def get_mode: -> Integer
10
+
11
+ private
12
+
13
+ attr_reader mode: Integer
14
+ end
15
+
16
+ end
@@ -0,0 +1,9 @@
1
+ module Antlr4ruby
2
+
3
+ # @final LexerAction
4
+ class LexerMoreAction
5
+ INSTANCE: LexerMoreAction
6
+
7
+ include _LexerAction
8
+ end
9
+ end
@@ -0,0 +1,10 @@
1
+ module Antlr4ruby
2
+
3
+ # @final LexerAction
4
+ class LexerPopModeAction
5
+ INSTANCE: LexerPopModeAction
6
+
7
+ include _LexerAction
8
+ end
9
+
10
+ end
@@ -0,0 +1,16 @@
1
+ module Antlr4ruby
2
+
3
+ # @final LexerAction
4
+ class LexerPushModeAction
5
+ include _LexerAction
6
+
7
+ def initialize: (Integer) -> void
8
+
9
+ def get_mode: -> Integer
10
+
11
+ private
12
+
13
+ attr_reader mode: Integer
14
+ end
15
+
16
+ end
@@ -0,0 +1,10 @@
1
+ module Antlr4ruby
2
+
3
+ # @final LexerAction
4
+ class LexerSkipAction
5
+ INSTANCE: LexerSkipAction
6
+
7
+ include _LexerAction
8
+ end
9
+
10
+ end