Class: NanDoc::Filters::CustomTag::TagParser::Seq
- Inherits:
-
Object
- Object
- NanDoc::Filters::CustomTag::TagParser::Seq
- Includes:
- ParserSymbol
- Defined in:
- lib/nandoc/filters/tag-parser.rb
Overview
concatentation production
Instance Method Summary collapse
- #get_parser_at(offset) ⇒ Object
-
#initialize(grammar, arr) ⇒ Seq
constructor
A new instance of Seq.
- #parse(scn, sex, fails) ⇒ Object
Methods included from ParserSymbol
Constructor Details
#initialize(grammar, arr) ⇒ Seq
Returns a new instance of Seq.
157 158 159 160 161 162 |
# File 'lib/nandoc/filters/tag-parser.rb', line 157 def initialize grammar, arr secret_grammar grammar @arr = arr @parsers = Array.new(arr.size) @done = false end |
Instance Method Details
#get_parser_at(offset) ⇒ Object
163 164 165 166 167 168 169 170 171 172 |
# File 'lib/nandoc/filters/tag-parser.rb', line 163 def get_parser_at offset @parsers[offset] ||= begin def_thing = @arr[offset] sym = nil if def_thing sym = grammar.get_symbol(def_thing) end sym end end |
#parse(scn, sex, fails) ⇒ Object
173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 |
# File 'lib/nandoc/filters/tag-parser.rb', line 173 def parse scn, sex, fails my_ret = nil current = 0 last = @arr.size - 1 sym = get_parser_at(current) while sym puts "sequence at #{current} about to parse #{scn.rest.inspect}" ch_ret = sym.parse(scn, sex, fails) if ch_ret.kind_of?(ParserSymbol) sym = ch_ret elsif ch_ret == false sym = false my_ret = false break elsif ch_ret == true current += 1 sym = get_parser_at(current) else fail("don't know what to do with this: #{ch_ret.inspect}") end end if my_ret.nil? if current <= last fail("what happened?") else my_ret = true end end my_ret end |