File indexing completed on 2024-04-28 04:36:08

0001 #include "Opparser.cpp"
0002 #include "Opdebugvisitor.h"
0003 
0004 
0005 using namespace Op;
0006 
0007 inline void addToken(KDevPG::TokenStream& str, Parser::TokenType kind)
0008 {
0009   static int i = 0;
0010   Parser::Token &t = str.next();
0011   t.kind = kind;
0012   t.begin = i;
0013   t.end = i;
0014   ++i;
0015 }
0016 
0017 int main(int argc, char **argv)
0018 {
0019     KDevPG::TokenStream token_stream;
0020     Parser::memoryPoolType memory_pool;
0021     Parser parser;
0022     parser.setTokenStream(&token_stream);
0023     parser.setMemoryPool(&memory_pool);
0024     QString str = argc == 1 ? "1-*2^3" : argv[1];
0025     #define A(t) addToken(token_stream, Parser::Token_##t);
0026     for(int i = 0 ; i != str.size(); ++i)
0027     {
0028       if(str[i] == '-')
0029         A(INV)
0030       else if(str[i] == '+')
0031         A(PLUS)
0032       else if(str[i] == '*')
0033         A(MUL)
0034       else if(str[i] == '^')
0035         A(POW)
0036       else if(str[i] == '!')
0037         A(NOT)
0038       else if(str[i] == '(')
0039         A(L_PAREN)
0040       else if(str[i] == ')')
0041         A(R_PAREN)
0042       else if(str[i] == '?')
0043         A(QUESTION)
0044       else if(str[i] == ':')
0045         A(COLON)
0046       else
0047         A(NUM)
0048     }
0049     A(EOF)
0050     token_stream.rewind(0);
0051     parser.yylex();
0052     DocumentAst *doc;
0053     kDebug() << parser.parseDocument(&doc);
0054     DebugVisitor v(&token_stream, str);
0055     v.visitDocument(doc);
0056 }
0057