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.
Files changed (37) hide show
  1. checksums.yaml +4 -4
  2. data/lib/abnf/parser.rb +28 -0
  3. data/lib/abnf/{compiler → parser}/ast.rb +1 -1
  4. data/lib/abnf/parser/compiler.rb +53 -0
  5. data/lib/abnf/parser/controls.rb +4 -0
  6. data/lib/abnf/{compiler → parser}/controls/ast.rb +4 -4
  7. data/lib/abnf/parser/controls/grammar.rb +32 -0
  8. data/lib/abnf/{compiler → parser}/controls/rules.rb +9 -9
  9. data/lib/abnf/{compiler → parser}/controls/text_stream.rb +3 -3
  10. data/lib/abnf/{compiler → parser}/errors.rb +1 -1
  11. data/lib/abnf/{compiler → parser}/grammar.rb +1 -1
  12. data/lib/abnf/{compiler → parser}/grammar/alternative.rb +2 -2
  13. data/lib/abnf/{compiler → parser}/grammar/char_val.rb +2 -2
  14. data/lib/abnf/{compiler → parser}/grammar/concatenation.rb +2 -2
  15. data/lib/abnf/{compiler → parser}/grammar/element.rb +2 -2
  16. data/lib/abnf/{compiler → parser}/grammar/num_val.rb +3 -3
  17. data/lib/abnf/{compiler → parser}/grammar/prose_val.rb +2 -2
  18. data/lib/abnf/{compiler → parser}/grammar/repetition.rb +2 -2
  19. data/lib/abnf/{compiler → parser}/grammar/rule.rb +1 -1
  20. data/lib/abnf/{compiler → parser}/grammar/rulename.rb +2 -2
  21. data/lib/abnf/{compiler → parser}/rule.rb +2 -2
  22. data/lib/abnf/{compiler → parser}/rule/alternative.rb +1 -1
  23. data/lib/abnf/{compiler → parser}/rule/concatenation.rb +1 -1
  24. data/lib/abnf/{compiler → parser}/rule/none.rb +1 -1
  25. data/lib/abnf/{compiler → parser}/rule/optional.rb +1 -1
  26. data/lib/abnf/{compiler → parser}/rule/reference.rb +1 -1
  27. data/lib/abnf/{compiler → parser}/rule/repetition.rb +1 -1
  28. data/lib/abnf/{compiler → parser}/rule/terminal_value.rb +1 -1
  29. data/lib/abnf/{compiler → parser}/rule/value_range.rb +1 -1
  30. data/lib/abnf/{compiler → parser}/rule_list.rb +2 -2
  31. data/lib/abnf/{compiler → parser}/rule_list/entry.rb +1 -1
  32. data/lib/abnf/{compiler → parser}/text_stream.rb +1 -1
  33. metadata +32 -32
  34. data/lib/abnf/compiler.rb +0 -28
  35. data/lib/abnf/compiler/controls.rb +0 -4
  36. data/lib/abnf/compiler/controls/grammar.rb +0 -32
  37. data/lib/abnf/compiler/grammar/compiler.rb +0 -55
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: f9345bd72e56a26df453cb85fe51c3dac095f90c
4
- data.tar.gz: 9caae3be175e985e45e9be3fa75d7293e28d13fe
3
+ metadata.gz: 290cf1be0e24f0bc64e51280c1cff38a11520bfc
4
+ data.tar.gz: 61f5f4ae1bae589af2a80839dc8be01ad642f3e8
5
5
  SHA512:
6
- metadata.gz: fce4984fcd8c8f28cbfa5b1cadb1721fcb43f08b9c5754c5d2aa42c1b2a335f33b1efd18c6d58ad785bccf4bb4fe3113929c09afa6c9ac04bd2dce5e59799f60
7
- data.tar.gz: e8ddbfa79408449743b00d809006dd897544ee10bd966d26bc09d186cc55624f269f01bf28721d10b541644b08062cf53e4405242f951bed9748c77e6d34c721
6
+ metadata.gz: 0c06a722202c3e87b6a895b0206ee6a2674a88f90875405319de1ae4f61a33c995a7f096af29311333833aa2efa14d893987ad1f29532aa436ef05fdc5adc5c4
7
+ data.tar.gz: 4b51e5881e2cafe761e6db107894ae5af457e6308f95ec7deaabc4fd06ba849670e964899da3e77f0235068c082c90288da613395fd23460e46da218f6e79521
@@ -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'
@@ -1,5 +1,5 @@
1
1
  module ABNF
2
- module Compiler
2
+ module Parser
3
3
  module AST
4
4
  def self.leaf *arguments
5
5
  Leaf.new *arguments
@@ -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
@@ -0,0 +1,4 @@
1
+ require 'abnf/parser/controls/ast'
2
+ require 'abnf/parser/controls/grammar'
3
+ require 'abnf/parser/controls/rules'
4
+ require 'abnf/parser/controls/text_stream'
@@ -1,23 +1,23 @@
1
1
  module ABNF
2
- module Compiler
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
- Compiler::AST.leaf text
9
+ Parser::AST.leaf text
10
10
  end
11
11
 
12
12
  def repetition
13
- Compiler::AST.repetition(
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
- Compiler::AST.sequence(
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 Compiler
2
+ module Parser
3
3
  module Controls
4
4
  module Rules
5
5
  extend self
6
6
 
7
7
  def alternative
8
- Compiler::Rule::Alternative.new terminal_value, value_range
8
+ Parser::Rule::Alternative.new terminal_value, value_range
9
9
  end
10
10
 
11
11
  def concatenation
12
- Compiler::Rule::Concatenation.new terminal_value, reference
12
+ Parser::Rule::Concatenation.new terminal_value, reference
13
13
  end
14
14
 
15
15
  def optional
16
- Compiler::Rule::Optional.new terminal_value
16
+ Parser::Rule::Optional.new terminal_value
17
17
  end
18
18
 
19
19
  def reference
20
- Compiler::Rule::Reference.new 'some-rule'
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
- Compiler::Rule::Repetition.new range, element
27
+ Parser::Rule::Repetition.new range, element
28
28
  end
29
29
 
30
30
  def space
31
- Compiler::Rule::TerminalValue.new ' '
31
+ Parser::Rule::TerminalValue.new ' '
32
32
  end
33
33
 
34
34
  def terminal_value case_sensitive = false
35
- Compiler::Rule::TerminalValue.new 'some-string', case_sensitive
35
+ Parser::Rule::TerminalValue.new 'some-string', case_sensitive
36
36
  end
37
37
 
38
38
  def value_range
39
- Compiler::Rule::ValueRange.new 'A', 'Z'
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 Compiler
2
+ module Parser
3
3
  module Controls
4
4
  module TextStream
5
5
  def self.example
6
- Compiler::TextStream.new 'some-text'
6
+ Parser::TextStream.new 'some-text'
7
7
  end
8
8
 
9
9
  def self.rule
10
- Compiler::TextStream.new 'some-rule = "some-string"'
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 Compiler
2
+ module Parser
3
3
  Error = Class.new StandardError
4
4
  ParsingError = Class.new Error
5
5
  CompileError = Class.new Error
@@ -1,5 +1,5 @@
1
1
  module ABNF
2
- module Compiler
2
+ module Parser
3
3
  module Grammar
4
4
  C_NL = %r{;[\t -~]*\r\n|\r\n}n
5
5
 
@@ -1,5 +1,5 @@
1
1
  module ABNF
2
- module Compiler
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
- ABNF::Compiler::Rule::Alternative.new *concatenations
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 Compiler
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
- ABNF::Compiler::Rule::TerminalValue.new match_data['string']
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 Compiler
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
- ABNF::Compiler::Rule::Concatenation.new *repetitions
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 Compiler
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 = ABNF::Compiler::Rule::Optional.new alternative
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 Compiler
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 ABNF::Compiler::Rule::ValueRange.new first_octet, last_octet
44
+ return Parser::Rule::ValueRange.new first_octet, last_octet
45
45
  end
46
46
 
47
- ABNF::Compiler::Rule::TerminalValue.new build_string, true
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 Compiler
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
- ABNF::Compiler::Rule::None.instance
10
+ Parser::Rule::None.instance
11
11
  end
12
12
  end
13
13
  end
@@ -1,5 +1,5 @@
1
1
  module ABNF
2
- module Compiler
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
- ABNF::Compiler::Rule::Repetition.new min..max, element
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 Compiler
2
+ module Parser
3
3
  module Grammar
4
4
  class Rule
5
5
  include Compiler
@@ -1,5 +1,5 @@
1
1
  module ABNF
2
- module Compiler
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
- ABNF::Compiler::Rule::Reference.new match_data['string']
10
+ Parser::Rule::Reference.new match_data['string']
11
11
  end
12
12
  end
13
13
  end
@@ -1,8 +1,8 @@
1
1
  module ABNF
2
- module Compiler
2
+ module Parser
3
3
  module Rule
4
4
  def parse? text
5
- stream = Compiler::TextStream(text)
5
+ stream = Parser::TextStream(text)
6
6
  if parse stream then true else false end
7
7
  end
8
8
  end
@@ -1,5 +1,5 @@
1
1
  module ABNF
2
- module Compiler
2
+ module Parser
3
3
  module Rule
4
4
  class Alternative
5
5
  include Rule
@@ -1,5 +1,5 @@
1
1
  module ABNF
2
- module Compiler
2
+ module Parser
3
3
  module Rule
4
4
  class Concatenation
5
5
  include Rule
@@ -1,5 +1,5 @@
1
1
  module ABNF
2
- module Compiler
2
+ module Parser
3
3
  module Rule
4
4
  class None
5
5
  include Rule
@@ -1,5 +1,5 @@
1
1
  module ABNF
2
- module Compiler
2
+ module Parser
3
3
  module Rule
4
4
  class Optional
5
5
  include Rule
@@ -1,5 +1,5 @@
1
1
  module ABNF
2
- module Compiler
2
+ module Parser
3
3
  module Rule
4
4
  class Reference
5
5
  include Rule
@@ -1,5 +1,5 @@
1
1
  module ABNF
2
- module Compiler
2
+ module Parser
3
3
  module Rule
4
4
  class Repetition
5
5
  include Rule
@@ -1,5 +1,5 @@
1
1
  module ABNF
2
- module Compiler
2
+ module Parser
3
3
  module Rule
4
4
  class TerminalValue
5
5
  include Rule
@@ -1,5 +1,5 @@
1
1
  module ABNF
2
- module Compiler
2
+ module Parser
3
3
  module Rule
4
4
  class ValueRange
5
5
  include Rule
@@ -1,5 +1,5 @@
1
1
  module ABNF
2
- module Compiler
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 = Compiler::TextStream(abnf)
11
+ stream = Parser::TextStream(abnf)
12
12
 
13
13
  until stream.eof?
14
14
  stream.match Grammar::C_WSP
@@ -1,5 +1,5 @@
1
1
  module ABNF
2
- module Compiler
2
+ module Parser
3
3
  class RuleList
4
4
  class Entry
5
5
  attr_reader :alternative_form
@@ -1,5 +1,5 @@
1
1
  module ABNF
2
- module Compiler
2
+ module Parser
3
3
  class TextStream
4
4
  attr_reader :stack
5
5
  attr_reader :text
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.0
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/compiler.rb
21
- - lib/abnf/compiler/ast.rb
22
- - lib/abnf/compiler/controls.rb
23
- - lib/abnf/compiler/controls/ast.rb
24
- - lib/abnf/compiler/controls/grammar.rb
25
- - lib/abnf/compiler/controls/rules.rb
26
- - lib/abnf/compiler/controls/text_stream.rb
27
- - lib/abnf/compiler/errors.rb
28
- - lib/abnf/compiler/grammar.rb
29
- - lib/abnf/compiler/grammar/alternative.rb
30
- - lib/abnf/compiler/grammar/char_val.rb
31
- - lib/abnf/compiler/grammar/compiler.rb
32
- - lib/abnf/compiler/grammar/concatenation.rb
33
- - lib/abnf/compiler/grammar/element.rb
34
- - lib/abnf/compiler/grammar/num_val.rb
35
- - lib/abnf/compiler/grammar/prose_val.rb
36
- - lib/abnf/compiler/grammar/repetition.rb
37
- - lib/abnf/compiler/grammar/rule.rb
38
- - lib/abnf/compiler/grammar/rulename.rb
39
- - lib/abnf/compiler/rule.rb
40
- - lib/abnf/compiler/rule/alternative.rb
41
- - lib/abnf/compiler/rule/concatenation.rb
42
- - lib/abnf/compiler/rule/none.rb
43
- - lib/abnf/compiler/rule/optional.rb
44
- - lib/abnf/compiler/rule/reference.rb
45
- - lib/abnf/compiler/rule/repetition.rb
46
- - lib/abnf/compiler/rule/terminal_value.rb
47
- - lib/abnf/compiler/rule/value_range.rb
48
- - lib/abnf/compiler/rule_list.rb
49
- - lib/abnf/compiler/rule_list/entry.rb
50
- - lib/abnf/compiler/text_stream.rb
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
@@ -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,4 +0,0 @@
1
- require 'abnf/compiler/controls/ast'
2
- require 'abnf/compiler/controls/grammar'
3
- require 'abnf/compiler/controls/rules'
4
- require 'abnf/compiler/controls/text_stream'
@@ -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