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