/************************************************************************************* * Copyright (C) 2008 by Aleix Pol * * * * This program is free software; you can redistribute it and/or * * modify it under the terms of the GNU General Public License * * as published by the Free Software Foundation; either version 2 * * of the License, or (at your option) any later version. * * * * This program 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 General Public License for more details. * * * * You should have received a copy of the GNU General Public License * * along with this program; if not, write to the Free Software * * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA * *************************************************************************************/ #include "explexer.h" #include "expressionparser.h" #include #include #include ExpLexer::ExpLexer(const QString &source) : AbstractLexer(source), m_pos(0) {} void ExpLexer::getToken() { int& pos=m_pos; const QString& a=m_source; for(; pos=a.length()) { ret.type = ExpressionTable::EOF_SYMBOL; } else if(a.length()>pos+1 && m_longOperators.contains(QString(a[pos])+a[pos+1])) { ret.type=m_longOperators[QString(a[pos])+a[pos+1]]; pos+=2; } else if(m_operators.contains(a[pos])) { ret.type=m_operators[a[pos]]; pos++; } else if(a[pos].decompositionTag()==QChar::Super) { QString super; for(int i=pos; i"+super+"", pos-oldpos); } else if(a[pos].isDigit() || (a.size()>pos && a[pos]=='.' && a[pos].isDigit())) { int coma=0; for(; pos0); if(attrib.isEmpty()) ret.val = QString("%2").arg(ret.val); else ret.val = QString("%2").arg(attrib.join(" ")).arg(ret.val); ret.type= ExpressionTable::tVal; } else if(a[pos].isLetter()) { for(; pos