def parse(input, filename='')
reset(input, filename)
scan()
rulesets = []
while @token == :command
command = @value
case command
when '@import'
imported_rulesets = parse_import_command()
rulesets += imported_rulesets
when '@from'
when '@import_pdata'
else
raise parse_error("#{command}: unsupported command.")
end
end
while @token == :selector
selectors = parse_selectors()
unless @token == '{''{'
raise parse_error("'#{@value}': '{' is expected.")
end
@mode = :declaration
_linenum, _column = @linenum, @column
ruleset = Ruleset.new(selectors)
parse_declaration(ruleset)
unless @token
raise parse_error("'#{selectors.first}': is not closed by '}'.", _linenum, _column)
end
@mode = :selector
rulesets << ruleset
scan()
end
unless @token == nil
raise parse_error("'#{@value}': selector is expected.")
end
return rulesets
end