abnf-parser 0.8.0 → 0.8.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/abnf/parser.rb +28 -0
- data/lib/abnf/{compiler → parser}/ast.rb +1 -1
- data/lib/abnf/parser/compiler.rb +53 -0
- data/lib/abnf/parser/controls.rb +4 -0
- data/lib/abnf/{compiler → parser}/controls/ast.rb +4 -4
- data/lib/abnf/parser/controls/grammar.rb +32 -0
- data/lib/abnf/{compiler → parser}/controls/rules.rb +9 -9
- data/lib/abnf/{compiler → parser}/controls/text_stream.rb +3 -3
- data/lib/abnf/{compiler → parser}/errors.rb +1 -1
- data/lib/abnf/{compiler → parser}/grammar.rb +1 -1
- data/lib/abnf/{compiler → parser}/grammar/alternative.rb +2 -2
- data/lib/abnf/{compiler → parser}/grammar/char_val.rb +2 -2
- data/lib/abnf/{compiler → parser}/grammar/concatenation.rb +2 -2
- data/lib/abnf/{compiler → parser}/grammar/element.rb +2 -2
- data/lib/abnf/{compiler → parser}/grammar/num_val.rb +3 -3
- data/lib/abnf/{compiler → parser}/grammar/prose_val.rb +2 -2
- data/lib/abnf/{compiler → parser}/grammar/repetition.rb +2 -2
- data/lib/abnf/{compiler → parser}/grammar/rule.rb +1 -1
- data/lib/abnf/{compiler → parser}/grammar/rulename.rb +2 -2
- data/lib/abnf/{compiler → parser}/rule.rb +2 -2
- data/lib/abnf/{compiler → parser}/rule/alternative.rb +1 -1
- data/lib/abnf/{compiler → parser}/rule/concatenation.rb +1 -1
- data/lib/abnf/{compiler → parser}/rule/none.rb +1 -1
- data/lib/abnf/{compiler → parser}/rule/optional.rb +1 -1
- data/lib/abnf/{compiler → parser}/rule/reference.rb +1 -1
- data/lib/abnf/{compiler → parser}/rule/repetition.rb +1 -1
- data/lib/abnf/{compiler → parser}/rule/terminal_value.rb +1 -1
- data/lib/abnf/{compiler → parser}/rule/value_range.rb +1 -1
- data/lib/abnf/{compiler → parser}/rule_list.rb +2 -2
- data/lib/abnf/{compiler → parser}/rule_list/entry.rb +1 -1
- data/lib/abnf/{compiler → parser}/text_stream.rb +1 -1
- metadata +32 -32
- data/lib/abnf/compiler.rb +0 -28
- data/lib/abnf/compiler/controls.rb +0 -4
- data/lib/abnf/compiler/controls/grammar.rb +0 -32
- data/lib/abnf/compiler/grammar/compiler.rb +0 -55
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 290cf1be0e24f0bc64e51280c1cff38a11520bfc
|
4
|
+
data.tar.gz: 61f5f4ae1bae589af2a80839dc8be01ad642f3e8
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 0c06a722202c3e87b6a895b0206ee6a2674a88f90875405319de1ae4f61a33c995a7f096af29311333833aa2efa14d893987ad1f29532aa436ef05fdc5adc5c4
|
7
|
+
data.tar.gz: 4b51e5881e2cafe761e6db107894ae5af457e6308f95ec7deaabc4fd06ba849670e964899da3e77f0235068c082c90288da613395fd23460e46da218f6e79521
|
data/lib/abnf/parser.rb
ADDED
@@ -0,0 +1,28 @@
|
|
1
|
+
require 'abnf/parser/ast'
|
2
|
+
require 'abnf/parser/compiler'
|
3
|
+
require 'abnf/parser/errors'
|
4
|
+
require 'abnf/parser/text_stream'
|
5
|
+
|
6
|
+
require 'abnf/parser/grammar'
|
7
|
+
require 'abnf/parser/grammar/alternative'
|
8
|
+
require 'abnf/parser/grammar/char_val'
|
9
|
+
require 'abnf/parser/grammar/concatenation'
|
10
|
+
require 'abnf/parser/grammar/element'
|
11
|
+
require 'abnf/parser/grammar/num_val'
|
12
|
+
require 'abnf/parser/grammar/prose_val'
|
13
|
+
require 'abnf/parser/grammar/repetition'
|
14
|
+
require 'abnf/parser/grammar/rule'
|
15
|
+
require 'abnf/parser/grammar/rulename'
|
16
|
+
|
17
|
+
require 'abnf/parser/rule'
|
18
|
+
require 'abnf/parser/rule/alternative'
|
19
|
+
require 'abnf/parser/rule/concatenation'
|
20
|
+
require 'abnf/parser/rule/none'
|
21
|
+
require 'abnf/parser/rule/optional'
|
22
|
+
require 'abnf/parser/rule/reference'
|
23
|
+
require 'abnf/parser/rule/repetition'
|
24
|
+
require 'abnf/parser/rule/terminal_value'
|
25
|
+
require 'abnf/parser/rule/value_range'
|
26
|
+
|
27
|
+
require 'abnf/parser/rule_list'
|
28
|
+
require 'abnf/parser/rule_list/entry'
|
@@ -0,0 +1,53 @@
|
|
1
|
+
module ABNF
|
2
|
+
module Parser
|
3
|
+
module Compiler
|
4
|
+
def self.included cls
|
5
|
+
cls.extend BuildMethod
|
6
|
+
cls.extend CompileMethod
|
7
|
+
cls.extend PatternMethod
|
8
|
+
end
|
9
|
+
|
10
|
+
module CompileMethod
|
11
|
+
def compile? stream
|
12
|
+
if compile stream then true else false end
|
13
|
+
end
|
14
|
+
|
15
|
+
def compile stream
|
16
|
+
stream = ABNF::Parser::TextStream(stream)
|
17
|
+
pattern = self.pattern
|
18
|
+
match_data = stream.match pattern
|
19
|
+
|
20
|
+
return unless match_data
|
21
|
+
|
22
|
+
instance = build stream, match_data
|
23
|
+
instance.()
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
module BuildMethod
|
28
|
+
def build stream, match_data
|
29
|
+
instance = new stream, match_data
|
30
|
+
instance
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
module PatternMethod
|
35
|
+
def pattern
|
36
|
+
if const_defined? :PATTERN
|
37
|
+
const_get :PATTERN
|
38
|
+
else
|
39
|
+
@null_pattern ||= %r{}
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
attr_reader :match_data
|
45
|
+
attr_reader :stream
|
46
|
+
|
47
|
+
def initialize stream, match_data = nil
|
48
|
+
@match_data = match_data
|
49
|
+
@stream = stream
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
@@ -1,23 +1,23 @@
|
|
1
1
|
module ABNF
|
2
|
-
module
|
2
|
+
module Parser
|
3
3
|
module Controls
|
4
4
|
module AST
|
5
5
|
extend self
|
6
6
|
|
7
7
|
def leaf text = nil
|
8
8
|
text ||= 'some-string'
|
9
|
-
|
9
|
+
Parser::AST.leaf text
|
10
10
|
end
|
11
11
|
|
12
12
|
def repetition
|
13
|
-
|
13
|
+
Parser::AST.repetition(
|
14
14
|
leaf('some-string'),
|
15
15
|
leaf('other-string'),
|
16
16
|
)
|
17
17
|
end
|
18
18
|
|
19
19
|
def sequence
|
20
|
-
|
20
|
+
Parser::AST.sequence(
|
21
21
|
leaf('some-string'),
|
22
22
|
leaf('other-string'),
|
23
23
|
)
|
@@ -0,0 +1,32 @@
|
|
1
|
+
module ABNF
|
2
|
+
module Parser
|
3
|
+
module Controls
|
4
|
+
module Grammar
|
5
|
+
class Example
|
6
|
+
attr_reader :abnf
|
7
|
+
attr_reader :type
|
8
|
+
|
9
|
+
def initialize abnf, type
|
10
|
+
@abnf = abnf
|
11
|
+
@type = type
|
12
|
+
end
|
13
|
+
|
14
|
+
def rule
|
15
|
+
@rule ||= type.compile abnf
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
Alternative = Example.new '1*%x30-39 / *%x30-39 "*" *%x30-39', Parser::Grammar::Alternative
|
20
|
+
CharVal = Example.new '"some-string"', Parser::Grammar::CharVal
|
21
|
+
Concatenation = Example.new '"some-string" " " "some-string"', Parser::Grammar::Concatenation
|
22
|
+
Group = Example.new '( "foo" / "bar" )', Parser::Grammar::Element
|
23
|
+
NumVal = Example.new '%x41.42.43', Parser::Grammar::NumVal
|
24
|
+
Option = Example.new '[ "some-string" ]', Parser::Grammar::Element
|
25
|
+
Repetition = Example.new '1*2"some-element"', Parser::Grammar::Repetition
|
26
|
+
Rulename = Example.new 'some-rule', Parser::Grammar::Rulename
|
27
|
+
Rule = Example.new "some-rule = \"some-string\"\r\n", Parser::Grammar::Rule
|
28
|
+
ProseVal = Example.new '<Some Prose>', Parser::Grammar::ProseVal
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
@@ -1,42 +1,42 @@
|
|
1
1
|
module ABNF
|
2
|
-
module
|
2
|
+
module Parser
|
3
3
|
module Controls
|
4
4
|
module Rules
|
5
5
|
extend self
|
6
6
|
|
7
7
|
def alternative
|
8
|
-
|
8
|
+
Parser::Rule::Alternative.new terminal_value, value_range
|
9
9
|
end
|
10
10
|
|
11
11
|
def concatenation
|
12
|
-
|
12
|
+
Parser::Rule::Concatenation.new terminal_value, reference
|
13
13
|
end
|
14
14
|
|
15
15
|
def optional
|
16
|
-
|
16
|
+
Parser::Rule::Optional.new terminal_value
|
17
17
|
end
|
18
18
|
|
19
19
|
def reference
|
20
|
-
|
20
|
+
Parser::Rule::Reference.new 'some-rule'
|
21
21
|
end
|
22
22
|
|
23
23
|
def repetition range = nil
|
24
24
|
range ||= (1..2)
|
25
25
|
element = Rules.terminal_value
|
26
26
|
|
27
|
-
|
27
|
+
Parser::Rule::Repetition.new range, element
|
28
28
|
end
|
29
29
|
|
30
30
|
def space
|
31
|
-
|
31
|
+
Parser::Rule::TerminalValue.new ' '
|
32
32
|
end
|
33
33
|
|
34
34
|
def terminal_value case_sensitive = false
|
35
|
-
|
35
|
+
Parser::Rule::TerminalValue.new 'some-string', case_sensitive
|
36
36
|
end
|
37
37
|
|
38
38
|
def value_range
|
39
|
-
|
39
|
+
Parser::Rule::ValueRange.new 'A', 'Z'
|
40
40
|
end
|
41
41
|
end
|
42
42
|
end
|
@@ -1,13 +1,13 @@
|
|
1
1
|
module ABNF
|
2
|
-
module
|
2
|
+
module Parser
|
3
3
|
module Controls
|
4
4
|
module TextStream
|
5
5
|
def self.example
|
6
|
-
|
6
|
+
Parser::TextStream.new 'some-text'
|
7
7
|
end
|
8
8
|
|
9
9
|
def self.rule
|
10
|
-
|
10
|
+
Parser::TextStream.new 'some-rule = "some-string"'
|
11
11
|
end
|
12
12
|
end
|
13
13
|
end
|
@@ -1,5 +1,5 @@
|
|
1
1
|
module ABNF
|
2
|
-
module
|
2
|
+
module Parser
|
3
3
|
module Grammar
|
4
4
|
class Alternative
|
5
5
|
include Compiler
|
@@ -15,7 +15,7 @@ module ABNF
|
|
15
15
|
concatenations << concatenation
|
16
16
|
end while match? stream
|
17
17
|
|
18
|
-
|
18
|
+
Parser::Rule::Alternative.new *concatenations
|
19
19
|
end
|
20
20
|
|
21
21
|
def match? stream
|
@@ -1,5 +1,5 @@
|
|
1
1
|
module ABNF
|
2
|
-
module
|
2
|
+
module Parser
|
3
3
|
module Grammar
|
4
4
|
class CharVal
|
5
5
|
include Compiler
|
@@ -7,7 +7,7 @@ module ABNF
|
|
7
7
|
PATTERN = %r{\A"(?<string>[\x20-\x21\x23-\x7E]*)"}
|
8
8
|
|
9
9
|
def call
|
10
|
-
|
10
|
+
Parser::Rule::TerminalValue.new match_data['string']
|
11
11
|
end
|
12
12
|
end
|
13
13
|
end
|
@@ -1,5 +1,5 @@
|
|
1
1
|
module ABNF
|
2
|
-
module
|
2
|
+
module Parser
|
3
3
|
module Grammar
|
4
4
|
class Concatenation
|
5
5
|
include Compiler
|
@@ -13,7 +13,7 @@ module ABNF
|
|
13
13
|
repetitions << repetition
|
14
14
|
end while stream.match C_WSP
|
15
15
|
|
16
|
-
|
16
|
+
Parser::Rule::Concatenation.new *repetitions
|
17
17
|
end
|
18
18
|
end
|
19
19
|
end
|
@@ -1,5 +1,5 @@
|
|
1
1
|
module ABNF
|
2
|
-
module
|
2
|
+
module Parser
|
3
3
|
module Grammar
|
4
4
|
class Element
|
5
5
|
include Compiler
|
@@ -36,7 +36,7 @@ module ABNF
|
|
36
36
|
stream.match C_WSP
|
37
37
|
|
38
38
|
alternative = Alternative.compile stream
|
39
|
-
option =
|
39
|
+
option = Parser::Rule::Optional.new alternative
|
40
40
|
|
41
41
|
stream.match C_WSP
|
42
42
|
stream.match OPTION_STOP
|
@@ -1,5 +1,5 @@
|
|
1
1
|
module ABNF
|
2
|
-
module
|
2
|
+
module Parser
|
3
3
|
module Grammar
|
4
4
|
class NumVal
|
5
5
|
include Compiler
|
@@ -41,10 +41,10 @@ module ABNF
|
|
41
41
|
if range_end
|
42
42
|
first_octet = convert_hex_character first_character
|
43
43
|
last_octet = convert_hex_character range_end
|
44
|
-
return
|
44
|
+
return Parser::Rule::ValueRange.new first_octet, last_octet
|
45
45
|
end
|
46
46
|
|
47
|
-
|
47
|
+
Parser::Rule::TerminalValue.new build_string, true
|
48
48
|
end
|
49
49
|
|
50
50
|
def convert_hex_character hex
|
@@ -1,5 +1,5 @@
|
|
1
1
|
module ABNF
|
2
|
-
module
|
2
|
+
module Parser
|
3
3
|
module Grammar
|
4
4
|
class ProseVal
|
5
5
|
include Compiler
|
@@ -7,7 +7,7 @@ module ABNF
|
|
7
7
|
PATTERN = %r{\A<[\x20-\x3D\x3F-\x7E]*>\z}n
|
8
8
|
|
9
9
|
def call
|
10
|
-
|
10
|
+
Parser::Rule::None.instance
|
11
11
|
end
|
12
12
|
end
|
13
13
|
end
|
@@ -1,5 +1,5 @@
|
|
1
1
|
module ABNF
|
2
|
-
module
|
2
|
+
module Parser
|
3
3
|
module Grammar
|
4
4
|
class Repetition
|
5
5
|
include Compiler
|
@@ -30,7 +30,7 @@ module ABNF
|
|
30
30
|
return element if min == 1 and max == 1
|
31
31
|
return if min > max
|
32
32
|
|
33
|
-
|
33
|
+
Parser::Rule::Repetition.new min..max, element
|
34
34
|
end
|
35
35
|
|
36
36
|
def fixed_number
|
@@ -1,5 +1,5 @@
|
|
1
1
|
module ABNF
|
2
|
-
module
|
2
|
+
module Parser
|
3
3
|
module Grammar
|
4
4
|
class Rulename
|
5
5
|
include Compiler
|
@@ -7,7 +7,7 @@ module ABNF
|
|
7
7
|
PATTERN = %r{\A(?<string>[[:alpha:]][-[:alpha:][:digit:]]*)}n
|
8
8
|
|
9
9
|
def call
|
10
|
-
|
10
|
+
Parser::Rule::Reference.new match_data['string']
|
11
11
|
end
|
12
12
|
end
|
13
13
|
end
|
@@ -1,5 +1,5 @@
|
|
1
1
|
module ABNF
|
2
|
-
module
|
2
|
+
module Parser
|
3
3
|
class RuleList
|
4
4
|
attr_reader :rules
|
5
5
|
|
@@ -8,7 +8,7 @@ module ABNF
|
|
8
8
|
end
|
9
9
|
|
10
10
|
def compile abnf
|
11
|
-
stream =
|
11
|
+
stream = Parser::TextStream(abnf)
|
12
12
|
|
13
13
|
until stream.eof?
|
14
14
|
stream.match Grammar::C_WSP
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: abnf-parser
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.8.
|
4
|
+
version: 0.8.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Nathan Ladd
|
@@ -17,37 +17,37 @@ executables: []
|
|
17
17
|
extensions: []
|
18
18
|
extra_rdoc_files: []
|
19
19
|
files:
|
20
|
-
- lib/abnf/
|
21
|
-
- lib/abnf/
|
22
|
-
- lib/abnf/compiler
|
23
|
-
- lib/abnf/
|
24
|
-
- lib/abnf/
|
25
|
-
- lib/abnf/
|
26
|
-
- lib/abnf/
|
27
|
-
- lib/abnf/
|
28
|
-
- lib/abnf/
|
29
|
-
- lib/abnf/
|
30
|
-
- lib/abnf/
|
31
|
-
- lib/abnf/
|
32
|
-
- lib/abnf/
|
33
|
-
- lib/abnf/
|
34
|
-
- lib/abnf/
|
35
|
-
- lib/abnf/
|
36
|
-
- lib/abnf/
|
37
|
-
- lib/abnf/
|
38
|
-
- lib/abnf/
|
39
|
-
- lib/abnf/
|
40
|
-
- lib/abnf/
|
41
|
-
- lib/abnf/
|
42
|
-
- lib/abnf/
|
43
|
-
- lib/abnf/
|
44
|
-
- lib/abnf/
|
45
|
-
- lib/abnf/
|
46
|
-
- lib/abnf/
|
47
|
-
- lib/abnf/
|
48
|
-
- lib/abnf/
|
49
|
-
- lib/abnf/
|
50
|
-
- lib/abnf/
|
20
|
+
- lib/abnf/parser.rb
|
21
|
+
- lib/abnf/parser/ast.rb
|
22
|
+
- lib/abnf/parser/compiler.rb
|
23
|
+
- lib/abnf/parser/controls.rb
|
24
|
+
- lib/abnf/parser/controls/ast.rb
|
25
|
+
- lib/abnf/parser/controls/grammar.rb
|
26
|
+
- lib/abnf/parser/controls/rules.rb
|
27
|
+
- lib/abnf/parser/controls/text_stream.rb
|
28
|
+
- lib/abnf/parser/errors.rb
|
29
|
+
- lib/abnf/parser/grammar.rb
|
30
|
+
- lib/abnf/parser/grammar/alternative.rb
|
31
|
+
- lib/abnf/parser/grammar/char_val.rb
|
32
|
+
- lib/abnf/parser/grammar/concatenation.rb
|
33
|
+
- lib/abnf/parser/grammar/element.rb
|
34
|
+
- lib/abnf/parser/grammar/num_val.rb
|
35
|
+
- lib/abnf/parser/grammar/prose_val.rb
|
36
|
+
- lib/abnf/parser/grammar/repetition.rb
|
37
|
+
- lib/abnf/parser/grammar/rule.rb
|
38
|
+
- lib/abnf/parser/grammar/rulename.rb
|
39
|
+
- lib/abnf/parser/rule.rb
|
40
|
+
- lib/abnf/parser/rule/alternative.rb
|
41
|
+
- lib/abnf/parser/rule/concatenation.rb
|
42
|
+
- lib/abnf/parser/rule/none.rb
|
43
|
+
- lib/abnf/parser/rule/optional.rb
|
44
|
+
- lib/abnf/parser/rule/reference.rb
|
45
|
+
- lib/abnf/parser/rule/repetition.rb
|
46
|
+
- lib/abnf/parser/rule/terminal_value.rb
|
47
|
+
- lib/abnf/parser/rule/value_range.rb
|
48
|
+
- lib/abnf/parser/rule_list.rb
|
49
|
+
- lib/abnf/parser/rule_list/entry.rb
|
50
|
+
- lib/abnf/parser/text_stream.rb
|
51
51
|
homepage: https://github.com/ntl/abnf-parser
|
52
52
|
licenses:
|
53
53
|
- MIT
|
data/lib/abnf/compiler.rb
DELETED
@@ -1,28 +0,0 @@
|
|
1
|
-
require 'abnf/compiler/ast'
|
2
|
-
require 'abnf/compiler/errors'
|
3
|
-
require 'abnf/compiler/text_stream'
|
4
|
-
|
5
|
-
require 'abnf/compiler/grammar'
|
6
|
-
require 'abnf/compiler/grammar/compiler'
|
7
|
-
require 'abnf/compiler/grammar/alternative'
|
8
|
-
require 'abnf/compiler/grammar/char_val'
|
9
|
-
require 'abnf/compiler/grammar/concatenation'
|
10
|
-
require 'abnf/compiler/grammar/element'
|
11
|
-
require 'abnf/compiler/grammar/num_val'
|
12
|
-
require 'abnf/compiler/grammar/prose_val'
|
13
|
-
require 'abnf/compiler/grammar/repetition'
|
14
|
-
require 'abnf/compiler/grammar/rule'
|
15
|
-
require 'abnf/compiler/grammar/rulename'
|
16
|
-
|
17
|
-
require 'abnf/compiler/rule'
|
18
|
-
require 'abnf/compiler/rule/alternative'
|
19
|
-
require 'abnf/compiler/rule/concatenation'
|
20
|
-
require 'abnf/compiler/rule/none'
|
21
|
-
require 'abnf/compiler/rule/optional'
|
22
|
-
require 'abnf/compiler/rule/reference'
|
23
|
-
require 'abnf/compiler/rule/repetition'
|
24
|
-
require 'abnf/compiler/rule/terminal_value'
|
25
|
-
require 'abnf/compiler/rule/value_range'
|
26
|
-
|
27
|
-
require 'abnf/compiler/rule_list'
|
28
|
-
require 'abnf/compiler/rule_list/entry'
|
@@ -1,32 +0,0 @@
|
|
1
|
-
module ABNF
|
2
|
-
module Compiler
|
3
|
-
module Controls
|
4
|
-
module Grammar
|
5
|
-
class Example
|
6
|
-
attr_reader :abnf
|
7
|
-
attr_reader :type
|
8
|
-
|
9
|
-
def initialize abnf, type
|
10
|
-
@abnf = abnf
|
11
|
-
@type = type
|
12
|
-
end
|
13
|
-
|
14
|
-
def rule
|
15
|
-
@rule ||= type.compile abnf
|
16
|
-
end
|
17
|
-
end
|
18
|
-
|
19
|
-
Alternative = Example.new '1*%x30-39 / *%x30-39 "*" *%x30-39', Compiler::Grammar::Alternative
|
20
|
-
CharVal = Example.new '"some-string"', Compiler::Grammar::CharVal
|
21
|
-
Concatenation = Example.new '"some-string" " " "some-string"', Compiler::Grammar::Concatenation
|
22
|
-
Group = Example.new '( "foo" / "bar" )', Compiler::Grammar::Element
|
23
|
-
NumVal = Example.new '%x41.42.43', Compiler::Grammar::NumVal
|
24
|
-
Option = Example.new '[ "some-string" ]', Compiler::Grammar::Element
|
25
|
-
Repetition = Example.new '1*2"some-element"', Compiler::Grammar::Repetition
|
26
|
-
Rulename = Example.new 'some-rule', Compiler::Grammar::Rulename
|
27
|
-
Rule = Example.new "some-rule = \"some-string\"\r\n", Compiler::Grammar::Rule
|
28
|
-
ProseVal = Example.new '<Some Prose>', Compiler::Grammar::ProseVal
|
29
|
-
end
|
30
|
-
end
|
31
|
-
end
|
32
|
-
end
|
@@ -1,55 +0,0 @@
|
|
1
|
-
module ABNF
|
2
|
-
module Compiler
|
3
|
-
module Grammar
|
4
|
-
module Compiler
|
5
|
-
def self.included cls
|
6
|
-
cls.extend BuildMethod
|
7
|
-
cls.extend CompileMethod
|
8
|
-
cls.extend PatternMethod
|
9
|
-
end
|
10
|
-
|
11
|
-
module CompileMethod
|
12
|
-
def compile? stream
|
13
|
-
if compile stream then true else false end
|
14
|
-
end
|
15
|
-
|
16
|
-
def compile stream
|
17
|
-
stream = ABNF::Compiler::TextStream(stream)
|
18
|
-
pattern = self.pattern
|
19
|
-
match_data = stream.match pattern
|
20
|
-
|
21
|
-
return unless match_data
|
22
|
-
|
23
|
-
instance = build stream, match_data
|
24
|
-
instance.()
|
25
|
-
end
|
26
|
-
end
|
27
|
-
|
28
|
-
module BuildMethod
|
29
|
-
def build stream, match_data
|
30
|
-
instance = new stream, match_data
|
31
|
-
instance
|
32
|
-
end
|
33
|
-
end
|
34
|
-
|
35
|
-
module PatternMethod
|
36
|
-
def pattern
|
37
|
-
if const_defined? :PATTERN
|
38
|
-
const_get :PATTERN
|
39
|
-
else
|
40
|
-
@null_pattern ||= %r{}
|
41
|
-
end
|
42
|
-
end
|
43
|
-
end
|
44
|
-
|
45
|
-
attr_reader :match_data
|
46
|
-
attr_reader :stream
|
47
|
-
|
48
|
-
def initialize stream, match_data = nil
|
49
|
-
@match_data = match_data
|
50
|
-
@stream = stream
|
51
|
-
end
|
52
|
-
end
|
53
|
-
end
|
54
|
-
end
|
55
|
-
end
|