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,42 @@
1
+ module Antlr4ruby
2
+
3
+ class LexerTypeAction
4
+
5
+ def initialize(type)
6
+ @type = type
7
+ end
8
+
9
+ def get_type
10
+ @type
11
+ end
12
+
13
+ def get_action_type
14
+ :TYPE
15
+ end
16
+
17
+ def is_position_dependent
18
+ false
19
+ end
20
+
21
+ def execute(lexer)
22
+ lexer.set_type(type)
23
+ end
24
+
25
+ def hash
26
+ # todo
27
+ end
28
+
29
+ def eql?(other)
30
+ # todo
31
+ end
32
+
33
+ def to_s
34
+ "type(#{type}"
35
+ end
36
+
37
+
38
+ private
39
+ attr_reader :type
40
+
41
+ end
42
+ end
@@ -0,0 +1,43 @@
1
+ module Antlr4ruby
2
+ class ATN
3
+ INVALID_ALT_NUMBER = 0
4
+
5
+ attr_reader :states, :mode_to_start_state ,:decision_to_state, :mode_name_to_start_state, :grammar_type, :max_token_type
6
+
7
+ attr_accessor :rule_to_start_state, :rule_to_stop_state, :rule_to_token_type, :lexer_actions
8
+
9
+ def initialize(grammar_type, max_token_type)
10
+ @grammar_type, @max_token_type = grammar_type, max_token_type
11
+ end
12
+
13
+ def next_tokens(state, ctx)
14
+ # todo
15
+ end
16
+
17
+ def add_state(state)
18
+ # todo
19
+ end
20
+
21
+ def remove_state(state)
22
+ # todo
23
+ end
24
+
25
+ def define_decision_state(state)
26
+ # todo
27
+ end
28
+
29
+ def get_decision_state(decision)
30
+ # todo
31
+ end
32
+
33
+ def get_number_of_decisions
34
+ # todo
35
+ end
36
+
37
+ def get_expected_tokens(state_number, context)
38
+ # todo
39
+ end
40
+
41
+
42
+ end
43
+ end
@@ -0,0 +1,49 @@
1
+ # finished
2
+
3
+ module Antlr4ruby
4
+ class ATNDeserializationOptions
5
+ def initialize(read_only = false)
6
+ @read_only = read_only
7
+ @verify_atn = true
8
+ @generate_rule_bypass_transitions = false
9
+ end
10
+
11
+ private
12
+ @@default_options = ATNDeserializationOptions.new(true)
13
+ attr_reader :read_only, :verify_atn, :generate_rule_bypass_transitions
14
+
15
+ public
16
+
17
+ def self.get_default_options
18
+ @@default_options
19
+ end
20
+
21
+ def is_read_only?
22
+ read_only
23
+ end
24
+
25
+ def make_read_only
26
+ @read_only = true
27
+ end
28
+
29
+ def is_verify_atn?
30
+ @verify_atn
31
+ end
32
+
33
+ def set_verify_atn(verify_atn)
34
+ raise "the object is read only." if read_only
35
+ @verify_atn = verify_atn
36
+ end
37
+
38
+ def is_generate_rule_bypass_transitions?
39
+ @generate_rule_bypass_transitions
40
+ end
41
+
42
+ def set_generate_rule_bypass_transitions(flag)
43
+ raise "the object is read only." if read_only
44
+ @generate_rule_bypass_transitions = flag
45
+ end
46
+
47
+
48
+ end
49
+ end
@@ -0,0 +1,429 @@
1
+ require 'antlr4ruby/atn/atn_deserialization_options'
2
+ require 'antlr4ruby/atn/atn'
3
+ require 'antlr4ruby/atn/state/atn_state'
4
+ require 'antlr4ruby/atn/state/tokens_start_state'
5
+ require 'antlr4ruby/atn/state/decision_state'
6
+ require 'antlr4ruby/atn/state/basic_state'
7
+ require 'antlr4ruby/atn/state/block_start_state'
8
+ require 'antlr4ruby/atn/state/rule_stop_state'
9
+ require 'antlr4ruby/atn/state/rule_start_state'
10
+ require 'antlr4ruby/atn/state/block_end_state'
11
+ require 'antlr4ruby/atn/state/loop_end_state'
12
+ require 'antlr4ruby/atn/state/plus_loopback_state'
13
+ require 'antlr4ruby/atn/state/star_block_start_state'
14
+ require 'antlr4ruby/atn/state/plus_block_start_state'
15
+
16
+ module Antlr4ruby
17
+ class ATNDeserializer
18
+ SERIALIZED_VERSION = 4
19
+
20
+ def initialize(options = ATNDeserializationOptions.get_default_options)
21
+ @deserialization_options = options
22
+ end
23
+
24
+ def deserialize(data)
25
+ # data[0] 是版本号
26
+ version = data[0]
27
+ raise "Could not deserialize ATN with version #{version} (expected #{SERIALIZED_VERSION})." if version != SERIALIZED_VERSION
28
+ # data[1] 是类型,0表示 lexer,1 表示 parser
29
+ grammar_type = data[1] == 0 ? :LEXER : :PARSER
30
+ atn = ATN.new(grammar_type, data[2])
31
+
32
+
33
+
34
+ p = 3
35
+ loop_back_state_numbers = []
36
+ end_state_numbers = []
37
+ n_states = data[p]; p += 1
38
+ n_states.times do |i|
39
+ s_type = data[p]; p += 1
40
+ if s_type == ATNState::INVALID_TYPE
41
+ atn.add_state(nil)
42
+ next
43
+ end
44
+
45
+ rule_index = data[p]; p += 1
46
+ s = state_factory(s_type, rule_index)
47
+
48
+ if s_type == ATNState::LOOP_END
49
+ loop_back_state_number = data[p]; p += 1
50
+ loop_back_state_numbers << Pair.new(s, loop_back_state_number)
51
+ elsif s.instance_of?(BlockStartState)
52
+ end_state_number = data[p]; p += 1
53
+ end_state_numbers << Pair.new(s, end_state_number)
54
+ end
55
+
56
+ atn.add_state(s)
57
+ end
58
+
59
+ loop_back_state_numbers.each { |pair| pair.first.loop_back_state = atn.states[pair.second] }
60
+ end_state_numbers.each { |pair| pair.first.end_state = atn.states[pair.second] }
61
+
62
+ num_non_greedy_states = data[p]; p += 1
63
+ num_non_greedy_states.times do |i|
64
+ state_number = data[p]; p += 1
65
+ atn.states[state_number].non_greedy = true
66
+ end
67
+
68
+ num_precedence_states = data[p]; p += 1
69
+ num_non_greedy_states.times do |i|
70
+ state_number = data[p]; p += 1
71
+ atn.states[state_number].is_left_recursive_rule = true
72
+ end
73
+
74
+ n_rules = data[p]; p += 1
75
+ atn.rule_to_token_type = Array.new(n_rules, 0) if atn.grammar_type == :LEXER
76
+
77
+ atn.rule_to_start_state = Array.new(n_rules)
78
+ n_rules.times do |i|
79
+ s = data[p]; p += 1
80
+ start_state = atn.states[s]
81
+ atn.rule_to_start_state[i] = start_state
82
+ if atn.grammar_type == :LEXER
83
+ token_type = data[p]; p += 1
84
+ atn.rule_to_token_type[i] = token_type
85
+ end
86
+ end
87
+
88
+ atn.rule_to_stop_state = Array.new(n_rules)
89
+ atn.states.each do |state|
90
+ next unless state.instance_of?(RuleStartState)
91
+ atn.rule_to_stop_state[state.rule_index] = state
92
+ atn.rule_to_start_state[state.rule_index] = state
93
+ end
94
+
95
+ n_modes = data[p]; p += 1
96
+ n_modes.times do |i|
97
+ s = data[p]; p += 1
98
+ atn.mode_to_start_state << atn.states[s]
99
+ end
100
+
101
+ sets = []
102
+ p = deserialize_sets(data, p, sets)
103
+
104
+ n_edges = data[p]; p += 1
105
+ n_edges.times do |i|
106
+ src, trg, token_type, arg1, arg2, arg3 =
107
+ data[p], data[p+1], data[p+2], data[p+3], data[p+4], data[p+5]
108
+
109
+ trans = edge_factory(atn, token_type, src, trg, arg1, arg2, arg3, sets)
110
+ src_state = atn.states[src]
111
+ src_state.add_transition(trans)
112
+ p += 6
113
+ end
114
+
115
+ atn.states.each do |state|
116
+ state.get_number_of_transitions.times do |i|
117
+ t = state.get_transition(i)
118
+ next unless t.instance_of?(RuleTransition)
119
+ outermost_precedence_return = -1
120
+ if t && atn.rule_to_start_state[t.target.rule_index].is_left_recursive_rule
121
+ outermost_precedence_return = t.target.rule_index if t.precedence == 0
122
+ end
123
+
124
+ return_transition = EpsilonTransition.new(t.follow_state, outermost_precedence_return)
125
+ atn.rule_to_stop_state[t.target.rule_index].add_transition(return_transition)
126
+ end
127
+ end
128
+
129
+ atn.states.each do |state|
130
+ if state.instance_of?(BlockStartState)
131
+ raise "illegal state." if ! state.end_state || state.end_state.start_state
132
+
133
+ state.end_state.start_state = state
134
+ end
135
+
136
+ if state.instance_of?(PlusLoopbackState)
137
+ loop_back_state = state
138
+ loop_back_state.get_number_of_transitions.times do |i|
139
+ target = loop_back_state.get_transition(i).target
140
+ target.loop_back_state = loop_back_state if target.instance_of?(PlusBlockStartState)
141
+ end
142
+
143
+ elsif state.instance_of?(StarLoopbackState)
144
+ loop_back_state = state
145
+ loop_back_state.get_number_of_transitions.times do |i|
146
+ target = loop_back_state.get_transition(i).target
147
+ target.loop_back_state = loop_back_state if target.instance_of?(StarLoopbackState)
148
+ end
149
+ end
150
+
151
+ end
152
+
153
+ n_decisions = data[p]; p += 1
154
+ n_decisions.times do |i|
155
+ s = data[p]; p += 1
156
+ dec_state = atn.states[s]
157
+ atn.decision_to_state << dec_state
158
+ dec_state.decision = i-1
159
+ end
160
+
161
+ if atn.grammar_type == :LEXER
162
+ len = data[p]; p += 1
163
+ atn.lexer_actions = Array.new(len)
164
+
165
+ atn.lexer_actions.length.times do |i|
166
+ t = data[p]; p += 1
167
+ action_type = [:CHANNEL, :CUSTOM, :MODE, :MORE, :POP_MODE, :PUSH_MODE, :SKIP, :TYPE].at(t)
168
+ data1 = data[p]; p += 1
169
+ data2 = data[p]; p += 1
170
+ lexer_action = lexer_action_factory(action_type, data1, data2)
171
+
172
+ atn.lexer_actions[i] = lexer_action
173
+ end
174
+ end
175
+
176
+ mark_precedence_decisions(atn)
177
+
178
+ verify_atn(atn) if deserialization_options.is_verify_atn?
179
+
180
+ if deserialization_options.is_generate_rule_bypass_transitions? && atn.grammar_type == :PARSER
181
+ atn.rule_to_token_type = Array.new(atn.rule_to_start_state.length)
182
+ atn.rule_to_start_state.length.times do |i|
183
+ atn.rule_to_token_type[i] = atn.max_token_type + i + 1
184
+ end
185
+
186
+ atn.rule_to_start_state.length.times do |i|
187
+ bypass_start = BasicBlockStartState.new
188
+ bypass_start.rule_index = i
189
+ atn.add_state(bypass_start)
190
+
191
+ bypass_stop = BlockEndState.new
192
+ bypass_stop.rule_index = i
193
+ atn.add_state(bypass_stop)
194
+
195
+ bypass_start.end_state = bypass_stop
196
+ atn.define_decision_state(bypass_start)
197
+
198
+ bypass_stop.start_state = bypass_start
199
+
200
+ exclude_transition = nil
201
+ end_state = nil
202
+ if atn.rule_to_start_state[i].is_left_recursive_rule
203
+ # end_state = nil
204
+ atn.states.each do |state|
205
+ next if state.rule_index != i
206
+ next unless state.instance_of?(StarLoopEntryState)
207
+ maybe_loop_end_state = state.get_transition(state.get_number_of_transitions-1).target
208
+ next unless maybe_loop_end_state.instance_of?(LoopEndState)
209
+
210
+ if maybe_loop_end_state.epsilon_only_transitions && maybe_loop_end_state.get_transition(0).target.instance_of?(RuleStopState)
211
+ end_state = state
212
+ break
213
+ end
214
+
215
+ end
216
+
217
+ raise "" unless end_state
218
+ exclude_transition = end_state.loop_back_state.get_transition(0)
219
+ else
220
+ end_state = atn.rule_to_stop_state[i]
221
+ end
222
+
223
+
224
+ atn.states.each { |state|
225
+ state.transitions.each { |transition|
226
+ next if transition == exclude_transition
227
+ transition.target = bypass_stop if transition.target == end_state
228
+ }
229
+ }
230
+
231
+ while atn.rule_to_start_state[i].get_number_of_transitions > 0
232
+ transition = atn.rule_to_start_state[i].remove_transition(atn.rule_to_start_state[i].get_number_of_transitions-1)
233
+ bypass_start.add_transition(transition)
234
+ end
235
+
236
+ atn.rule_to_start_state[i].add_transition(EpsilonTransition.new(bypass_start))
237
+ bypass_stop.add_transition(EpsilonTransition.new(end_state))
238
+
239
+ match_state = BasicState.new
240
+ atn.add_state(match_state)
241
+ match_state.add_transition(AtomTransition.new(bypass_stop, atn.rule_to_token_type[i]))
242
+ bypass_start.add_transition(EpsilonTransition(match_state))
243
+ end
244
+
245
+ verify_atn(atn) if deserialization_options.is_verify_atn?
246
+ end
247
+
248
+ atn
249
+ end
250
+
251
+
252
+
253
+
254
+ protected
255
+ def mark_precedence_decisions(atn)
256
+ atn.states.each do |state|
257
+ next unless state.instance_of?(StarLoopEntryState)
258
+
259
+ if atn.rule_to_start_state[state.rule_index].is_left_recursive_rule
260
+ maybe_loop_end_state = state.get_transition(state.get_number_of_transitions-1).target
261
+ if maybe_loop_end_state.instance_of?(LoopEndState)
262
+ if maybe_loop_end_state.epsilon_only_transitions && maybe_loop_end_state.get_transition(0).target.instance_of?(RuleStopState)
263
+ state.is_precedence_decision = true
264
+ end
265
+ end
266
+ end
267
+ end
268
+ end
269
+
270
+ def verify_atn(atn)
271
+ atn.states.each do |state|
272
+ next unless state
273
+ check_condition(state.only_has_epsilon_transitions? || state.get_number_of_transitions <= 1)
274
+
275
+ check_condition(state.loop_back_state != nil ) if state.instance_of?(PlusBlockStartState)
276
+
277
+ if state.instance_of?(StarLoopEntryState)
278
+ check_condition(state.loop_back_state != nil )
279
+ check_condition(state.get_number_of_transitions == 2)
280
+
281
+ if state.get_transition(0).target.instance_of?(StarBlockStartState)
282
+ check_condition(state.get_transition(1).target.instance_of?(LoopEndState))
283
+ check_condition(!state.non_greedy)
284
+ elsif state.get_transition(0).target.instance_of?(LoopEndState)
285
+ check_condition(state.get_transition(1).target.instance_of?(StarBlockStartState))
286
+ check_condition(state.non_greedy)
287
+ else
288
+ raise "illegal state"
289
+ end
290
+ end
291
+
292
+ if state.instance_of?(StarLoopbackState)
293
+
294
+ end
295
+
296
+ check_condition(state.loop_back_state != nil ) if state.instance_of?(LoopEndState)
297
+ check_condition(state.stop_state != nil) if state.instance_of?(RuleStartState)
298
+ check_condition(state.end_state != nil) if state.instance_of?(BlockStartState)
299
+ check_condition(state.start_state != nil) if state.instance_of?(BlockEndState)
300
+
301
+ # check_condition(state.get_number_of_transitions <= 1 || state.decision >= 0) if state.instance_of?(DecisionState)
302
+ if state.instance_of?(DecisionState)
303
+ check_condition(state.get_number_of_transitions <= 1 || state.decision >= 0)
304
+ else
305
+ check_condition(state.get_number_of_transitions <= 1 || state.instance_of?(RuleStopState))
306
+ end
307
+ end
308
+ end
309
+
310
+ def check_condition(condition, message = nil)
311
+ raise message || 'check error' unless condition
312
+ end
313
+
314
+ def edge_factory(atn, type, src, trg, arg1, arg2, arg3, sets)
315
+ target = atn.states[trg]
316
+ case type
317
+ when Transition.EPSILON
318
+ return EpsilonTransition.new(target)
319
+ when Transition.RANGE
320
+ return arg3 != 0 ? RangeTransition.new(target, Token.EOF, arg2) : RangeTransition.new(target, arg1, arg2)
321
+ when Transition.RULE
322
+ return RuleTransition.new(atn.states[arg1], arg2, arg3, target)
323
+ when Transition.PREDICATE
324
+ return PredicateTransition.new(target, arg1, arg2, arg3 != 0)
325
+ when Transition.PRECEDENCE
326
+ return PrecedencePredicateTransition.new(target, arg1)
327
+ when Transition.ATOM
328
+ return arg3 != 0 ? AtomTransition.new(target, Token.EOF) : AtomTransition.new(target, arg1)
329
+ when Transition.ACTION
330
+ return ActionTransition.new(target, arg1, arg2, arg3 != 0)
331
+ when Transition.SET
332
+ return SetTransition.new(target, sets[arg1])
333
+ when Transition.NOT_SET
334
+ return NotSetTransition.new(target, sets[arg1])
335
+ when Transition.WILDCARD
336
+ return WildcardTransition.new(target)
337
+ else
338
+ raise "The specified transition type is not valid."
339
+ end
340
+ end
341
+
342
+ def state_factory(type, rule_index)
343
+ s = nil
344
+ case type
345
+ # when ATNState.INVALID_TYPE
346
+
347
+ when ATNState::BASIC
348
+ s = BasicState.new
349
+ when ATNState::RULE_START
350
+ s = RuleStartState.new
351
+ when ATNState::BLOCK_START
352
+ s = BasicBlockStartState.new
353
+ when ATNState::PLUS_BLOCK_START
354
+ s = PlusBlockStartState.new
355
+ when ATNState::STAR_BLOCK_START
356
+ s = StarBlockStartState.new
357
+ when ATNState::TOKEN_START
358
+ s = TokensStartState.new
359
+ when ATNState::RULE_STOP
360
+ s = RuleStopState.new
361
+ when ATNState::BLOCK_END
362
+ s = BlockEndState.new
363
+ when ATNState::STAR_LOOP_BACK
364
+ s = StarLoopbackState.new
365
+ when ATNState::STAR_LOOP_ENTRY
366
+ StarLoopEntryState.new
367
+ when ATNState::PLUS_LOOP_BACK
368
+ s = PlusLoopbackState.new
369
+ when ATNState::LOOP_END
370
+ s = LoopEndState.new
371
+ else
372
+ raise "The specified state type #{type} is not valid."
373
+ end
374
+
375
+ raise "The specified state type #{type} is not valid." unless s
376
+ s.rule_index = rule_index if s
377
+ s
378
+ end
379
+
380
+ def lexer_action_factory(type, data1, data2)
381
+ case type
382
+ when :CHANNEL
383
+ return LexerChannelAction.new(data1)
384
+ when :CUSTOM
385
+ return LexerCustomAction.new(data1, data2)
386
+ when :MODE
387
+ return LexerModeAction.new(data1)
388
+ when :MORE
389
+ return LexerMoreAction.INSTANCE
390
+ when :POP_MODE
391
+ return LexerPopModeAction.INSTANCE
392
+ when :PUSH_MODE
393
+ return LexerPushModeAction.new(data1)
394
+ when :SKIP
395
+ return LexerSkipAction.INSTANCE
396
+ when :TYPE
397
+ return LexerTypeAction.new(data1)
398
+ else
399
+ raise "The specified lexer action type #{type} is not valid."
400
+
401
+ end
402
+ end
403
+
404
+
405
+
406
+ private
407
+ attr_reader :deserialization_options
408
+ def deserialize_sets(data, p, sets)
409
+ n_sets = data[p]; p += 1
410
+ n_sets.times do |i|
411
+ n_intervals = data[p]; p += 1
412
+ range_set = RangeSet.new
413
+ sets << range_set
414
+
415
+ contains_eof = (data[p] != 0)
416
+ p += 1
417
+ range_set.add(-1..-1) if contains_eof
418
+ n_intervals.times do |i|
419
+ a = data[p]; p += 1
420
+ b = data[p]; p += 1
421
+ range_set.add(a..b)
422
+ end
423
+
424
+ end
425
+
426
+ p
427
+ end
428
+ end
429
+ end
@@ -0,0 +1,4 @@
1
+ module Antlr4ruby
2
+ class ATNSerializer
3
+ end
4
+ end
@@ -0,0 +1,36 @@
1
+ module Antlr4ruby
2
+ # @abstract
3
+ class ATNSimulator
4
+ ERROR = DFAState.new(ATNConfigSet.new)
5
+ ERROR.state_number = 2147483647
6
+
7
+ def initialize(atn, shared_context_cache)
8
+ @atn, @shared_context_cache = atn, shared_context_cache
9
+ end
10
+
11
+ def reset
12
+ raise NotImplementedError "#{self.class.name}#reset is abstract method"
13
+ end
14
+
15
+ def clear_dfa
16
+ raise "This ATN simulator does not support clearing the DFA."
17
+ end
18
+
19
+ def get_shared_context_cache
20
+ @shared_context_cache
21
+ end
22
+
23
+ def get_cached_context(context)
24
+ # todo
25
+ end
26
+
27
+ attr_reader :atn
28
+
29
+
30
+ protected
31
+ attr_reader :shared_context_cache
32
+
33
+
34
+ end
35
+
36
+ end
@@ -0,0 +1,6 @@
1
+ module Antlr4ruby
2
+ module ATNType
3
+
4
+ end
5
+
6
+ end
@@ -0,0 +1,46 @@
1
+
2
+
3
+ module Antlr4ruby
4
+ class ATNConfig
5
+ SUPPRESS_PRECEDENCE_FILTER = 0x40000000
6
+
7
+ attr_reader :state, :alt, :semantic_context
8
+ attr_accessor :context, :reaches_into_outer_context
9
+
10
+ def initialize(state, alt, context, semantic_context, reaches_outer = 0)
11
+ @state, @alt, @context, @semantic_context, @semantic_context = state, alt, context, semantic_context, reaches_outer
12
+ end
13
+
14
+ def get_outer_context_depth
15
+ reaches_into_outer_context & ~SUPPRESS_PRECEDENCE_FILTER
16
+ end
17
+
18
+ def is_precedence_filter_suppressed
19
+ (reaches_into_outer_context & SUPPRESS_PRECEDENCE_FILTER) != 0
20
+ end
21
+
22
+ def set_precedence_filter_suppressed(value)
23
+ if value
24
+ @reaches_into_outer_context |= 0x40000000
25
+ else
26
+ @reaches_into_outer_context &= ~SUPPRESS_PRECEDENCE_FILTER
27
+ end
28
+ end
29
+
30
+ # todo eql? hash to_s
31
+ def eql?(other)
32
+ return false if ! other || ! other.instance_of?(ATNConfig)
33
+ return true if self.equal?(other)
34
+ @alt == other.alt && state.state_number == other.state.state_number # todo
35
+ end
36
+
37
+ def hash
38
+ # todo
39
+ end
40
+
41
+ def to_s(recognizer: nil, show_alt: true)
42
+ # todo
43
+ end
44
+
45
+ end
46
+ end
@@ -0,0 +1,5 @@
1
+ module Antlr4ruby
2
+ class ATNConfigSet
3
+
4
+ end
5
+ end