antlr4 0.9.2
Sign up to get free protection for your applications and to get access to all the features.
- 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
|