abnf-parser 0.8.0 → 0.8.1
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/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
|