+ remove unused header
This commit is contained in:
parent
9063d06f24
commit
d61b3e4918
1 changed files with 0 additions and 266 deletions
|
@ -1,266 +0,0 @@
|
|||
/*****************************************************************************
|
||||
*
|
||||
* This file is part of Mapnik (c++ mapping toolkit)
|
||||
*
|
||||
* Copyright (C) 2006 Artem Pavlenko
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2.1 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
//$Id$
|
||||
|
||||
#ifndef FILTER_PARSER_AST_HPP
|
||||
#define FILTER_PARSER_AST_HPP
|
||||
// boost
|
||||
#include <boost/spirit/core.hpp>
|
||||
#include <boost/spirit/tree/ast.hpp>
|
||||
// stl
|
||||
#include <iostream>
|
||||
|
||||
using namespace std;
|
||||
using namespace boost::spirit;
|
||||
|
||||
namespace mapnik
|
||||
{
|
||||
|
||||
struct filter_grammar_ast : public grammar<filter_grammar_ast>
|
||||
{
|
||||
|
||||
static const int integerID = 1;
|
||||
static const int realID = 2;
|
||||
static const int stringID = 3;
|
||||
static const int propertyID = 4;
|
||||
static const int factorID = 5;
|
||||
static const int termID = 6;
|
||||
static const int expressionID = 7;
|
||||
static const int relationID = 8;
|
||||
static const int equationID = 9;
|
||||
static const int and_exprID = 10;
|
||||
static const int or_exprID = 11;
|
||||
|
||||
template <typename ScannerT>
|
||||
struct definition
|
||||
{
|
||||
|
||||
definition(filter_grammar_ast const& /*self*/)
|
||||
{
|
||||
real = leaf_node_d[strict_real_p];
|
||||
integer = leaf_node_d[int_p];
|
||||
number = real | integer;
|
||||
|
||||
string_ = inner_node_d['\''>> leaf_node_d[( (alpha_p | '_') >>
|
||||
* (alnum_p | '_' ))] >> '\''];
|
||||
|
||||
property = inner_node_d['[' >> leaf_node_d[ ( (alpha_p | '_') >> * (alnum_p | '_' )) ] >> ']'];
|
||||
|
||||
literal = number | string_ | property;
|
||||
|
||||
factor = literal
|
||||
| (root_node_d[str_p("not")] >> literal)
|
||||
| inner_node_d[ch_p('(') >> or_expr >> ch_p(')') ]
|
||||
| (root_node_d[ch_p('-')] >> factor)
|
||||
;
|
||||
|
||||
term = factor
|
||||
>> *((root_node_d[ch_p('*')] >> factor) | (root_node_d[ch_p('/')] >> factor));
|
||||
|
||||
expression = term >> *((root_node_d[ch_p('+')] >> term) | (root_node_d[ch_p('-')] >> term));
|
||||
relation = expression >> *((root_node_d[str_p(">=")] >> expression)
|
||||
| (root_node_d[ch_p('>')] >> expression)
|
||||
| (root_node_d[ch_p('<')] >> expression)
|
||||
| (root_node_d[str_p("<=")] >> expression));
|
||||
|
||||
equation = relation >> *( (root_node_d[ch_p('=')] >> relation)
|
||||
| (root_node_d[str_p("<>")] >> relation));
|
||||
and_expr = equation >> *(root_node_d[str_p("and")] >> equation);
|
||||
or_expr = and_expr >> *(root_node_d[str_p("or")] >> and_expr);
|
||||
|
||||
//spatial_op = str_p("Equals") | "Disjoint" | "Touches" | "Within"
|
||||
// | "Overlaps" | "Crosses" | "Intersects" | "Contains" | "DWithin" | "Beyond" | "BBOX";
|
||||
|
||||
filter_statement = or_expr;
|
||||
}
|
||||
|
||||
rule<ScannerT> const& start() const
|
||||
{
|
||||
return filter_statement;
|
||||
}
|
||||
|
||||
rule<ScannerT,parser_context<>, parser_tag<factorID> > factor;
|
||||
rule<ScannerT,parser_context<>, parser_tag<termID> > term;
|
||||
rule<ScannerT,parser_context<>, parser_tag<expressionID> > expression;
|
||||
rule<ScannerT,parser_context<>, parser_tag<relationID> > relation;
|
||||
rule<ScannerT,parser_context<>, parser_tag<equationID> > equation;
|
||||
|
||||
rule<ScannerT,parser_context<>, parser_tag<and_exprID> > and_expr;
|
||||
rule<ScannerT,parser_context<>, parser_tag<or_exprID> > or_expr;
|
||||
|
||||
rule<ScannerT> filter_statement;
|
||||
rule<ScannerT> literal,number;
|
||||
|
||||
rule<ScannerT,parser_context<>, parser_tag<integerID> > integer;
|
||||
rule<ScannerT,parser_context<>, parser_tag<realID> > real;
|
||||
rule<ScannerT,parser_context<>, parser_tag<stringID> > string_;
|
||||
rule<ScannerT,parser_context<>, parser_tag<propertyID> > property;
|
||||
|
||||
|
||||
//rule<ScannerT> spatial_op;
|
||||
|
||||
};
|
||||
|
||||
};
|
||||
|
||||
class node_data
|
||||
{
|
||||
public:
|
||||
enum node_e {
|
||||
Unknown=0,
|
||||
Integer=1,
|
||||
Real =2,
|
||||
String =3,
|
||||
Property=4
|
||||
};
|
||||
node_data()
|
||||
: type_(Unknown) {}
|
||||
|
||||
node_data(int type)
|
||||
: type_(type) {}
|
||||
|
||||
node_data(node_data const& other)
|
||||
: type_(other.type_) {}
|
||||
|
||||
node_data& operator=(node_data const& other)
|
||||
{
|
||||
if (this==&other)
|
||||
return *this;
|
||||
type_=other.type_;
|
||||
return *this;
|
||||
}
|
||||
~node_data() {}
|
||||
private:
|
||||
int type_;
|
||||
};
|
||||
|
||||
typedef char const* iterator_t;
|
||||
typedef node_val_data_factory<node_data> factory_t;
|
||||
typedef tree_match<iterator_t,factory_t>::tree_iterator iter_t;
|
||||
|
||||
void process_node(iter_t const&,string&);
|
||||
|
||||
void walk_ast_tree(tree_parse_info<iterator_t,factory_t> info,string& text)
|
||||
{
|
||||
process_node(info.trees.begin(),text);
|
||||
}
|
||||
|
||||
void process_node(iter_t const& i,string& text)
|
||||
{
|
||||
//clog << "In eval_expression. i->value = " <<
|
||||
// string(i->value.begin(), i->value.end()) <<
|
||||
// " i->children.size() = " << i->children.size() << endl;
|
||||
//std::clog<<typeid(*i).name()<<"\n";
|
||||
|
||||
if (i->value.id() == filter_grammar_ast::integerID)
|
||||
{
|
||||
assert(i->children.size()==0);
|
||||
string integer(i->value.begin(), i->value.end());
|
||||
text+= integer;
|
||||
}
|
||||
else if (i->value.id() == filter_grammar_ast::realID)
|
||||
{
|
||||
assert(i->children.size()==0);
|
||||
string real(i->value.begin(), i->value.end());
|
||||
text += real;
|
||||
}
|
||||
else if (i->value.id() == filter_grammar_ast::stringID)
|
||||
{
|
||||
assert(i->children.size()==0);
|
||||
string str(i->value.begin(), i->value.end());
|
||||
text += str;
|
||||
}
|
||||
else if (i->value.id() == filter_grammar_ast::propertyID)
|
||||
{
|
||||
assert(i->children.size()==0);
|
||||
string property_name(i->value.begin(), i->value.end());
|
||||
text += property_name;
|
||||
}
|
||||
else if (i->value.id() == filter_grammar_ast::expressionID)
|
||||
{
|
||||
assert(i->children.size() == 2);
|
||||
assert(!i->children.begin()->value.is_root());
|
||||
process_node(i->children.begin(),text);
|
||||
text += string(i->value.begin(), i->value.end());
|
||||
process_node(i->children.begin()+1,text);
|
||||
|
||||
text +="\n";
|
||||
}
|
||||
else if (i->value.id() == filter_grammar_ast::termID)
|
||||
{
|
||||
assert(i->children.size() == 2);
|
||||
assert(!i->children.begin()->value.is_root());
|
||||
process_node(i->children.begin(),text);
|
||||
text += string(i->value.begin(), i->value.end());
|
||||
process_node(i->children.begin()+1,text);
|
||||
|
||||
text +="\n";
|
||||
|
||||
}
|
||||
else if (i->value.id() == filter_grammar_ast::relationID)
|
||||
{
|
||||
assert(i->children.size() == 2);
|
||||
assert(!i->children.begin()->value.is_root());
|
||||
process_node(i->children.begin(),text);
|
||||
text += string(i->value.begin(), i->value.end());
|
||||
process_node(i->children.begin()+1,text);
|
||||
|
||||
text +="\n";
|
||||
|
||||
}
|
||||
else if (i->value.id() == filter_grammar_ast::equationID)
|
||||
{
|
||||
assert(i->children.size() == 2);
|
||||
assert(!i->children.begin()->value.is_root());
|
||||
process_node(i->children.begin(),text);
|
||||
text += string(i->value.begin(), i->value.end());
|
||||
process_node(i->children.begin()+1,text);
|
||||
|
||||
text +="\n";
|
||||
}
|
||||
else if (i->value.id() == filter_grammar_ast::and_exprID)
|
||||
{
|
||||
assert(i->children.size() == 2);
|
||||
assert(!i->children.begin()->value.is_root());
|
||||
process_node(i->children.begin(),text);
|
||||
text += string(i->value.begin(), i->value.end());
|
||||
process_node(i->children.begin()+1,text);
|
||||
|
||||
text +="\n";
|
||||
}
|
||||
else if (i->value.id() == filter_grammar_ast::or_exprID)
|
||||
{
|
||||
assert(i->children.size() == 2);
|
||||
assert(!i->children.begin()->value.is_root());
|
||||
|
||||
process_node(i->children.begin(),text);
|
||||
text += string(i->value.begin(), i->value.end());
|
||||
process_node(i->children.begin()+1,text);
|
||||
|
||||
text +="\n";
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#endif //FILTER_PARSER_AST_HPP
|
Loading…
Reference in a new issue