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,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