1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57
|
#include "Opparser.cpp"
#include "Opdebugvisitor.h"
using namespace Op;
inline void addToken(KDevPG::TokenStream& str, Parser::TokenType kind)
{
static int i = 0;
Parser::Token &t = str.next();
t.kind = kind;
t.begin = i;
t.end = i;
++i;
}
int main(int argc, char **argv)
{
KDevPG::TokenStream token_stream;
Parser::memoryPoolType memory_pool;
Parser parser;
parser.setTokenStream(&token_stream);
parser.setMemoryPool(&memory_pool);
QString str = argc == 1 ? "1-*2^3" : argv[1];
#define A(t) addToken(token_stream, Parser::Token_##t);
for(int i = 0 ; i != str.size(); ++i)
{
if(str[i] == '-')
A(INV)
else if(str[i] == '+')
A(PLUS)
else if(str[i] == '*')
A(MUL)
else if(str[i] == '^')
A(POW)
else if(str[i] == '!')
A(NOT)
else if(str[i] == '(')
A(L_PAREN)
else if(str[i] == ')')
A(R_PAREN)
else if(str[i] == '?')
A(QUESTION)
else if(str[i] == ':')
A(COLON)
else
A(NUM)
}
A(EOF)
token_stream.rewind(0);
parser.yylex();
DocumentAst *doc;
kDebug() << parser.parseDocument(&doc);
DebugVisitor v(&token_stream, str);
v.visitDocument(doc);
}
|