lr_parser_canonical.H

00001 /*
00002  * This file is part of the "Archon" framework.
00003  * (http://files3d.sourceforge.net)
00004  *
00005  * Copyright © 2002 by Kristian Spangsege and Brian Kristiansen.
00006  *
00007  * Permission to use, copy, modify, and distribute this software and
00008  * its documentation under the terms of the GNU General Public License is
00009  * hereby granted. No representations are made about the suitability of
00010  * this software for any purpose. It is provided "as is" without express
00011  * or implied warranty. See the GNU General Public License
00012  * (http://www.gnu.org/copyleft/gpl.html) for more details.
00013  *
00014  * The characters in this file are ISO8859-1 encoded.
00015  *
00016  * The documentation in this file is in "Doxygen" style
00017  * (http://www.doxygen.org).
00018  */
00019 
00020 #ifndef ARCHON_UTILITIES_LR_PARSER_CANONICAL_H
00021 #define ARCHON_UTILITIES_LR_PARSER_CANONICAL_H
00022 
00023 #include <vector>
00024 
00025 #include <archon/util/cfg.H>
00026 #include <archon/util/lr_parser_base.H>
00027 
00028 namespace Archon
00029 {
00030   namespace Utilities
00031   {
00032     using namespace std;
00033 
00034     class ClrParser: public LrParserBase
00035     {
00036       vector<int> actionTable;
00037       vector<int> gotoTable;
00038       int numberOfStates;
00039 
00040       int getAction(int state, int terminal) const;
00041       int getGoto(int state, int nonterminal) const;
00042 
00043       struct LR1Item
00044       {
00045         int production;
00046         int position;
00047         int lookahead;
00048         LR1Item() {}
00049         LR1Item(int production, int position, int lookahead):
00050           production(production), position(position), lookahead(lookahead) {}
00051         bool operator<(const LR1Item &i) const
00052         {
00053           return production < i.production ||
00054             production == i.production && position < i.position ||
00055             position == i.position && lookahead < i.lookahead;
00056         }
00057       };
00058 
00059       string printItemSets(const vector<LR1Item> &,
00060                            const vector<set<int> > &, int width);
00061 
00062     public:
00063       ClrParser(CFG &, const ActorBase * =0, const Printer * =0);
00064       ~ClrParser();
00065     };
00066   }
00067 }
00068 
00069 #endif // ARCHON_UTILITIES_LR_PARSER_CANONICAL_H

Generated on Sun Jul 30 22:55:44 2006 for Archon by  doxygen 1.4.4