Class: Language

Inherits:
Object
  • Object
show all
Defined in:
lib/language.rb,
lib/language/atom.rb,
lib/language/output.rb,
lib/language/parser.rb,
lib/language/parser/str.rb,
lib/language/parser/absent.rb,
lib/language/parser/interuption.rb,
lib/language/parser/end_of_input.rb,
lib/language/parser/str/not_found.rb,
lib/language/parser/absent/present.rb,
lib/language/parser/not_end_of_input.rb

Defined Under Namespace

Classes: Atom, Output, Parser

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.<<(other) ⇒ Object



34
35
36
# File 'lib/language.rb', line 34

def self.<<(other)
  Atom::And.new(left: new, right: other)
end

.>>(other) ⇒ Object



30
31
32
# File 'lib/language.rb', line 30

def self.>>(other)
  Atom::And.new(left: new, right: other)
end

.absentObject



6
7
8
# File 'lib/language.rb', line 6

def self.absent
  Atom::Absent.new(parent: new)
end

.aka(name) ⇒ Object



22
23
24
# File 'lib/language.rb', line 22

def self.aka(name)
  Atom::Aka.new(parent: new, name: name)
end

.ignoreObject



10
11
12
# File 'lib/language.rb', line 10

def self.ignore
  Atom::Ignore.new(parent: new)
end

.maybeObject



14
15
16
# File 'lib/language.rb', line 14

def self.maybe
  Atom::Maybe.new(parent: new)
end

.parse(input) ⇒ Object



2
3
4
# File 'lib/language.rb', line 2

def self.parse(input)
  new.parse(input)
end

.repeat(min = 0, max = nil) ⇒ Object



18
19
20
# File 'lib/language.rb', line 18

def self.repeat(min = 0, max = nil)
  Atom::Repeat.new(parent: new, min: min, max: max)
end

.then(&block) ⇒ Object



38
39
40
# File 'lib/language.rb', line 38

def self.then(&block)
  Atom::Then.new(parent: new, block: block)
end

.|(other) ⇒ Object



26
27
28
# File 'lib/language.rb', line 26

def self.|(other)
  Atom::Or.new(left: new, right: other)
end

Instance Method Details

#anyObject



69
70
71
# File 'lib/language.rb', line 69

def any
  Atom::Any.new
end

#inspectObject



77
78
79
# File 'lib/language.rb', line 77

def inspect
  to_s
end

#parse(input_or_parser) ⇒ Object



42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
# File 'lib/language.rb', line 42

def parse(input_or_parser)
  if input_or_parser.is_a?(Parser)
    parser = input_or_parser
    clone =
      Parser.new(
        root: root,
        input: parser.input,
        cursor: parser.cursor,
        buffer: parser.buffer,
        output: parser.output
      )

    clone.parse(check_end_of_input: false)

    parser.cursor = clone.cursor
    parser.buffer = clone.buffer
    parser.output = clone.output
  else
    input = input_or_parser
    Parser.new(root: root, input: input).parse
  end
end

#str(string) ⇒ Object



65
66
67
# File 'lib/language.rb', line 65

def str(string)
  Atom::Str.new(string: string)
end

#to_sObject



73
74
75
# File 'lib/language.rb', line 73

def to_s
  "<#{self.class.name}>"
end