antlr4 0.9.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/LICENSE +27 -0
- data/README.md +46 -0
- data/lib/antlr4.rb +262 -0
- data/lib/antlr4/BufferedTokenStream.rb +306 -0
- data/lib/antlr4/CommonTokenFactory.rb +53 -0
- data/lib/antlr4/CommonTokenStream.rb +56 -0
- data/lib/antlr4/FileStream.rb +14 -0
- data/lib/antlr4/InputStream.rb +82 -0
- data/lib/antlr4/IntervalSet.rb +341 -0
- data/lib/antlr4/LL1Analyzer.rb +177 -0
- data/lib/antlr4/Lexer.rb +335 -0
- data/lib/antlr4/ListTokenSource.rb +140 -0
- data/lib/antlr4/Parser.rb +562 -0
- data/lib/antlr4/ParserInterpreter.rb +149 -0
- data/lib/antlr4/ParserRuleContext.rb +162 -0
- data/lib/antlr4/PredictionContext.rb +690 -0
- data/lib/antlr4/Recognizer.rb +162 -0
- data/lib/antlr4/RuleContext.rb +226 -0
- data/lib/antlr4/Token.rb +124 -0
- data/lib/antlr4/TokenFactory.rb +3 -0
- data/lib/antlr4/TokenSource.rb +4 -0
- data/lib/antlr4/TokenStream.rb +3 -0
- data/lib/antlr4/TraceListener.rb +23 -0
- data/lib/antlr4/atn/ATN.rb +133 -0
- data/lib/antlr4/atn/ATNConfig.rb +146 -0
- data/lib/antlr4/atn/ATNConfigSet.rb +215 -0
- data/lib/antlr4/atn/ATNDeserializationOptions.rb +62 -0
- data/lib/antlr4/atn/ATNDeserializer.rb +604 -0
- data/lib/antlr4/atn/ATNSimulator.rb +43 -0
- data/lib/antlr4/atn/ATNState.rb +253 -0
- data/lib/antlr4/atn/ATNType.rb +22 -0
- data/lib/antlr4/atn/LexerATNSimulator.rb +612 -0
- data/lib/antlr4/atn/LexerAction.rb +311 -0
- data/lib/antlr4/atn/LexerActionExecutor.rb +134 -0
- data/lib/antlr4/atn/ParserATNSimulator.rb +1622 -0
- data/lib/antlr4/atn/PredictionMode.rb +525 -0
- data/lib/antlr4/atn/SemanticContext.rb +355 -0
- data/lib/antlr4/atn/Transition.rb +297 -0
- data/lib/antlr4/base.rb +60 -0
- data/lib/antlr4/dfa/DFA.rb +128 -0
- data/lib/antlr4/dfa/DFASerializer.rb +77 -0
- data/lib/antlr4/dfa/DFAState.rb +133 -0
- data/lib/antlr4/error.rb +151 -0
- data/lib/antlr4/error/DiagnosticErrorListener.rb +136 -0
- data/lib/antlr4/error/ErrorListener.rb +109 -0
- data/lib/antlr4/error/ErrorStrategy.rb +742 -0
- data/lib/antlr4/tree/Chunk.rb +31 -0
- data/lib/antlr4/tree/ParseTreeMatch.rb +105 -0
- data/lib/antlr4/tree/ParseTreePattern.rb +70 -0
- data/lib/antlr4/tree/ParseTreePatternMatcher.rb +334 -0
- data/lib/antlr4/tree/RuleTagToken.rb +39 -0
- data/lib/antlr4/tree/TokenTagToken.rb +38 -0
- data/lib/antlr4/tree/Tree.rb +204 -0
- data/lib/antlr4/tree/Trees.rb +111 -0
- data/lib/antlr4/version.rb +5 -0
- data/lib/antlr4/xpath/XPath.rb +354 -0
- data/lib/double_key_map.rb +78 -0
- data/lib/java_symbols.rb +24 -0
- data/lib/uuid.rb +87 -0
- data/test/test_intervalset.rb +664 -0
- data/test/test_tree.rb +140 -0
- data/test/test_uuid.rb +122 -0
- metadata +109 -0
data/test/test_tree.rb
ADDED
@@ -0,0 +1,140 @@
|
|
1
|
+
|
2
|
+
require 'test/unit'
|
3
|
+
|
4
|
+
$: << 'lib'
|
5
|
+
require 'antlr4'
|
6
|
+
require 'tree/Tree'
|
7
|
+
require 'Token'
|
8
|
+
|
9
|
+
require 'ostruct'
|
10
|
+
|
11
|
+
class SampleNodeImpl
|
12
|
+
include NodeImpl
|
13
|
+
end
|
14
|
+
|
15
|
+
class TreeTest < Test::Unit::TestCase
|
16
|
+
|
17
|
+
def setup()
|
18
|
+
end
|
19
|
+
def teardown
|
20
|
+
end
|
21
|
+
|
22
|
+
def test_create
|
23
|
+
[Tree, SyntaxTree, ParseTree, RuleNode,
|
24
|
+
TerminalNode, ErrorNode,
|
25
|
+
ParseTreeListener, ParseTreeVisitor].each { |cls|
|
26
|
+
assert_not_nil cls.new
|
27
|
+
assert cls.new.kind_of? cls
|
28
|
+
}
|
29
|
+
end
|
30
|
+
|
31
|
+
def test_terminal_node
|
32
|
+
assert_not_nil TerminalNode.new
|
33
|
+
end
|
34
|
+
def test_error_node
|
35
|
+
assert_not_nil ErrorNode.new
|
36
|
+
end
|
37
|
+
|
38
|
+
def test_listener
|
39
|
+
t = ParseTreeListener.new
|
40
|
+
m = t.methods - Object.new.methods
|
41
|
+
assert m.length == 4
|
42
|
+
assert_nil t.visitTerminal(nil)
|
43
|
+
assert_nil t.visitErrorNode(nil)
|
44
|
+
assert_nil t.enterEveryRule(nil)
|
45
|
+
assert_nil t.exitEveryRule(nil)
|
46
|
+
end
|
47
|
+
|
48
|
+
|
49
|
+
def test_node_impl
|
50
|
+
n = SampleNodeImpl.new(:symbol)
|
51
|
+
n = node_impl_verify(SampleNodeImpl)
|
52
|
+
assert n.kind_of?(NodeImpl), "not kind_of NodeImpl"
|
53
|
+
end
|
54
|
+
|
55
|
+
def node_impl_verify(klass)
|
56
|
+
n = klass.new(:symbol)
|
57
|
+
assert_not_nil n ,"initialize fails"
|
58
|
+
assert_nil n.parentCtx , "init value1 fails"
|
59
|
+
assert_not_nil n.symbol , "init value2 fails"
|
60
|
+
assert :symbol == n.symbol , "Symbol is not set"
|
61
|
+
|
62
|
+
|
63
|
+
assert :symbol == n.getSymbol(), "getSymbol does not work"
|
64
|
+
assert :symbol == n.getPayload(), "getSymbol does not work"
|
65
|
+
assert n.symbol = :new_symbol, "symbol= does not exist"
|
66
|
+
assert :new_symbol == n.symbol, "symbol= does not work"
|
67
|
+
|
68
|
+
assert n.parentCtx = :new_symbol, "parentCtx= does not exist"
|
69
|
+
assert :new_symbol == n.parentCtx, "parentCtx= does not work"
|
70
|
+
assert n.parentCtx == n.getParent, "getParent does not work"
|
71
|
+
|
72
|
+
assert_nil n.getChild(nil), "getChild() does not work"
|
73
|
+
assert n.getChildCount() == 0 , "getChildCount does not work"
|
74
|
+
n
|
75
|
+
end
|
76
|
+
def test_node_impl_with_token
|
77
|
+
token = CommonToken.new([nil,TokenStream.new])
|
78
|
+
token.text = "text"
|
79
|
+
assert_not_nil token , "CommonToken failed to init"
|
80
|
+
n = SampleNodeImpl.new(token)
|
81
|
+
assert_not_nil n, "failed to create samplenodeimpl with token"
|
82
|
+
assert_not_nil n.getSourceInterval() , "getSourceInterval failed"
|
83
|
+
assert_not_nil n.getText() , "getText failed"
|
84
|
+
assert_not_nil n.to_s , "to_s failed"
|
85
|
+
assert n.to_s == "text" , "to_s value failed"
|
86
|
+
end
|
87
|
+
def test_node_impl_symbol
|
88
|
+
tok = OpenStruct.new(:type=> 100, :text => "text")
|
89
|
+
n = SampleNodeImpl.new(tok)
|
90
|
+
assert n
|
91
|
+
assert n.to_s == "text"
|
92
|
+
assert n.getText == "text"
|
93
|
+
tok = OpenStruct.new(:type=> Token::EOF, :text => "text")
|
94
|
+
n = SampleNodeImpl.new(tok)
|
95
|
+
assert n
|
96
|
+
assert n.to_s == "<EOF>"
|
97
|
+
assert n.getText == "text"
|
98
|
+
end
|
99
|
+
def test_node_impl_nil_symbol
|
100
|
+
n = SampleNodeImpl.new(nil)
|
101
|
+
assert n
|
102
|
+
assert_nil n.symbol , "symbol is not nil"
|
103
|
+
assert n.getSourceInterval() , "getSourceInterval failed"
|
104
|
+
assert n.getSourceInterval() == Antlr4::INVALID_INTERVAL , "getSourceInterval failed"
|
105
|
+
end
|
106
|
+
# def getText()
|
107
|
+
# return self.symbol.text
|
108
|
+
# end
|
109
|
+
#
|
110
|
+
# def to_s
|
111
|
+
## if self.symbol.type == Token.EOF then
|
112
|
+
# "<EOF>"
|
113
|
+
# else
|
114
|
+
# self.symbol.text
|
115
|
+
# end
|
116
|
+
# end
|
117
|
+
# end
|
118
|
+
class SampleParseTreeVisitor < ParseTreeVisitor
|
119
|
+
def visitTerminal(a)
|
120
|
+
true
|
121
|
+
end
|
122
|
+
end
|
123
|
+
def test_node_impl_accept
|
124
|
+
n = SampleNodeImpl.new(:symbol)
|
125
|
+
assert_not_nil n , "init failed to create NodeImpl"
|
126
|
+
assert n.accept(SampleParseTreeVisitor.new) , "NodeImpl::accept() fail"
|
127
|
+
end
|
128
|
+
def test_terminal_node_impl
|
129
|
+
t = node_impl_verify(TerminalNodeImpl)
|
130
|
+
assert t.kind_of?(TerminalNode), "Not a kind_of? TerminalNode"
|
131
|
+
end
|
132
|
+
def test_error_node_impl
|
133
|
+
n = node_impl_verify(ErrorNodeImpl)
|
134
|
+
assert n.kind_of?(TerminalNode), "Not a kind_of? TerminalNode"
|
135
|
+
assert n.kind_of?(ErrorNode), "Not a kind_of? ErrorNode"
|
136
|
+
assert_nil n.accept(ParseTreeVisitor.new), "accept(ParseTreeVisitor)"
|
137
|
+
end
|
138
|
+
#
|
139
|
+
|
140
|
+
end
|
data/test/test_uuid.rb
ADDED
@@ -0,0 +1,122 @@
|
|
1
|
+
|
2
|
+
require 'test/unit'
|
3
|
+
|
4
|
+
$: << 'lib'
|
5
|
+
require 'uuid'
|
6
|
+
|
7
|
+
class UuidTest < Test::Unit::TestCase
|
8
|
+
|
9
|
+
def setup()
|
10
|
+
@start = "AADB8D7E-AEEF-4415-AD2B-8204D6CF042E"
|
11
|
+
end
|
12
|
+
def teardown
|
13
|
+
end
|
14
|
+
|
15
|
+
def test_create
|
16
|
+
# BASE_SERIALIZED_UUID = UUID("AADB8D7E-AEEF-4415-AD2B-8204D6CF042E")
|
17
|
+
# Three inputs
|
18
|
+
# a UUID 'string' of hexdigits and - {}
|
19
|
+
# a URN prefixed UUID string
|
20
|
+
# a IO input of bytes as a string
|
21
|
+
# an array of bytes/numbers
|
22
|
+
# a single int
|
23
|
+
# assert titles.length > 0, 'Titles exist'
|
24
|
+
# assert titles.class == Array , 'Titles Array'
|
25
|
+
assert true
|
26
|
+
#start = "AADB8D7E-AEEF-4415-AD2B-8204D6CF042E"
|
27
|
+
#u = UUID.new(start)
|
28
|
+
|
29
|
+
end
|
30
|
+
def test_basic_create
|
31
|
+
u = UUID.new( @start )
|
32
|
+
assert u
|
33
|
+
assert u.class == UUID
|
34
|
+
uuid = UUID.new( "{#{@start}}" )
|
35
|
+
assert uuid
|
36
|
+
assert uuid.class == UUID
|
37
|
+
urn_uuid = UUID.new("urn:" + @start )
|
38
|
+
assert urn_uuid
|
39
|
+
assert u.class == UUID
|
40
|
+
assert u == urn_uuid
|
41
|
+
assert urn_uuid == uuid
|
42
|
+
assert u == uuid
|
43
|
+
end
|
44
|
+
def test_string
|
45
|
+
u = UUID.new( @start )
|
46
|
+
assert u
|
47
|
+
assert @start.downcase == u.to_s.downcase
|
48
|
+
assert @start.upcase == u.to_s.upcase
|
49
|
+
end
|
50
|
+
def test_int_value
|
51
|
+
start_value = 5233100606242806050955395731361295
|
52
|
+
start_uuid = "00010203-0405-0607-0809-0a0b0c0d0e0f"
|
53
|
+
u1 = UUID.new(start_value)
|
54
|
+
assert u1
|
55
|
+
assert u1.to_i == start_value
|
56
|
+
assert u1.to_s == start_uuid
|
57
|
+
end
|
58
|
+
|
59
|
+
def test_create_from_byte_array
|
60
|
+
ba = [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15]
|
61
|
+
#).pack("C*").chars.reduce(0) {|a,b| ((a << 8)| b.ord) }
|
62
|
+
ba_int = 5233100606242806050955395731361295
|
63
|
+
bs = "\x00\x00\x01\x02\x03\x04\x05\x06\a\b\t\n\v\f\r\x0E\x0F"
|
64
|
+
u1 = UUID.create_from_bytes(ba)
|
65
|
+
assert u1
|
66
|
+
u2 = UUID.new(ba_int)
|
67
|
+
assert u2
|
68
|
+
assert u1 == u2 , "Equality test"
|
69
|
+
assert u1.bytes_array == u2.bytes_array, "Compare created bytes_array"
|
70
|
+
end
|
71
|
+
|
72
|
+
def test_bytes_array
|
73
|
+
ba_uuid = '00010203-0405-0607-0809-0a0b0c0d0e0f'
|
74
|
+
ba = [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15]
|
75
|
+
ba_int = 5233100606242806050955395731361295
|
76
|
+
u = UUID.new(ba_int)
|
77
|
+
assert u
|
78
|
+
assert u.bytes_array == ba
|
79
|
+
assert u.to_s == ba_uuid
|
80
|
+
end
|
81
|
+
def test_bytes
|
82
|
+
ba_int = 5233100606242806050955395731361295
|
83
|
+
bs = "\x00\x01\x02\x03\x04\x05\x06\a\b\t\n\v\f\r\x0E\x0F"
|
84
|
+
u = UUID.create_from_bytes(ba_int)
|
85
|
+
assert u
|
86
|
+
assert u.bytes.unpack("H*") == bs.unpack("H*"), "Compare bytes to std byte string "
|
87
|
+
u2 = UUID.create_from_bytes(bs)
|
88
|
+
assert u2
|
89
|
+
assert u2.bytes == u.bytes
|
90
|
+
|
91
|
+
end
|
92
|
+
def test_eql
|
93
|
+
u1 = UUID.new(@start)
|
94
|
+
u2 = UUID.new("{#{@start}}")
|
95
|
+
assert u1.eql? u2
|
96
|
+
end
|
97
|
+
def test_io
|
98
|
+
require 'tempfile'
|
99
|
+
x = UUID.new('{00010203-0405-0607-0809-0a0b0c0d0e0f}')
|
100
|
+
assert x
|
101
|
+
tmpfile = Tempfile.new('test-uuid')
|
102
|
+
tmpfile.write(x.bytes)
|
103
|
+
tmpfile.rewind
|
104
|
+
bytes = tmpfile.read
|
105
|
+
v = UUID.create_from_bytes(bytes)
|
106
|
+
assert v
|
107
|
+
assert x == v
|
108
|
+
tmpfile.close!
|
109
|
+
end
|
110
|
+
end
|
111
|
+
|
112
|
+
__END__
|
113
|
+
# byte_string = ().pack("C*").split('').reduce(0) {|a,b| a << 4| b.ord }
|
114
|
+
#([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15]).pack("C*").split('').reduce(0) {|a,b| a << 4| b.ord }
|
115
|
+
|
116
|
+
"\3\u0430\ud6d1\u8206\uad2d\u4417\uaef1\u8d80\uaadd\2\37\u023a" \
|
117
|
+
"\b\1\4\2\t\2\4\3\t\3\4\4\t\4\4\5\t\5\4\6\t\6\4\7\t\7\4\b\t\b\4" \
|
118
|
+
"\t\t\t\4\n\t\n\4\13\t\13\4\f\t\f\4\r\t\r\4\16\t\16\4\17\t\17\4" \
|
119
|
+
|
120
|
+
"\3\u0430\ud6d1\u8206\uad2d\u4417\uaef1\u8d80\uaadd\2\37\u023a\b\1\4\2"
|
121
|
+
"\t\2\4\3\t\3\4\4\t\4\4\5\t\5\4\6\t\6\4\7\t\7\4\b\t\b\4\t\t\t\4\n\t\n\4"
|
122
|
+
"\13\t\13\4\f\t\f\4\r\t\r\4\16\t\16\4\17\t\17\4\20\t\20\4\21\t\21\4\22"
|
metadata
ADDED
@@ -0,0 +1,109 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: antlr4
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.9.2
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Chad Slaughter
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2015-03-31 00:00:00.000000000 Z
|
12
|
+
dependencies: []
|
13
|
+
description: "Ruby implementation of the Antlr4 runtime.\nThis is needed by any parser/lexer
|
14
|
+
written in Antlr4 using the target \nlangague=Ruby. "
|
15
|
+
email:
|
16
|
+
- chad.slaughter+antlr4@gmail.com
|
17
|
+
executables: []
|
18
|
+
extensions: []
|
19
|
+
extra_rdoc_files: []
|
20
|
+
files:
|
21
|
+
- LICENSE
|
22
|
+
- README.md
|
23
|
+
- lib/antlr4.rb
|
24
|
+
- lib/antlr4/BufferedTokenStream.rb
|
25
|
+
- lib/antlr4/CommonTokenFactory.rb
|
26
|
+
- lib/antlr4/CommonTokenStream.rb
|
27
|
+
- lib/antlr4/FileStream.rb
|
28
|
+
- lib/antlr4/InputStream.rb
|
29
|
+
- lib/antlr4/IntervalSet.rb
|
30
|
+
- lib/antlr4/LL1Analyzer.rb
|
31
|
+
- lib/antlr4/Lexer.rb
|
32
|
+
- lib/antlr4/ListTokenSource.rb
|
33
|
+
- lib/antlr4/Parser.rb
|
34
|
+
- lib/antlr4/ParserInterpreter.rb
|
35
|
+
- lib/antlr4/ParserRuleContext.rb
|
36
|
+
- lib/antlr4/PredictionContext.rb
|
37
|
+
- lib/antlr4/Recognizer.rb
|
38
|
+
- lib/antlr4/RuleContext.rb
|
39
|
+
- lib/antlr4/Token.rb
|
40
|
+
- lib/antlr4/TokenFactory.rb
|
41
|
+
- lib/antlr4/TokenSource.rb
|
42
|
+
- lib/antlr4/TokenStream.rb
|
43
|
+
- lib/antlr4/TraceListener.rb
|
44
|
+
- lib/antlr4/atn/ATN.rb
|
45
|
+
- lib/antlr4/atn/ATNConfig.rb
|
46
|
+
- lib/antlr4/atn/ATNConfigSet.rb
|
47
|
+
- lib/antlr4/atn/ATNDeserializationOptions.rb
|
48
|
+
- lib/antlr4/atn/ATNDeserializer.rb
|
49
|
+
- lib/antlr4/atn/ATNSimulator.rb
|
50
|
+
- lib/antlr4/atn/ATNState.rb
|
51
|
+
- lib/antlr4/atn/ATNType.rb
|
52
|
+
- lib/antlr4/atn/LexerATNSimulator.rb
|
53
|
+
- lib/antlr4/atn/LexerAction.rb
|
54
|
+
- lib/antlr4/atn/LexerActionExecutor.rb
|
55
|
+
- lib/antlr4/atn/ParserATNSimulator.rb
|
56
|
+
- lib/antlr4/atn/PredictionMode.rb
|
57
|
+
- lib/antlr4/atn/SemanticContext.rb
|
58
|
+
- lib/antlr4/atn/Transition.rb
|
59
|
+
- lib/antlr4/base.rb
|
60
|
+
- lib/antlr4/dfa/DFA.rb
|
61
|
+
- lib/antlr4/dfa/DFASerializer.rb
|
62
|
+
- lib/antlr4/dfa/DFAState.rb
|
63
|
+
- lib/antlr4/error.rb
|
64
|
+
- lib/antlr4/error/DiagnosticErrorListener.rb
|
65
|
+
- lib/antlr4/error/ErrorListener.rb
|
66
|
+
- lib/antlr4/error/ErrorStrategy.rb
|
67
|
+
- lib/antlr4/tree/Chunk.rb
|
68
|
+
- lib/antlr4/tree/ParseTreeMatch.rb
|
69
|
+
- lib/antlr4/tree/ParseTreePattern.rb
|
70
|
+
- lib/antlr4/tree/ParseTreePatternMatcher.rb
|
71
|
+
- lib/antlr4/tree/RuleTagToken.rb
|
72
|
+
- lib/antlr4/tree/TokenTagToken.rb
|
73
|
+
- lib/antlr4/tree/Tree.rb
|
74
|
+
- lib/antlr4/tree/Trees.rb
|
75
|
+
- lib/antlr4/version.rb
|
76
|
+
- lib/antlr4/xpath/XPath.rb
|
77
|
+
- lib/double_key_map.rb
|
78
|
+
- lib/java_symbols.rb
|
79
|
+
- lib/uuid.rb
|
80
|
+
- test/test_intervalset.rb
|
81
|
+
- test/test_tree.rb
|
82
|
+
- test/test_uuid.rb
|
83
|
+
homepage: https://github.com/slaught/antlr4-ruby
|
84
|
+
licenses: []
|
85
|
+
metadata: {}
|
86
|
+
post_install_message:
|
87
|
+
rdoc_options: []
|
88
|
+
require_paths:
|
89
|
+
- lib
|
90
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
91
|
+
requirements:
|
92
|
+
- - ">="
|
93
|
+
- !ruby/object:Gem::Version
|
94
|
+
version: '0'
|
95
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
96
|
+
requirements:
|
97
|
+
- - ">="
|
98
|
+
- !ruby/object:Gem::Version
|
99
|
+
version: '0'
|
100
|
+
requirements: []
|
101
|
+
rubyforge_project:
|
102
|
+
rubygems_version: 2.4.5
|
103
|
+
signing_key:
|
104
|
+
specification_version: 4
|
105
|
+
summary: Ruby implementation of the Antlr4 runtime
|
106
|
+
test_files:
|
107
|
+
- test/test_intervalset.rb
|
108
|
+
- test/test_tree.rb
|
109
|
+
- test/test_uuid.rb
|