antelope 0.1.11 → 0.2.0
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 +4 -4
- data/examples/liquidscript.ace +162 -0
- data/lib/antelope/ace/token.rb +46 -5
- data/lib/antelope/generation/recognizer/rule.rb +9 -5
- data/lib/antelope/generation/recognizer/state.rb +2 -2
- data/lib/antelope/generation/recognizer.rb +1 -1
- data/lib/antelope/generator.rb +2 -1
- data/lib/antelope/version.rb +1 -1
- metadata +4 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 516fa3871c9dac6ede9010e5dce27e6427e54c0a
|
4
|
+
data.tar.gz: 05950417e688f1e91bd72533a6fba22e5b4f0c39
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5f798c4757105920b7b552891c481587654bbbf3df69fb0ab5eff2e0c6a927ddf6b5f746fa548bdf71970aebda029c249e0d1ea82d418dc88d22d6c4b378f7a1
|
7
|
+
data.tar.gz: 1a800f78ea7ba51e36a3d4e24bd905dd49b7f7b37bc4eccebbc6872230d44653252b4b288b6988e6c3470e37face35e89ffb427e7d6e73553b221c1e4cc419be
|
@@ -0,0 +1,162 @@
|
|
1
|
+
%require "~> 0.1"
|
2
|
+
%generator "ruby"
|
3
|
+
|
4
|
+
%define api.push-pull pull
|
5
|
+
%define panic-mode true
|
6
|
+
%define ruby.error-class {SyntaxError}
|
7
|
+
|
8
|
+
%terminal REGEX
|
9
|
+
%terminal DIRECTIVE
|
10
|
+
%terminal IDENTIFIER
|
11
|
+
%terminal KEYWORD
|
12
|
+
%terminal NUMBER
|
13
|
+
%terminal SSTRING
|
14
|
+
%terminal ACTION
|
15
|
+
%terminal BINOP
|
16
|
+
%terminal PREUNOP
|
17
|
+
%terminal UNOP
|
18
|
+
%terminal HEREDOC
|
19
|
+
%terminal HEREDOC_REF
|
20
|
+
%terminal IHEREDOC
|
21
|
+
%terminal IHEREDOC_REF
|
22
|
+
%terminal IHEREDOC_BEGIN
|
23
|
+
%terminal ISTRING
|
24
|
+
%terminal ISTRING_BEGIN
|
25
|
+
%terminal CLASS "class"
|
26
|
+
%terminal MODULE "module"
|
27
|
+
%terminal IF "if"
|
28
|
+
%terminal UNLESS "unless"
|
29
|
+
%terminal ELSIF "elsif"
|
30
|
+
%terminal ELSE "else"
|
31
|
+
%terminal FOR "for"
|
32
|
+
%terminal WHILE "while"
|
33
|
+
%terminal TRY "try"
|
34
|
+
%terminal CATCH "catch"
|
35
|
+
%terminal FINALLY "finally"
|
36
|
+
%terminal RETURN "return"
|
37
|
+
%terminal IN "in"
|
38
|
+
%terminal ARROW "->"
|
39
|
+
%terminal EQUAL "="
|
40
|
+
%terminal LBRACE "{"
|
41
|
+
%terminal LPAREN "("
|
42
|
+
%terminal LBRACK "["
|
43
|
+
%terminal RBRACE "}"
|
44
|
+
%terminal RPAREN ")"
|
45
|
+
%terminal RBRACK "]"
|
46
|
+
%terminal COLON ":"
|
47
|
+
%terminal RANGE ".."
|
48
|
+
%terminal ERANGE "..."
|
49
|
+
%terminal PROP "."
|
50
|
+
%terminal COMMA ","
|
51
|
+
%terminal MINUS "-"
|
52
|
+
%terminal PLUS "+"
|
53
|
+
%terminal NEWLINE "\n"
|
54
|
+
|
55
|
+
%null.data left LPAREN LBRACK BINOP MINUS PLUS
|
56
|
+
%null.data right EQUAL PROP RANGE ERANGE UNOP
|
57
|
+
|
58
|
+
%%
|
59
|
+
|
60
|
+
main: expressions.maybe
|
61
|
+
|
62
|
+
expressions.maybe: expressions
|
63
|
+
| nothing
|
64
|
+
|
65
|
+
expressions: expressions block
|
66
|
+
| block
|
67
|
+
|
68
|
+
block: LBRACE expressions RBRACE
|
69
|
+
| expression
|
70
|
+
|
71
|
+
expression: conditional
|
72
|
+
| class
|
73
|
+
| module
|
74
|
+
| loop
|
75
|
+
| action
|
76
|
+
| exception
|
77
|
+
| directive
|
78
|
+
| vexpression
|
79
|
+
|
80
|
+
vexpression: NUMBER
|
81
|
+
| IDENTIFIER
|
82
|
+
| ISTRING
|
83
|
+
| SSTRING
|
84
|
+
| KEYWORD
|
85
|
+
| REGEX
|
86
|
+
| NEWLINE
|
87
|
+
| interpolation
|
88
|
+
| PLUS vexpression
|
89
|
+
| MINUS vexpression
|
90
|
+
| object
|
91
|
+
| array
|
92
|
+
| function
|
93
|
+
| PREUNOP vexpression
|
94
|
+
| UNOP vexpression
|
95
|
+
| HEREDOC_REF
|
96
|
+
| IHEREDOC_REF
|
97
|
+
| heredoc
|
98
|
+
| vexpression LPAREN vexpression.parameters.maybe RPAREN
|
99
|
+
| vexpression EQUAL vexpression
|
100
|
+
| vexpression PROP IDENTIFIER
|
101
|
+
| vexpression LBRACK vexpression RBRACK
|
102
|
+
| vexpression RANGE vexpression
|
103
|
+
| vexpression ERANGE vexpression
|
104
|
+
| vexpression BINOP vexpression
|
105
|
+
| vexpression MINUS vexpression
|
106
|
+
| vexpression PLUS vexpression
|
107
|
+
| vexpression UNOP
|
108
|
+
|
109
|
+
vexpression.parameters.maybe: vexpression.parameters
|
110
|
+
| nothing
|
111
|
+
|
112
|
+
vexpression.parameters: vexpression.parameters COMMA vexpression
|
113
|
+
| vexpression
|
114
|
+
|
115
|
+
object: LBRACE RBRACE
|
116
|
+
array: LBRACK RBRACK
|
117
|
+
function: LPAREN RPAREN ARROW
|
118
|
+
heredoc: HEREDOC
|
119
|
+
| IHEREDOC
|
120
|
+
|
121
|
+
interpolation: interpolation.string
|
122
|
+
| interpolation.heredoc
|
123
|
+
|
124
|
+
interpolation.heredoc: IHEREDOC_BEGIN vexpression interpolation.heredoc.finish
|
125
|
+
interpolation.heredoc.finish: interpolation.heredoc
|
126
|
+
| IHEREDOC
|
127
|
+
|
128
|
+
interpolation.string: ISTRING_BEGIN vexpression interpolation.string.finish
|
129
|
+
interpolation.string.finish: interpolation.string
|
130
|
+
| ISTRING
|
131
|
+
|
132
|
+
conditional: IF LPAREN vexpression RPAREN block conditional.continue
|
133
|
+
| UNLESS LPAREN vexpression RPAREN block
|
134
|
+
|
135
|
+
conditional.continue: ELSIF LPAREN vexpression RPAREN block conditional.continue
|
136
|
+
| ELSE block
|
137
|
+
|
138
|
+
class: CLASS IDENTIFIER RBRACE LBRACE
|
139
|
+
module: MODULE IDENTIFIER RBRACE LBRACE
|
140
|
+
|
141
|
+
loop: WHILE LPAREN vexpression RPAREN block
|
142
|
+
| FOR LPAREN IDENTIFIER IN vexpression RPAREN block
|
143
|
+
| FOR LPAREN vexpression RPAREN block
|
144
|
+
|
145
|
+
action: RETURN
|
146
|
+
| ACTION
|
147
|
+
|
148
|
+
exception: TRY block exception.catch.maybe exception.finally.maybe
|
149
|
+
exception.catch.maybe: exception.catch
|
150
|
+
| nothing
|
151
|
+
exception.finally.maybe: exception.finally
|
152
|
+
| nothing
|
153
|
+
exception.catch: CATCH exception.catch.possible block
|
154
|
+
exception.catch.possible: LPAREN IDENTIFIER RPAREN
|
155
|
+
| LPAREN RPAREN
|
156
|
+
| nothing
|
157
|
+
|
158
|
+
exception.finally: FINALLY block
|
159
|
+
|
160
|
+
directive: COLON LBRACK expressions RBRACK
|
161
|
+
|
162
|
+
%%
|
data/lib/antelope/ace/token.rb
CHANGED
@@ -26,20 +26,20 @@ module Antelope
|
|
26
26
|
# handle lookahead sets.
|
27
27
|
#
|
28
28
|
# @return [Recognizer::State]
|
29
|
-
|
29
|
+
attr_reader :from
|
30
30
|
|
31
31
|
# The to state that this token is transitioned to. This is the
|
32
32
|
# _destination_. This is used in the constructor in order to
|
33
33
|
# handle lookahead sets.
|
34
34
|
#
|
35
35
|
# @return [Recognizer::State]
|
36
|
-
|
36
|
+
attr_reader :to
|
37
37
|
|
38
38
|
# The type of the token. This is given by a caret argument to
|
39
39
|
# the grammar. This is primarily used for generators.
|
40
40
|
#
|
41
41
|
# @return [String]
|
42
|
-
|
42
|
+
attr_reader :type
|
43
43
|
|
44
44
|
attr_accessor :id
|
45
45
|
|
@@ -97,6 +97,33 @@ module Antelope
|
|
97
97
|
false
|
98
98
|
end
|
99
99
|
|
100
|
+
# Sets the from state of the token and invalidates the cache.
|
101
|
+
#
|
102
|
+
# @param state [Recognizer::State]
|
103
|
+
# @return [void]
|
104
|
+
def from=(state)
|
105
|
+
invalidate_cache!
|
106
|
+
@from = state
|
107
|
+
end
|
108
|
+
|
109
|
+
# Sets the to state of the token and invalidates the cache.
|
110
|
+
#
|
111
|
+
# @param state [Recognizer::State]
|
112
|
+
# @return [void]
|
113
|
+
def to=(state)
|
114
|
+
invalidate_cache!
|
115
|
+
@to = state
|
116
|
+
end
|
117
|
+
|
118
|
+
# Sets the type of the token and invalidates the cache.
|
119
|
+
#
|
120
|
+
# @param type [String]
|
121
|
+
# @return [void]
|
122
|
+
def type=(type)
|
123
|
+
invalidate_cache!
|
124
|
+
@type = type
|
125
|
+
end
|
126
|
+
|
100
127
|
# Gives a string representation of the token. The output is
|
101
128
|
# formatted like so: `<data>["(" [<from_id>][:<to_id>] ")"]`,
|
102
129
|
# where `<data>` is either the value (if it's non-nil) or the
|
@@ -149,6 +176,12 @@ module Antelope
|
|
149
176
|
end
|
150
177
|
end
|
151
178
|
|
179
|
+
def ==(other)
|
180
|
+
hash == other.hash if other.respond_to?(:hash)
|
181
|
+
end
|
182
|
+
|
183
|
+
alias_method :eql?, :==
|
184
|
+
|
152
185
|
# Compares this class and another object, fuzzily. If the other
|
153
186
|
# object is a token, it removes the transitions (to and from)
|
154
187
|
# on both objects and compares them like that. Otherwise, it
|
@@ -171,6 +204,14 @@ module Antelope
|
|
171
204
|
self.class.new(name, @type, @id, @value)
|
172
205
|
end
|
173
206
|
|
207
|
+
# Invalidates the cache.
|
208
|
+
#
|
209
|
+
# @return [void]
|
210
|
+
def invalidate_cache!
|
211
|
+
@_hash = nil
|
212
|
+
@_array = nil
|
213
|
+
end
|
214
|
+
|
174
215
|
# Generates a hash for this class.
|
175
216
|
#
|
176
217
|
# @note This is not intended for use. It is only defined to be
|
@@ -178,7 +219,7 @@ module Antelope
|
|
178
219
|
# @private
|
179
220
|
# @return [Object]
|
180
221
|
def hash
|
181
|
-
to_a.hash
|
222
|
+
@_hash ||= to_a.hash
|
182
223
|
end
|
183
224
|
|
184
225
|
alias_method :eql?, :==
|
@@ -190,7 +231,7 @@ module Antelope
|
|
190
231
|
# @private
|
191
232
|
# @return [Array<(Recognizer::State, Recognizer::State, Class, Symbol, String?)>]
|
192
233
|
def to_a
|
193
|
-
[to, from, self.class, name, @value]
|
234
|
+
@_array ||= [to, from, self.class, name, @value]
|
194
235
|
end
|
195
236
|
end
|
196
237
|
end
|
@@ -19,7 +19,7 @@ module Antelope
|
|
19
19
|
# The right-hand side of the rule.
|
20
20
|
#
|
21
21
|
# @return [Array<Ace::Token>]
|
22
|
-
|
22
|
+
attr_reader :right
|
23
23
|
|
24
24
|
# The current position inside of the rule.
|
25
25
|
#
|
@@ -160,6 +160,12 @@ module Antelope
|
|
160
160
|
end
|
161
161
|
end
|
162
162
|
|
163
|
+
def ==(other)
|
164
|
+
hash == other.hash if other.respond_to?(:hash)
|
165
|
+
end
|
166
|
+
|
167
|
+
alias_method :eql?, :==
|
168
|
+
|
163
169
|
# Fuzzily compares this object to another object. If the
|
164
170
|
# other object is not a rule, it delegates the comparison.
|
165
171
|
# Otherwise, it fuzzily compares the left and right sides.
|
@@ -192,11 +198,9 @@ module Antelope
|
|
192
198
|
# @private
|
193
199
|
# @return [Object]
|
194
200
|
def hash
|
195
|
-
to_a.hash
|
201
|
+
@_hash ||= to_a.hash
|
196
202
|
end
|
197
203
|
|
198
|
-
alias_method :eql?, :==
|
199
|
-
|
200
204
|
# Creates an array representation of this class.
|
201
205
|
#
|
202
206
|
# @note This is not intended for use. It is only defined to
|
@@ -204,7 +208,7 @@ module Antelope
|
|
204
208
|
# @private
|
205
209
|
# @return [Array<(Ace::Token::Nonterminal, Array<Ace::Token>, Numeric)>]
|
206
210
|
def to_a
|
207
|
-
[left, right, position]
|
211
|
+
@_array ||= [left, right, position]
|
208
212
|
end
|
209
213
|
end
|
210
214
|
end
|
@@ -90,13 +90,13 @@ module Antelope
|
|
90
90
|
when State
|
91
91
|
rule.rules.map(&:clone).each { |r| self << r }
|
92
92
|
when Rule
|
93
|
-
rules << rule unless rules.include? rule
|
93
|
+
rules << rule #unless rules.include? rule
|
94
94
|
when Array, Set
|
95
95
|
rule.each do |part|
|
96
96
|
self << part
|
97
97
|
end
|
98
98
|
else
|
99
|
-
raise ArgumentError, "Expected
|
99
|
+
raise ArgumentError, "Expected State or Rule, " \
|
100
100
|
"got #{rule.class}"
|
101
101
|
end
|
102
102
|
|
data/lib/antelope/generator.rb
CHANGED
@@ -36,7 +36,8 @@ module Antelope
|
|
36
36
|
# @param name [String, Symbol] a name to associate the generator
|
37
37
|
# with.
|
38
38
|
def register_generator(generator, *names)
|
39
|
-
names = [names].flatten
|
39
|
+
names = [names].flatten
|
40
|
+
raise ArgumentError,
|
40
41
|
"Requires at least one name" unless names.any?
|
41
42
|
raise ArgumentError,
|
42
43
|
"All name values must be a Symbol or string" unless names.
|
data/lib/antelope/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: antelope
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jeremy Rodi
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2015-01-08 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: hashie
|
@@ -118,6 +118,7 @@ files:
|
|
118
118
|
- examples/deterministic.ace
|
119
119
|
- examples/example.ace
|
120
120
|
- examples/example.output
|
121
|
+
- examples/liquidscript.ace
|
121
122
|
- examples/simple.ace
|
122
123
|
- lib/antelope.rb
|
123
124
|
- lib/antelope/ace.rb
|
@@ -215,3 +216,4 @@ test_files:
|
|
215
216
|
- spec/spec_helper.rb
|
216
217
|
- spec/support/benchmark_helper.rb
|
217
218
|
- spec/support/grammar_helper.rb
|
219
|
+
has_rdoc:
|