Class: TDParser::Parser

Inherits:
Object
  • Object
show all
Includes:
TDParser, BufferUtils
Defined in:
lib/tdp.rb

Instance Method Summary collapse

Methods included from TDParser

#any_rule, #backref, #chainl, #chainr, #condition_rule, define, #empty_rule, #fail_rule, #leftrec, #none_rule, #rightrec, #rule, #stackref, #state, #token

Methods included from BufferUtils

#prepare, #recover

Instance Method Details

#%(stack) ⇒ Object



156
157
158
# File 'lib/tdp.rb', line 156

def %(stack)
  StackParser.new(self,stack)
end

#*(range) ⇒ Object



138
139
140
141
142
143
144
145
146
# File 'lib/tdp.rb', line 138

def *(range)
  if( range.is_a?(Range) )
    n = range.min
  else
    n = range
    range = nil
  end
  IterationParser.new(self,n,range)
end

#+(r) ⇒ Object



130
131
132
# File 'lib/tdp.rb', line 130

def +(r)
  ParallelParser.new(self,r)
end

#-(r) ⇒ Object



126
127
128
# File 'lib/tdp.rb', line 126

def -(r)
  ConcatParser.new(self,r)
end

#/(label) ⇒ Object



152
153
154
# File 'lib/tdp.rb', line 152

def /(label)
  LabelParser.new(self,label)
end

#==(r) ⇒ Object



118
119
120
# File 'lib/tdp.rb', line 118

def ==(r)
  false
end

#>(symbol) ⇒ Object



160
161
162
163
164
165
# File 'lib/tdp.rb', line 160

def >(symbol)
  Parser.new{|tokens, buff|
    buff[symbol] = buff.dup()
    self[tokens, buff]
  }
end

#>>(act) ⇒ Object



148
149
150
# File 'lib/tdp.rb', line 148

def >>(act)
  ActionParser.new(self,act)
end

#call(*args) ⇒ Object



107
108
# File 'lib/tdp.rb', line 107

def call(*args)
end

#do(&block) ⇒ Object



200
201
202
# File 'lib/tdp.rb', line 200

def do(&block)
    self >> block
end

#optimize(default = false) ⇒ Object

def [](*args)

call(*args)

end



114
115
116
# File 'lib/tdp.rb', line 114

def optimize(default=false)
  self.dup()
end

#parse(tokens = nil, buff = nil, &blk) ⇒ Object



171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
# File 'lib/tdp.rb', line 171

def parse(tokens=nil, buff=nil, &blk)
  buff ||= TokenBuffer.new()
  if( blk.nil? )
    if( tokens.respond_to?(:shift) && tokens.respond_to?(:unshift) )
      @tokens = tokens
    elsif( tokens.respond_to?(:each) )
      @tokens = TokenGenerator.new(tokens)
    else
      @tokens = tokens
    end
  else
    @tokens = TokenGenerator.new(&blk)
  end
  r = call(@tokens, buff)
  if( r.nil? )
    nil
  else
    r[0]
  end
end

#peekObject



192
193
194
195
196
197
198
# File 'lib/tdp.rb', line 192

def peek()
  t = @tokens.shift()
  if( ! t.nil? )
    @tokens.unshift(t)
  end
  t
end

#same?(r) ⇒ Boolean

Returns:

  • (Boolean)


122
123
124
# File 'lib/tdp.rb', line 122

def same?(r)
  self == r
end

#to_procObject



99
100
101
# File 'lib/tdp.rb', line 99

def to_proc()
  Proc.new{|*x| self.call(*x) }
end

#to_sObject



103
104
105
# File 'lib/tdp.rb', line 103

def to_s()
  "??"
end

#|(r) ⇒ Object



134
135
136
# File 'lib/tdp.rb', line 134

def |(r)
  ChoiceParser.new(self,r).optimize(true)
end

#~@Object



167
168
169
# File 'lib/tdp.rb', line 167

def ~@()
  NegativeParser.new(self)
end