antlr4ruby 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.rspec +3 -0
- data/.standard.yml +3 -0
- data/CHANGELOG.md +5 -0
- data/CODE_OF_CONDUCT.md +84 -0
- data/Gemfile +12 -0
- data/Gemfile.lock +65 -0
- data/LICENSE +21 -0
- data/LICENSE.txt +21 -0
- data/README.md +39 -0
- data/Rakefile +10 -0
- data/lib/antlr4ruby/atn/action/lexer_action_executor.rb +75 -0
- data/lib/antlr4ruby/atn/action/lexer_action_type.rb +6 -0
- data/lib/antlr4ruby/atn/action/lexer_channel_action.rb +41 -0
- data/lib/antlr4ruby/atn/action/lexer_custom_action.rb +43 -0
- data/lib/antlr4ruby/atn/action/lexer_indexed_custom_action.rb +43 -0
- data/lib/antlr4ruby/atn/action/lexer_mode_action.rb +45 -0
- data/lib/antlr4ruby/atn/action/lexer_more_action.rb +34 -0
- data/lib/antlr4ruby/atn/action/lexer_pop_mode_action.rb +32 -0
- data/lib/antlr4ruby/atn/action/lexer_push_mode_action.rb +43 -0
- data/lib/antlr4ruby/atn/action/lexer_skip_action.rb +33 -0
- data/lib/antlr4ruby/atn/action/lexer_type_action.rb +42 -0
- data/lib/antlr4ruby/atn/atn.rb +43 -0
- data/lib/antlr4ruby/atn/atn_deserialization_options.rb +49 -0
- data/lib/antlr4ruby/atn/atn_deserializer.rb +429 -0
- data/lib/antlr4ruby/atn/atn_serializer.rb +4 -0
- data/lib/antlr4ruby/atn/atn_simulator.rb +36 -0
- data/lib/antlr4ruby/atn/atn_type.rb +6 -0
- data/lib/antlr4ruby/atn/config/atn_config.rb +46 -0
- data/lib/antlr4ruby/atn/config/atn_config_set.rb +5 -0
- data/lib/antlr4ruby/atn/config/lexer_atn_config.rb +47 -0
- data/lib/antlr4ruby/atn/config/ordered_atn_config_set.rb +4 -0
- data/lib/antlr4ruby/atn/context/array_prediction_context.rb +29 -0
- data/lib/antlr4ruby/atn/context/empty_prediction_context.rb +36 -0
- data/lib/antlr4ruby/atn/context/prediction_context.rb +111 -0
- data/lib/antlr4ruby/atn/context/prediction_context_cache.rb +17 -0
- data/lib/antlr4ruby/atn/context/semantic_context.rb +74 -0
- data/lib/antlr4ruby/atn/context/singleton_prediction_context.rb +36 -0
- data/lib/antlr4ruby/atn/info/accept_state_info.rb +26 -0
- data/lib/antlr4ruby/atn/info/ambiguity_info.rb +13 -0
- data/lib/antlr4ruby/atn/info/conflict_info.rb +39 -0
- data/lib/antlr4ruby/atn/info/context_sensitivity_info.rb +10 -0
- data/lib/antlr4ruby/atn/info/decision_event_info.rb +14 -0
- data/lib/antlr4ruby/atn/info/decision_info.rb +25 -0
- data/lib/antlr4ruby/atn/info/error_info.rb +9 -0
- data/lib/antlr4ruby/atn/info/lookahead_event_info.rb +12 -0
- data/lib/antlr4ruby/atn/info/parse_info.rb +18 -0
- data/lib/antlr4ruby/atn/info/predicate_eval_info.rb +5 -0
- data/lib/antlr4ruby/atn/lexer_atn_simulator.rb +150 -0
- data/lib/antlr4ruby/atn/ll1_analyzer.rb +4 -0
- data/lib/antlr4ruby/atn/parser_atn_simulator.rb +4 -0
- data/lib/antlr4ruby/atn/prediction_mode.rb +5 -0
- data/lib/antlr4ruby/atn/profiling_atn_simulator.rb +5 -0
- data/lib/antlr4ruby/atn/state/atn_state.rb +109 -0
- data/lib/antlr4ruby/atn/state/basic_block_start_state.rb +12 -0
- data/lib/antlr4ruby/atn/state/basic_state.rb +13 -0
- data/lib/antlr4ruby/atn/state/block_end_state.rb +13 -0
- data/lib/antlr4ruby/atn/state/block_start_state.rb +14 -0
- data/lib/antlr4ruby/atn/state/decision_state.rb +17 -0
- data/lib/antlr4ruby/atn/state/invalid_state.rb +12 -0
- data/lib/antlr4ruby/atn/state/loop_end_state.rb +14 -0
- data/lib/antlr4ruby/atn/state/plus_block_start_state.rb +11 -0
- data/lib/antlr4ruby/atn/state/plus_loopback_state.rb +10 -0
- data/lib/antlr4ruby/atn/state/rule_start_state.rb +10 -0
- data/lib/antlr4ruby/atn/state/rule_stop_state.rb +9 -0
- data/lib/antlr4ruby/atn/state/simulator_state.rb +17 -0
- data/lib/antlr4ruby/atn/state/star_block_start_state.rb +8 -0
- data/lib/antlr4ruby/atn/state/star_loop_entry_state.rb +15 -0
- data/lib/antlr4ruby/atn/state/star_loopback_state.rb +10 -0
- data/lib/antlr4ruby/atn/state/tokens_start_state.rb +10 -0
- data/lib/antlr4ruby/atn/transition/abstract_predicate_transition.rb +11 -0
- data/lib/antlr4ruby/atn/transition/action_transition.rb +36 -0
- data/lib/antlr4ruby/atn/transition/atom_transition.rb +29 -0
- data/lib/antlr4ruby/atn/transition/code_point_transitions.rb +7 -0
- data/lib/antlr4ruby/atn/transition/epsilon_transition.rb +35 -0
- data/lib/antlr4ruby/atn/transition/not_set_transition.rb +23 -0
- data/lib/antlr4ruby/atn/transition/precedence_predicate_transition.rb +34 -0
- data/lib/antlr4ruby/atn/transition/predicate_transition.rb +29 -0
- data/lib/antlr4ruby/atn/transition/range_transition.rb +30 -0
- data/lib/antlr4ruby/atn/transition/rule_transition.rb +29 -0
- data/lib/antlr4ruby/atn/transition/set_transition.rb +31 -0
- data/lib/antlr4ruby/atn/transition/transition.rb +63 -0
- data/lib/antlr4ruby/atn/transition/wildcard_transition.rb +21 -0
- data/lib/antlr4ruby/bail_error_strategy.rb +28 -0
- data/lib/antlr4ruby/base_error_listener.rb +14 -0
- data/lib/antlr4ruby/buffered_token_stream.rb +115 -0
- data/lib/antlr4ruby/char_streams.rb +34 -0
- data/lib/antlr4ruby/code_point_buffer.rb +31 -0
- data/lib/antlr4ruby/code_point_char_stream.rb +88 -0
- data/lib/antlr4ruby/common_token.rb +113 -0
- data/lib/antlr4ruby/common_token_factory.rb +39 -0
- data/lib/antlr4ruby/common_token_stream.rb +62 -0
- data/lib/antlr4ruby/console_error_listener.rb +10 -0
- data/lib/antlr4ruby/default_error_strategy.rb +108 -0
- data/lib/antlr4ruby/dfa/dfa.rb +67 -0
- data/lib/antlr4ruby/dfa/dfa_serializer.rb +28 -0
- data/lib/antlr4ruby/dfa/dfa_state.rb +80 -0
- data/lib/antlr4ruby/dfa/lexer_dfa_serializer.rb +12 -0
- data/lib/antlr4ruby/diagnostic_error_listener.rb +18 -0
- data/lib/antlr4ruby/exception/failed_predicate_exception.rb +27 -0
- data/lib/antlr4ruby/exception/input_mismatch_exception.rb +16 -0
- data/lib/antlr4ruby/exception/lexer_no_viable_alt_exception.rb +36 -0
- data/lib/antlr4ruby/exception/no_viable_alt_exception.rb +29 -0
- data/lib/antlr4ruby/exception/parse_cancellation_exception.rb +10 -0
- data/lib/antlr4ruby/exception/recognition_exception.rb +55 -0
- data/lib/antlr4ruby/int_stream.rb +11 -0
- data/lib/antlr4ruby/interpreter_rule_context.rb +19 -0
- data/lib/antlr4ruby/lexer.rb +180 -0
- data/lib/antlr4ruby/lexer_interpreter.rb +5 -0
- data/lib/antlr4ruby/list_token_source.rb +6 -0
- data/lib/antlr4ruby/misc/bit_set.rb +9 -0
- data/lib/antlr4ruby/misc/double_key_map.rb +28 -0
- data/lib/antlr4ruby/misc/integer_stack.rb +9 -0
- data/lib/antlr4ruby/misc/murmur_hash.rb +75 -0
- data/lib/antlr4ruby/misc/pair.rb +18 -0
- data/lib/antlr4ruby/misc/range_set.rb +223 -0
- data/lib/antlr4ruby/parser.rb +225 -0
- data/lib/antlr4ruby/parser_interpreter.rb +25 -0
- data/lib/antlr4ruby/parser_rule_context.rb +161 -0
- data/lib/antlr4ruby/proxy_error_listener.rb +33 -0
- data/lib/antlr4ruby/recognizer.rb +133 -0
- data/lib/antlr4ruby/rule_context.rb +109 -0
- data/lib/antlr4ruby/rule_context_with_alt_num.rb +22 -0
- data/lib/antlr4ruby/runtime_meta_data.rb +40 -0
- data/lib/antlr4ruby/token.rb +10 -0
- data/lib/antlr4ruby/token_stream_rewriter.rb +5 -0
- data/lib/antlr4ruby/tree/abstract_parse_tree_visitor.rb +56 -0
- data/lib/antlr4ruby/tree/error_node.rb +15 -0
- data/lib/antlr4ruby/tree/iterative_parse_tree_walker.rb +10 -0
- data/lib/antlr4ruby/tree/parse_tree_property.rb +6 -0
- data/lib/antlr4ruby/tree/parse_tree_walker.rb +38 -0
- data/lib/antlr4ruby/tree/terminal_node.rb +79 -0
- data/lib/antlr4ruby/tree/trees.rb +161 -0
- data/lib/antlr4ruby/unbuffered_char_stream.rb +7 -0
- data/lib/antlr4ruby/unbuffered_token_stream.rb +8 -0
- data/lib/antlr4ruby/version.rb +5 -0
- data/lib/antlr4ruby/vocabulary.rb +73 -0
- data/lib/antlr4ruby.rb +8 -0
- data/lib/example/Hello.g4 +9 -0
- data/lib/example/hello_lexer.rb +80 -0
- data/lib/example/hello_lexer.rbs +37 -0
- data/lib/main.rb +14 -0
- data/sig/antlr4ruby/antlr_error_listener.rbs +23 -0
- data/sig/antlr4ruby/antlr_error_strategy.rbs +13 -0
- data/sig/antlr4ruby/atn/action/lexer_action.rbs +10 -0
- data/sig/antlr4ruby/atn/action/lexer_action_executor.rbs +22 -0
- data/sig/antlr4ruby/atn/action/lexer_action_type.rbs +6 -0
- data/sig/antlr4ruby/atn/action/lexer_channel_action.rbs +15 -0
- data/sig/antlr4ruby/atn/action/lexer_custom_action.rbs +17 -0
- data/sig/antlr4ruby/atn/action/lexer_indexed_custom_action.rbs +19 -0
- data/sig/antlr4ruby/atn/action/lexer_mode_action.rbs +16 -0
- data/sig/antlr4ruby/atn/action/lexer_more_action.rbs +9 -0
- data/sig/antlr4ruby/atn/action/lexer_pop_mode_action.rbs +10 -0
- data/sig/antlr4ruby/atn/action/lexer_push_mode_action.rbs +16 -0
- data/sig/antlr4ruby/atn/action/lexer_skip_action.rbs +10 -0
- data/sig/antlr4ruby/atn/action/lexer_type_action.rbs +12 -0
- data/sig/antlr4ruby/atn/atn.rbs +32 -0
- data/sig/antlr4ruby/atn/atn_deserialization_options.rbs +27 -0
- data/sig/antlr4ruby/atn/atn_deserializer.rbs +26 -0
- data/sig/antlr4ruby/atn/atn_serializer.rbs +5 -0
- data/sig/antlr4ruby/atn/atn_simulator.rbs +19 -0
- data/sig/antlr4ruby/atn/atn_type.rbs +7 -0
- data/sig/antlr4ruby/atn/config/atn_config.rbs +21 -0
- data/sig/antlr4ruby/atn/config/atn_config_set.rbs +5 -0
- data/sig/antlr4ruby/atn/config/lexer_atn_config.rbs +19 -0
- data/sig/antlr4ruby/atn/config/ordered_atn_config_set.rbs +5 -0
- data/sig/antlr4ruby/atn/context/array_prediction_context.rbs +11 -0
- data/sig/antlr4ruby/atn/context/empty_prediction_context.rbs +6 -0
- data/sig/antlr4ruby/atn/context/prediction_context.rbs +52 -0
- data/sig/antlr4ruby/atn/context/prediction_context_cache.rbs +12 -0
- data/sig/antlr4ruby/atn/context/semantic_context.rbs +36 -0
- data/sig/antlr4ruby/atn/context/singleton_prediction_context.rbs +11 -0
- data/sig/antlr4ruby/atn/info/accept_state_info.rbs +15 -0
- data/sig/antlr4ruby/atn/info/ambiguity_info.rbs +8 -0
- data/sig/antlr4ruby/atn/info/conflict_info.rbs +16 -0
- data/sig/antlr4ruby/atn/info/context_sensitivity_info.rbs +5 -0
- data/sig/antlr4ruby/atn/info/decision_event_info.rbs +14 -0
- data/sig/antlr4ruby/atn/info/decision_info.rbs +29 -0
- data/sig/antlr4ruby/atn/info/error_info.rbs +5 -0
- data/sig/antlr4ruby/atn/info/lookahead_event_info.rbs +8 -0
- data/sig/antlr4ruby/atn/info/parse_info.rbs +8 -0
- data/sig/antlr4ruby/atn/info/predicate_eval_info.rbs +6 -0
- data/sig/antlr4ruby/atn/lexer_atn_simulator.rbs +83 -0
- data/sig/antlr4ruby/atn/ll1_analyzer.rbs +5 -0
- data/sig/antlr4ruby/atn/parser_atn_simulator.rbs +5 -0
- data/sig/antlr4ruby/atn/prediction_mode.rbs +6 -0
- data/sig/antlr4ruby/atn/profiling_atn_simulator.rbs +6 -0
- data/sig/antlr4ruby/atn/state/atn_state.rbs +50 -0
- data/sig/antlr4ruby/atn/state/basic_block_start_state.rbs +6 -0
- data/sig/antlr4ruby/atn/state/basic_state.rbs +7 -0
- data/sig/antlr4ruby/atn/state/block_end_state.rbs +7 -0
- data/sig/antlr4ruby/atn/state/block_start_state.rbs +8 -0
- data/sig/antlr4ruby/atn/state/decision_state.rbs +14 -0
- data/sig/antlr4ruby/atn/state/invalid_state.rbs +7 -0
- data/sig/antlr4ruby/atn/state/loop_end_state.rbs +7 -0
- data/sig/antlr4ruby/atn/state/plus_block_start_state.rbs +6 -0
- data/sig/antlr4ruby/atn/state/plus_loopback_state.rbs +6 -0
- data/sig/antlr4ruby/atn/state/rule_start_state.rbs +7 -0
- data/sig/antlr4ruby/atn/state/rule_stop_state.rbs +6 -0
- data/sig/antlr4ruby/atn/state/simulator_state.rbs +12 -0
- data/sig/antlr4ruby/atn/state/star_block_start_state.rbs +6 -0
- data/sig/antlr4ruby/atn/state/star_loop_entry_state.rbs +8 -0
- data/sig/antlr4ruby/atn/state/star_loopback_state.rbs +5 -0
- data/sig/antlr4ruby/atn/state/tokens_start_state.rbs +6 -0
- data/sig/antlr4ruby/atn/transition/abstract_predicate_transition.rbs +10 -0
- data/sig/antlr4ruby/atn/transition/action_transition.rbs +15 -0
- data/sig/antlr4ruby/atn/transition/atom_transition.rbs +10 -0
- data/sig/antlr4ruby/atn/transition/code_point_transitions.rbs +5 -0
- data/sig/antlr4ruby/atn/transition/epsilon_transition.rbs +12 -0
- data/sig/antlr4ruby/atn/transition/not_set_transition.rbs +7 -0
- data/sig/antlr4ruby/atn/transition/precedence_predicate_transition.rbs +10 -0
- data/sig/antlr4ruby/atn/transition/predicate_transition.rbs +11 -0
- data/sig/antlr4ruby/atn/transition/range_transition.rbs +8 -0
- data/sig/antlr4ruby/atn/transition/rule_transition.rbs +10 -0
- data/sig/antlr4ruby/atn/transition/set_transition.rbs +8 -0
- data/sig/antlr4ruby/atn/transition/transition.rbs +40 -0
- data/sig/antlr4ruby/atn/transition/wildcard_transition.rbs +5 -0
- data/sig/antlr4ruby/bail_error_strategy.rbs +7 -0
- data/sig/antlr4ruby/base_error_listener.rbs +6 -0
- data/sig/antlr4ruby/buffered_token_stream.rbs +48 -0
- data/sig/antlr4ruby/char_stream.rbs +9 -0
- data/sig/antlr4ruby/char_streams.rbs +14 -0
- data/sig/antlr4ruby/code_point_buffer.rbs +20 -0
- data/sig/antlr4ruby/code_point_char_stream.rbs +19 -0
- data/sig/antlr4ruby/common_token.rbs +35 -0
- data/sig/antlr4ruby/common_token_factory.rbs +12 -0
- data/sig/antlr4ruby/common_token_stream.rbs +9 -0
- data/sig/antlr4ruby/console_error_listener.rbs +6 -0
- data/sig/antlr4ruby/default_error_strategy.rbs +56 -0
- data/sig/antlr4ruby/dfa/dfa.rbs +29 -0
- data/sig/antlr4ruby/dfa/dfa_serializer.rbs +11 -0
- data/sig/antlr4ruby/dfa/dfa_state.rbs +50 -0
- data/sig/antlr4ruby/dfa/lexer_dfa_serializer.rbs +5 -0
- data/sig/antlr4ruby/diagnostic_error_listener.rbs +10 -0
- data/sig/antlr4ruby/exception/failed_predicate_exception.rbs +23 -0
- data/sig/antlr4ruby/exception/input_mismatch_exception.rbs +7 -0
- data/sig/antlr4ruby/exception/lexer_no_viable_alt_exception.rbs +15 -0
- data/sig/antlr4ruby/exception/no_viable_alt_exception.rbs +14 -0
- data/sig/antlr4ruby/exception/recognition_exception.rbs +30 -0
- data/sig/antlr4ruby/int_stream.rbs +19 -0
- data/sig/antlr4ruby/interpreter_rule_context.rbs +6 -0
- data/sig/antlr4ruby/lexer.rbs +88 -0
- data/sig/antlr4ruby/lexer_interpreter.rbs +5 -0
- data/sig/antlr4ruby/list_token_source.rbs +6 -0
- data/sig/antlr4ruby/misc/bit_set.rbs +6 -0
- data/sig/antlr4ruby/misc/double_key_map.rbs +11 -0
- data/sig/antlr4ruby/misc/equality_comparator.rbs +7 -0
- data/sig/antlr4ruby/misc/int_set.rbs +29 -0
- data/sig/antlr4ruby/misc/integer_stack.rbs +9 -0
- data/sig/antlr4ruby/misc/murmur_hash.rbs +13 -0
- data/sig/antlr4ruby/misc/pair.rbs +15 -0
- data/sig/antlr4ruby/misc/predicate.rbs +7 -0
- data/sig/antlr4ruby/misc/range_set.rbs +49 -0
- data/sig/antlr4ruby/parser.rbs +109 -0
- data/sig/antlr4ruby/parser_interpreter.rbs +24 -0
- data/sig/antlr4ruby/parser_rule_context.rbs +53 -0
- data/sig/antlr4ruby/proxy_error_listener.rbs +10 -0
- data/sig/antlr4ruby/recognizer.rbs +76 -0
- data/sig/antlr4ruby/rule_context.rbs +31 -0
- data/sig/antlr4ruby/rule_context_with_alt_num.rbs +8 -0
- data/sig/antlr4ruby/runtime_meta_data.rbs +12 -0
- data/sig/antlr4ruby/token.rbs +26 -0
- data/sig/antlr4ruby/token_factory.rbs +10 -0
- data/sig/antlr4ruby/token_source.rbs +12 -0
- data/sig/antlr4ruby/token_stream.rbs +13 -0
- data/sig/antlr4ruby/token_stream_rewriter.rbs +5 -0
- data/sig/antlr4ruby/tree/abstract_parse_tree_visitor.rbs +14 -0
- data/sig/antlr4ruby/tree/error_node.rbs +13 -0
- data/sig/antlr4ruby/tree/iterative_parse_tree_walker.rbs +7 -0
- data/sig/antlr4ruby/tree/parse_tree.rbs +21 -0
- data/sig/antlr4ruby/tree/parse_tree_listener.rbs +13 -0
- data/sig/antlr4ruby/tree/parse_tree_property.rbs +5 -0
- data/sig/antlr4ruby/tree/parse_tree_visitor.rbs +12 -0
- data/sig/antlr4ruby/tree/parse_tree_walker.rbs +12 -0
- data/sig/antlr4ruby/tree/rule_node.rbs +8 -0
- data/sig/antlr4ruby/tree/syntax_tree.rbs +8 -0
- data/sig/antlr4ruby/tree/terminal_node.rbs +20 -0
- data/sig/antlr4ruby/tree/tree.rbs +15 -0
- data/sig/antlr4ruby/tree/trees.rbs +32 -0
- data/sig/antlr4ruby/unbuffered_char_stream.rbs +6 -0
- data/sig/antlr4ruby/unbuffered_token_stream.rbs +6 -0
- data/sig/antlr4ruby/vocabulary.rbs +36 -0
- data/sig/antlr4ruby/writable_token.rbs +13 -0
- data/sig/antlr4ruby.rbs +4 -0
- 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,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,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,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,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
|