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,28 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
|
4
|
+
|
5
|
+
module Antlr4ruby
|
6
|
+
class DoubleKeyMap
|
7
|
+
|
8
|
+
private
|
9
|
+
attr_accessor :data
|
10
|
+
|
11
|
+
public
|
12
|
+
def put(key1, key2, value)
|
13
|
+
data[key1] = {} unless data.has_key?(key1)
|
14
|
+
sub_data = data[key1]
|
15
|
+
prev = sub_data[key2]
|
16
|
+
sub_data[key2] = value
|
17
|
+
prev
|
18
|
+
end
|
19
|
+
|
20
|
+
def get(key1, key2)
|
21
|
+
sub_data = data[key1]
|
22
|
+
return nil unless sub_data
|
23
|
+
sub_data[key2]
|
24
|
+
end
|
25
|
+
|
26
|
+
|
27
|
+
end
|
28
|
+
end
|
@@ -0,0 +1,75 @@
|
|
1
|
+
# finished
|
2
|
+
# frozen_string_literal: true
|
3
|
+
|
4
|
+
module Antlr4ruby
|
5
|
+
class MurmurHash
|
6
|
+
DEFAULT_SEED = 0
|
7
|
+
|
8
|
+
def initialize
|
9
|
+
raise "不能实例化 #{self.class.name}."
|
10
|
+
end
|
11
|
+
|
12
|
+
class << self
|
13
|
+
def init(seed = DEFAULT_SEED) seed; end
|
14
|
+
def update(hash, value)
|
15
|
+
v = value.hash
|
16
|
+
# 首先判断 hash 是否在 32 位整数所能够表达的范围内, 貌似超出范围也无所谓
|
17
|
+
# raise "hash 值超出范围" if v < -2147483648 || v > 2147483647
|
18
|
+
|
19
|
+
c1 = 0xCC9E2D51
|
20
|
+
c2 = 0x1B873593
|
21
|
+
r1 = 15
|
22
|
+
r2 = 13
|
23
|
+
m = 5
|
24
|
+
n = 0xE6546B64
|
25
|
+
mask = 0xffffffff
|
26
|
+
|
27
|
+
v = (v * c1) & mask # 通过 & 0xffffffff 可以将有符号数转换为无符号
|
28
|
+
v = ((v << r1) | (v >> (32 - r1))) & mask
|
29
|
+
v = (v * c2) & mask
|
30
|
+
|
31
|
+
hash = (hash ^ v) & mask
|
32
|
+
hash = ((hash << r2) | hash >> (32 - r2)) & mask
|
33
|
+
|
34
|
+
# 减去 4294967296 是为了将无符号数再次转换回有符号数
|
35
|
+
hash = ((hash * m + n) & mask)
|
36
|
+
if hash > 2147483647
|
37
|
+
hash - 4294967296
|
38
|
+
else
|
39
|
+
hash
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
def finish(hash, number_of_words)
|
44
|
+
mask = 0xffffffff
|
45
|
+
hash &= mask; number_of_words &= mask
|
46
|
+
|
47
|
+
hash = (hash ^ (number_of_words << 2)) & mask
|
48
|
+
hash = (hash ^ (hash >> 16)) & mask
|
49
|
+
hash = (hash * 0x85EBCA6B) & mask
|
50
|
+
hash = (hash ^ (hash >> 13)) & mask
|
51
|
+
hash = (hash * 0xC2B2AE35) & mask
|
52
|
+
hash = (hash ^ (hash >> 16)) & mask
|
53
|
+
if hash > 2147483647
|
54
|
+
hash - 4294967296
|
55
|
+
else
|
56
|
+
hash
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
def hash(data, seed)
|
61
|
+
hash = init(seed)
|
62
|
+
data.each do |value|
|
63
|
+
hash = update(hash, value)
|
64
|
+
end
|
65
|
+
|
66
|
+
finish(hash, data.length)
|
67
|
+
end
|
68
|
+
|
69
|
+
|
70
|
+
|
71
|
+
|
72
|
+
end
|
73
|
+
end
|
74
|
+
|
75
|
+
end
|
@@ -0,0 +1,223 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
# 使用 RangeSet 来代替原来的 IntervalSet
|
3
|
+
|
4
|
+
module Antlr4ruby
|
5
|
+
class RangeSet
|
6
|
+
attr_accessor :data
|
7
|
+
|
8
|
+
def initialize(data = [])
|
9
|
+
@data = data
|
10
|
+
end
|
11
|
+
|
12
|
+
def clear
|
13
|
+
data.clear
|
14
|
+
end
|
15
|
+
|
16
|
+
def add(range)
|
17
|
+
i = 0
|
18
|
+
result = []
|
19
|
+
while i < data.length
|
20
|
+
a = data[i]
|
21
|
+
if a.min > range.max + 1
|
22
|
+
break
|
23
|
+
elsif a.max < range.min - 1
|
24
|
+
result << a; i += 1; next
|
25
|
+
else
|
26
|
+
# 直接将 a 合并到 range 里面
|
27
|
+
start = a.min < range.min ? a.min : range.min
|
28
|
+
stop = a.max > range.max ? a.max : range.max
|
29
|
+
range = start..stop; i += 1
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
result << range
|
34
|
+
while i < data.length
|
35
|
+
result << data[i]; i += 1
|
36
|
+
end
|
37
|
+
|
38
|
+
|
39
|
+
@data = result
|
40
|
+
end
|
41
|
+
|
42
|
+
def + (other)
|
43
|
+
# other_data = other.data.reverse
|
44
|
+
# range = other_data.pop
|
45
|
+
# i = 0
|
46
|
+
# result = []
|
47
|
+
# while range && i < data.length
|
48
|
+
# a = data[i]
|
49
|
+
# if a.min > range.max + 1
|
50
|
+
# new_range = other_data.pop
|
51
|
+
# result << range; range = other_data.pop
|
52
|
+
# elsif a.max < range.min - 1
|
53
|
+
# result << a; i += 1
|
54
|
+
# else
|
55
|
+
# # 直接将 a 合并到 range 里面
|
56
|
+
# start = a.min < range.min ? a.min : range.min
|
57
|
+
# stop = a.max > range.max ? a.max : range.max
|
58
|
+
# range = start..stop; i += 1
|
59
|
+
# end
|
60
|
+
#
|
61
|
+
# end
|
62
|
+
#
|
63
|
+
# result << range if range
|
64
|
+
# while i < data.length
|
65
|
+
# result << data[i]; i += 1
|
66
|
+
# end
|
67
|
+
#
|
68
|
+
# while other_data.length > 0
|
69
|
+
# result << other_data.pop
|
70
|
+
# end
|
71
|
+
# RangeSet.new(result)
|
72
|
+
#
|
73
|
+
result = self.clone
|
74
|
+
other.data.each { |item| result.add(item) }
|
75
|
+
result
|
76
|
+
end
|
77
|
+
|
78
|
+
def | (other)
|
79
|
+
self + other
|
80
|
+
end
|
81
|
+
|
82
|
+
def & (other)
|
83
|
+
result = []
|
84
|
+
i, j = 0, 0
|
85
|
+
|
86
|
+
while i < data.length && j < other.data.length
|
87
|
+
while j < other.data.length && data[i].min > other.data[j].max
|
88
|
+
j += 1
|
89
|
+
end
|
90
|
+
break if j >= other.data.length
|
91
|
+
while i < data.length && other.data[j].min > data[i].max
|
92
|
+
i += 1
|
93
|
+
end
|
94
|
+
break if i >= data.length
|
95
|
+
|
96
|
+
|
97
|
+
a, b = data[i], other.data[j]
|
98
|
+
if a.cover?(b)
|
99
|
+
result << b; j += 1
|
100
|
+
elsif b.cover?(a)
|
101
|
+
result << a; i += 1
|
102
|
+
elsif a.include?(b.min)
|
103
|
+
result << (b.min..a.max); i += 1
|
104
|
+
elsif b.include?(a.min)
|
105
|
+
result << (a.min..b.max); j += 1
|
106
|
+
|
107
|
+
end
|
108
|
+
end
|
109
|
+
|
110
|
+
RangeSet.new(result)
|
111
|
+
# other.data.each do |a|
|
112
|
+
# data.each do |b|
|
113
|
+
# next if a.min > b.max || a.max < b.min
|
114
|
+
# if a.cover?(b)
|
115
|
+
# result.push(b)
|
116
|
+
# elsif b.cover?(a)
|
117
|
+
# result.push(a)
|
118
|
+
# else
|
119
|
+
# start = a.min > b.min ? a.min : b.min
|
120
|
+
# stop = a.max < b.max ? a.max : b.max
|
121
|
+
# result.push(start..stop)
|
122
|
+
# end
|
123
|
+
# end
|
124
|
+
# end
|
125
|
+
# RangeSet.new(result)
|
126
|
+
end
|
127
|
+
|
128
|
+
def add_all(ranges)
|
129
|
+
other_data = ranges.instance_of?(RangeSet) ? ranges.data : ranges
|
130
|
+
other_data.each do |item|
|
131
|
+
add(item)
|
132
|
+
end
|
133
|
+
end
|
134
|
+
|
135
|
+
def delete(range)
|
136
|
+
result = []
|
137
|
+
data.each do |item|
|
138
|
+
next if range.cover?(item)
|
139
|
+
result.push(item.min...range.min) if item.include?(range.min) && range.min > item.min
|
140
|
+
result.push(range.max + 1..item.max) if item.include?(range.max) && range.max < item.max
|
141
|
+
result.push(item) if item.max < range.min || item.min > range.max
|
142
|
+
end
|
143
|
+
|
144
|
+
@data = result
|
145
|
+
end
|
146
|
+
|
147
|
+
def delete_all(ranges)
|
148
|
+
other_data = ranges.instance_of?(RangeSet) ? ranges.data : ranges
|
149
|
+
other_data.each do |item|
|
150
|
+
delete(item)
|
151
|
+
end
|
152
|
+
end
|
153
|
+
|
154
|
+
def - (other)
|
155
|
+
result = self.clone
|
156
|
+
other.data.each { |item| result.delete(item) }
|
157
|
+
result
|
158
|
+
end
|
159
|
+
|
160
|
+
def complement(total)
|
161
|
+
total - self
|
162
|
+
end
|
163
|
+
|
164
|
+
def nil?
|
165
|
+
data.empty?
|
166
|
+
end
|
167
|
+
|
168
|
+
def empty?
|
169
|
+
data.empty?
|
170
|
+
end
|
171
|
+
|
172
|
+
def include?(n)
|
173
|
+
data.each { |item| return true if item.include?(n) }
|
174
|
+
false
|
175
|
+
end
|
176
|
+
|
177
|
+
def cover?(range)
|
178
|
+
data.each do |item|
|
179
|
+
return true if item.cover?(range)
|
180
|
+
end
|
181
|
+
false
|
182
|
+
end
|
183
|
+
|
184
|
+
def start
|
185
|
+
nil if empty?
|
186
|
+
data.sort! do |a, b|
|
187
|
+
a.min == b.min ? a.max <=> b.max : a.min <=> b.min
|
188
|
+
end
|
189
|
+
|
190
|
+
data[0].min
|
191
|
+
end
|
192
|
+
|
193
|
+
def stop
|
194
|
+
nil if empty?
|
195
|
+
data.sort! do |a, b|
|
196
|
+
a.min == b.min ? a.max <=> b.max : a.min <=> b.min
|
197
|
+
end
|
198
|
+
data[-1].max
|
199
|
+
end
|
200
|
+
|
201
|
+
def to_a
|
202
|
+
@data
|
203
|
+
end
|
204
|
+
|
205
|
+
def to_set
|
206
|
+
data.to_set
|
207
|
+
end
|
208
|
+
|
209
|
+
def eql?(other)
|
210
|
+
return false if !other || data.length != other.data.length
|
211
|
+
data.length.times do |i|
|
212
|
+
return false unless data[i].eql?(other.data[i])
|
213
|
+
end
|
214
|
+
true
|
215
|
+
end
|
216
|
+
|
217
|
+
def == (other)
|
218
|
+
self.eql?(other)
|
219
|
+
end
|
220
|
+
|
221
|
+
end
|
222
|
+
end
|
223
|
+
|
@@ -0,0 +1,225 @@
|
|
1
|
+
|
2
|
+
module Antlr4ruby
|
3
|
+
class Parser < Recognizer
|
4
|
+
def initialize(input)
|
5
|
+
super()
|
6
|
+
set_input_stream(input)
|
7
|
+
end
|
8
|
+
|
9
|
+
private
|
10
|
+
attr_accessor :bypass_alt_atn_cache
|
11
|
+
|
12
|
+
protected
|
13
|
+
attr_accessor :err_handler, :input, :ctx,
|
14
|
+
:build_parse_trees, :parse_listeners, :syntax_errors, :matched_eof
|
15
|
+
attr_reader :precedence_stack
|
16
|
+
|
17
|
+
def trigger_enter_rule_event
|
18
|
+
# todo
|
19
|
+
end
|
20
|
+
|
21
|
+
def trigger_exit_rule_event
|
22
|
+
# todo
|
23
|
+
end
|
24
|
+
|
25
|
+
public
|
26
|
+
def reset
|
27
|
+
# todo
|
28
|
+
end
|
29
|
+
|
30
|
+
def match(token_type)
|
31
|
+
# todo
|
32
|
+
end
|
33
|
+
|
34
|
+
def match_wildcard
|
35
|
+
# todo
|
36
|
+
end
|
37
|
+
|
38
|
+
def set_build_parse_tree(build_parse_trees)
|
39
|
+
@build_parse_trees = build_parse_trees
|
40
|
+
end
|
41
|
+
|
42
|
+
def get_build_parse_tree
|
43
|
+
@build_parse_trees
|
44
|
+
end
|
45
|
+
|
46
|
+
# 不要 set_trim_parse_tree get_trim_parse_tree
|
47
|
+
|
48
|
+
def get_parse_listeners
|
49
|
+
# todo
|
50
|
+
end
|
51
|
+
|
52
|
+
def add_parse_listener(listener)
|
53
|
+
# todo
|
54
|
+
end
|
55
|
+
|
56
|
+
def remove_parse_listener(listener)
|
57
|
+
# todo
|
58
|
+
end
|
59
|
+
|
60
|
+
def remove_parse_listeners
|
61
|
+
listeners.clear
|
62
|
+
end
|
63
|
+
|
64
|
+
def get_syntax_error_count
|
65
|
+
@syntax_errors
|
66
|
+
end
|
67
|
+
|
68
|
+
def get_token_factory
|
69
|
+
input.get_token_source.get_token_factory
|
70
|
+
end
|
71
|
+
|
72
|
+
def set_token_factory(factory)
|
73
|
+
input.get_token_source.set_token_factory(factory)
|
74
|
+
end
|
75
|
+
|
76
|
+
def get_atn_with_bypass_alts
|
77
|
+
# todo
|
78
|
+
end
|
79
|
+
|
80
|
+
# compile_parse_tree_pattern 不要
|
81
|
+
|
82
|
+
def get_error_handler
|
83
|
+
@err_handler
|
84
|
+
end
|
85
|
+
|
86
|
+
def set_error_handler(handler)
|
87
|
+
@err_handler = handler
|
88
|
+
end
|
89
|
+
|
90
|
+
def get_token_stream
|
91
|
+
@input
|
92
|
+
end
|
93
|
+
|
94
|
+
def get_input_stream
|
95
|
+
get_token_stream
|
96
|
+
end
|
97
|
+
|
98
|
+
def set_token_stream(input)
|
99
|
+
@input = nil
|
100
|
+
reset
|
101
|
+
@input = input
|
102
|
+
end
|
103
|
+
|
104
|
+
def set_input_stream(input)
|
105
|
+
set_token_stream(input)
|
106
|
+
end
|
107
|
+
|
108
|
+
def get_current_token
|
109
|
+
input.lt(1)
|
110
|
+
end
|
111
|
+
|
112
|
+
def notify_error_listeners(msg, token, e)
|
113
|
+
unless token
|
114
|
+
token = get_current_token
|
115
|
+
end
|
116
|
+
# todo
|
117
|
+
end
|
118
|
+
|
119
|
+
def consume
|
120
|
+
# todo
|
121
|
+
end
|
122
|
+
|
123
|
+
def create_terminal_node(parent, token)
|
124
|
+
# todo
|
125
|
+
end
|
126
|
+
|
127
|
+
def add_contex_to_parse_tree
|
128
|
+
# todo
|
129
|
+
end
|
130
|
+
|
131
|
+
def enter_rule(localctx, state, rule_index)
|
132
|
+
# todo
|
133
|
+
end
|
134
|
+
|
135
|
+
# 不要 enterOuterAlt
|
136
|
+
|
137
|
+
def get_precedence
|
138
|
+
# todo
|
139
|
+
end
|
140
|
+
|
141
|
+
def enter_recursion_rule(localctx, state, rule_index, precedence)
|
142
|
+
# todo
|
143
|
+
end
|
144
|
+
|
145
|
+
def push_new_recursion_context(localctx, state, rule_index)
|
146
|
+
# todo
|
147
|
+
end
|
148
|
+
|
149
|
+
def unroll_recursion_contexts(parent)
|
150
|
+
# todo
|
151
|
+
end
|
152
|
+
|
153
|
+
def get_invoking_context(rule_index)
|
154
|
+
# todo
|
155
|
+
end
|
156
|
+
|
157
|
+
def get_context
|
158
|
+
@ctx
|
159
|
+
end
|
160
|
+
|
161
|
+
def set_context(ctx)
|
162
|
+
@ctx = ctx
|
163
|
+
end
|
164
|
+
|
165
|
+
def precpred(localctx, precedence)
|
166
|
+
# todo
|
167
|
+
# precedence >= @precedence_stack.peek()
|
168
|
+
end
|
169
|
+
|
170
|
+
# 不要 in_context
|
171
|
+
|
172
|
+
def is_expected_token(symbol)
|
173
|
+
# todo
|
174
|
+
end
|
175
|
+
|
176
|
+
def is_matched_eof?
|
177
|
+
@matched_eof
|
178
|
+
end
|
179
|
+
|
180
|
+
def get_expected_tokens
|
181
|
+
# todo
|
182
|
+
end
|
183
|
+
|
184
|
+
def get_expected_tokens_within_current_rule
|
185
|
+
# todo
|
186
|
+
end
|
187
|
+
|
188
|
+
def get_rule_index(rule_name)
|
189
|
+
# todo
|
190
|
+
end
|
191
|
+
|
192
|
+
def get_rule_context
|
193
|
+
@ctx
|
194
|
+
end
|
195
|
+
|
196
|
+
def get_rule_invocation_stack(rule_context)
|
197
|
+
# rule_context = rule_context || ctx
|
198
|
+
# todo
|
199
|
+
end
|
200
|
+
|
201
|
+
def get_dfa_strings
|
202
|
+
# todo
|
203
|
+
end
|
204
|
+
|
205
|
+
def dump_dfa
|
206
|
+
# todo
|
207
|
+
end
|
208
|
+
|
209
|
+
def get_source_name
|
210
|
+
input.get_source_name
|
211
|
+
end
|
212
|
+
|
213
|
+
def get_parse_info
|
214
|
+
# todo
|
215
|
+
end
|
216
|
+
|
217
|
+
def set_profile(profile)
|
218
|
+
# todo
|
219
|
+
end
|
220
|
+
|
221
|
+
|
222
|
+
|
223
|
+
|
224
|
+
end
|
225
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
|
2
|
+
module Antlr4ruby
|
3
|
+
class ParserInterpreter < Parser
|
4
|
+
def initialize(grammar_file_name, vocabulary, rule_names, atn, input)
|
5
|
+
super(input)
|
6
|
+
@grammar_file_name, @atn, @rule_names, @vocabulary, = grammar_file_name, atn, rule_names, vocabulary
|
7
|
+
# number_of_decisions = todo
|
8
|
+
end
|
9
|
+
|
10
|
+
protected
|
11
|
+
attr_reader :grammar_file_name, :atn, :decision_to_dfa, :shared_context_cache,
|
12
|
+
:rule_names, :parent_context_stack
|
13
|
+
|
14
|
+
attr_accessor :override_decision, :override_decision_input_index, :override_decision_alt,
|
15
|
+
:override_decision_reached, :override_decision_root, :root_context
|
16
|
+
private
|
17
|
+
attr_reader :vocabulary
|
18
|
+
|
19
|
+
public
|
20
|
+
# def reset
|
21
|
+
#
|
22
|
+
# end
|
23
|
+
|
24
|
+
end
|
25
|
+
end
|