|
|
|
/*
|
|
|
|
Copyright (C) 2003 by Walter Schreppers
|
|
|
|
Copyright (C) 2004 by Cies Breijs
|
|
|
|
|
|
|
|
This program is free software; you can redistribute it and/or
|
|
|
|
modify it under the terms of version 2 of the GNU General Public
|
|
|
|
License as published by the Free Software Foundation.
|
|
|
|
|
|
|
|
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.
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
|
|
#ifndef _TOKEN_H_
|
|
|
|
#define _TOKEN_H_
|
|
|
|
|
|
|
|
#include <tqstring.h>
|
|
|
|
|
|
|
|
#include "value.h"
|
|
|
|
|
|
|
|
|
|
|
|
struct Pos // convenience, it codes a bit nicer with this, i.e.: "int row = tok.start.row"
|
|
|
|
{
|
|
|
|
uint row;
|
|
|
|
uint col;
|
|
|
|
};
|
|
|
|
|
|
|
|
struct Token
|
|
|
|
{
|
|
|
|
int type; // filled with enumed tokenTypes
|
|
|
|
TQString look; // the way the token looks in the text editor
|
|
|
|
Value value; // if the token is a number it can be stored here
|
|
|
|
Pos start; // row'n'col of the starting/ending point of the token
|
|
|
|
Pos end;
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
enum tokenTypes
|
|
|
|
{
|
|
|
|
tokNotSet = 0, // inittial type of all tokens
|
|
|
|
tokError = 1, // when there is an error
|
|
|
|
tokUnknown = 2, // when no token was found, a tokUnknown is often a variable, function or error
|
|
|
|
|
|
|
|
tokIf, // the execution controlling tokens
|
|
|
|
tokElse,
|
|
|
|
tokWhile,
|
|
|
|
tokFor,
|
|
|
|
tokTo,
|
|
|
|
tokStep,
|
|
|
|
tokForEach,
|
|
|
|
tokIn,
|
|
|
|
tokBreak,
|
|
|
|
tokReturn,
|
|
|
|
|
|
|
|
tokBegin, // the scope delimiting tokens
|
|
|
|
tokEnd,
|
|
|
|
|
|
|
|
tokNumber, // the containers
|
|
|
|
tokString,
|
|
|
|
|
|
|
|
tokAssign, // for assignments
|
|
|
|
|
|
|
|
tokAnd, // and, or, not
|
|
|
|
tokOr,
|
|
|
|
tokNot,
|
|
|
|
|
|
|
|
tokEq, // ==, !=, >=, >, <=, <
|
|
|
|
tokNe,
|
|
|
|
tokGe,
|
|
|
|
tokGt,
|
|
|
|
tokLe,
|
|
|
|
tokLt,
|
|
|
|
|
|
|
|
tokBraceOpen, // (, ), +, -, *, /
|
|
|
|
tokBraceClose,
|
|
|
|
tokPlus,
|
|
|
|
tokMinus,
|
|
|
|
tokMul,
|
|
|
|
tokDev,
|
|
|
|
|
|
|
|
tokComma,
|
|
|
|
|
|
|
|
tokEOL, // End Of Line token
|
|
|
|
tokEOF, // End Of File token
|
|
|
|
|
|
|
|
tokLearn, // learn command
|
|
|
|
|
|
|
|
tokClear, // the 'regular' command tokens
|
|
|
|
tokGo,
|
|
|
|
tokGoX,
|
|
|
|
tokGoY,
|
|
|
|
tokForward,
|
|
|
|
tokBackward,
|
|
|
|
tokDirection,
|
|
|
|
tokTurnLeft,
|
|
|
|
tokTurnRight,
|
|
|
|
tokCenter,
|
|
|
|
tokSetPenWidth,
|
|
|
|
tokPenUp,
|
|
|
|
tokPenDown,
|
|
|
|
tokSetFgColor,
|
|
|
|
tokSetBgColor,
|
|
|
|
tokResizeCanvas,
|
|
|
|
tokSpriteShow,
|
|
|
|
tokSpriteHide,
|
|
|
|
tokSpritePress,
|
|
|
|
tokSpriteChange,
|
|
|
|
tokMessage,
|
|
|
|
tokInputWindow,
|
|
|
|
tokPrint,
|
|
|
|
tokFontType,
|
|
|
|
tokFontSize,
|
|
|
|
tokRepeat,
|
|
|
|
tokRandom,
|
|
|
|
tokWait,
|
|
|
|
tokWrapOn,
|
|
|
|
tokWrapOff,
|
|
|
|
tokReset,
|
|
|
|
tokRun,
|
|
|
|
|
|
|
|
tokDo // a dummy command
|
|
|
|
};
|
|
|
|
|
|
|
|
// const TQString tokenTypeNames[] =
|
|
|
|
// {
|
|
|
|
// /* tokNotSet = 0 */ "",
|
|
|
|
// /* tokError = 1 */ "",
|
|
|
|
// /* tokUnknown = 2 */ "name",
|
|
|
|
//
|
|
|
|
// /* tokIf */ "if",
|
|
|
|
// /* tokElse */ "else",
|
|
|
|
// /* tokWhile */ "while",
|
|
|
|
// /* tokFor */ "for",
|
|
|
|
// /* tokTo */ "to",
|
|
|
|
// /* tokStep */ "step",
|
|
|
|
// /* tokForEach */ "each",
|
|
|
|
// /* tokIn */ "in",
|
|
|
|
// /* tokBreak */ "break",
|
|
|
|
// /* tokReturn */ "return",
|
|
|
|
//
|
|
|
|
// /* tokBegin */ "",
|
|
|
|
// /* tokEnd */ "",
|
|
|
|
//
|
|
|
|
// /* tokNumber */ "number",
|
|
|
|
// /* tokString */ "string",
|
|
|
|
//
|
|
|
|
// /* tokAssign */ "asignment",
|
|
|
|
//
|
|
|
|
// /* tokAnd */ "and",
|
|
|
|
// /* tokOr */ "or",
|
|
|
|
// /* tokNot */ "not",
|
|
|
|
//
|
|
|
|
// /* tokEq */ "questions",
|
|
|
|
// /* tokNe */ "questions",
|
|
|
|
// /* tokGe */ "questions",
|
|
|
|
// /* tokGt */ "questions",
|
|
|
|
// /* tokLe */ "questions",
|
|
|
|
// /* tokLt */ "questions",
|
|
|
|
//
|
|
|
|
// /* tokBraceOpen */ "math",
|
|
|
|
// /* tokBraceClose */ "math",
|
|
|
|
// /* tokPlus */ "math",
|
|
|
|
// /* tokMinus */ "math",
|
|
|
|
// /* tokMul */ "math",
|
|
|
|
// /* tokDev */ "math",
|
|
|
|
//
|
|
|
|
// /* tokComma */ "",
|
|
|
|
//
|
|
|
|
// /* tokEOL */ "",
|
|
|
|
// /* tokEOF */ "",
|
|
|
|
//
|
|
|
|
// /* tokLearn */ "learn",
|
|
|
|
//
|
|
|
|
// /* tokClear */ "clear",
|
|
|
|
// /* tokGo */ "go",
|
|
|
|
// /* tokGoX */ "gox",
|
|
|
|
// /* tokGoY */ "goy",
|
|
|
|
// /* tokForward */ "forward",
|
|
|
|
// /* tokBackward */ "backward",
|
|
|
|
// /* tokDirection */ "direction",
|
|
|
|
// /* tokTurnLeft */ "turnleft",
|
|
|
|
// /* tokTurnRight */ "turnright",
|
|
|
|
// /* tokCenter */ "center",
|
|
|
|
// /* tokSetPenWidth */ "setpenwidth",
|
|
|
|
// /* tokPenUp */ "penup",
|
|
|
|
// /* tokPenDown */ "pendown",
|
|
|
|
// /* tokSetFgColor */ "setfgcolor",
|
|
|
|
// /* tokSetBgColor */ "setbgcolor",
|
|
|
|
// /* tokResizeCanvas */ "resizecanvas",
|
|
|
|
// /* tokSpriteShow */ "spriteshow",
|
|
|
|
// /* tokSpriteHide */ "spritehide",
|
|
|
|
// /* tokSpritePress */ "",
|
|
|
|
// /* tokSpriteChange */ "",
|
|
|
|
// /* tokMessage */ "message",
|
|
|
|
// /* tokInputWindow */ "inputwindow",
|
|
|
|
// /* tokPrint */ "print",
|
|
|
|
// /* tokFontType */ "",
|
|
|
|
// /* tokFontSize */ "fontsize",
|
|
|
|
// /* tokRepeat */ "repeat",
|
|
|
|
// /* tokRandom */ "random",
|
|
|
|
// /* tokWait */ "wait",
|
|
|
|
// /* tokWrapOn */ "wrapon",
|
|
|
|
// /* tokWrapOff */ "wrapoff",
|
|
|
|
// /* tokReset */ "reset",
|
|
|
|
// /* tokRun */ "run",
|
|
|
|
//
|
|
|
|
// /* tokDo */ "",
|
|
|
|
// };
|
|
|
|
//
|
|
|
|
// // TQString Token::tokenType2name(int tokenType)
|
|
|
|
// // {
|
|
|
|
// // if (tokenType >= 0) return tokenTypeNames[tokenType];
|
|
|
|
// // else return "";
|
|
|
|
// // }
|
|
|
|
|
|
|
|
#endif // _TOKEN_H_
|