File indexing completed on 2024-04-21 04:36:19

0001 /* This file is part of kdev-pg-qt
0002    Copyright (C) 2011 Jonathan Schmidt-Dominé <devel@the-user.org>
0003 
0004    This library is free software; you can redistribute it and/or
0005    modify it under the terms of the GNU Library General Public
0006    License as published by the Free Software Foundation; either
0007    version 2 of the License, or (at your option) any later version.
0008 
0009    This library is distributed in the hope that it will be useful,
0010    but WITHOUT ANY WARRANTY; without even the implied warranty of
0011    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
0012    Library General Public License for more details.
0013 
0014    You should have received a copy of the GNU Library General Public License
0015    along with this library; see the file COPYING.LIB.  If not, write to
0016    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
0017    Boston, MA 02110-1301, USA.
0018 */
0019 
0020 #include "kdev-pg-token-type-gen.h"
0021 
0022 #include "kdev-pg.h"
0023 
0024 namespace KDevPG
0025 {
0026 
0027 class GenerateToken
0028 {
0029 public:
0030   QTextStream& out;
0031   int mTokenValue;
0032 
0033 public:
0034   GenerateToken(QTextStream& o): out(o), mTokenValue(1001)
0035   {}
0036 
0037   void operator()(QPair<QString, Model::TerminalItem*> const &__it);
0038 };
0039 
0040 void GenerateToken::operator()(QPair<QString, Model::TerminalItem*> const &__it)
0041 {
0042   Model::TerminalItem *t = __it.second;
0043   out << "Token_" << t->mName << " = ";
0044   if(t->mName == "EOF")
0045   {
0046     out << 1000;
0047   }
0048   else
0049   {
0050     out << mTokenValue;
0051     ++mTokenValue;
0052   }
0053   out << "," << Qt::endl;
0054 }
0055 
0056 void GenerateTokenType::operator()()
0057 {
0058   out << "struct TokenTypeWrapper // to be imported by using inheritance\n"
0059          "{\n"
0060          "enum TokenType\n{\n";
0061   GenerateToken gen(out);
0062   for(World::TerminalSet::iterator it = globalSystem.terminals.begin(); it != globalSystem.terminals.end(); ++it )
0063   {
0064     gen(qMakePair(it.key(), *it));
0065   }
0066   out << "TokenTypeSize\n"
0067          "}; // TokenType\n"
0068          "}; // TokenTypeWrapper\n"
0069          "\ntypedef TokenTypeWrapper::TokenType TokenType;\n";
0070 }
0071 
0072 }