1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69
|
/*
* 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.
*/
/* (C) Marcin Kwadrans <quarter@users.sourceforge.net> */
#ifndef __LW_PARSER_H
#define __LW_PARSER_H
class LWVariable;
class LWPiece;
class LWBoard;
class LWCommandSegment;
class LWCommand;
class LWValue;
class LWProgram;
class LWProgramData {
GNode *tree_piece;
GSList *list_vars;
public:
~LWProgramData ();
void registerVariable (LWVariable *variable);
void setTree (GNode *a_tree);
GNode *getTree ();
void debugTree ();
};
class LWParser {
static guint ref_data;
static LWPiece *begin_piece;
static void matchWith (LWCommandSegment*pcmd, LWCommand *cmd, LWPiece *piece);
static void compareParity (gboolean **r,
LWCommand *cmd_a, LWPiece *piece_a,
LWCommand *cmd_b, LWPiece *piece_b);
static gboolean comparePriority (LWPiece *a, LWPiece *b);
static void toggleToSymbol (LWPiece *piece, const gchar *symbolname);
static void lexScan (LWPiece *prev, LWPiece *piece);
static GNode *parseIteration (GNode *prev, LWPiece *piece);
static LWValue *computeValue (LWProgramData *pd, GNode *node);
static void setArguments (LWProgramData *pd, LWCommand *cmd, GNode *node);
static void checkNode (LWProgramData *pd, GNode *node);
static gboolean parseIterCmd (GNode **nodeptr, GNode **nodeptr2, LWPiece *piece);
LWProgram *program;
gboolean enable_debug;
public:
static void unrefData ();
static LWCommand *getNodeCommand (GNode *node);
LWParser (LWProgram *a_program);
~LWParser ();
LWProgramData *parse (LWBoard *program_board);
void enableDebug (gboolean enable);
};
#endif
|