TokenType enum
parent
c9e0249008
commit
9b4a6e0131
|
@ -65,11 +65,12 @@ enum CBotGet
|
|||
};
|
||||
|
||||
/**
|
||||
* \enum EID
|
||||
* \enum TokenId
|
||||
* \brief This enum contains possible token types
|
||||
*/
|
||||
enum EID
|
||||
enum TokenId
|
||||
{
|
||||
TokenKeyWord = 2000, //!< keywords
|
||||
ID_IF = 2000,
|
||||
ID_ELSE,
|
||||
ID_WHILE,
|
||||
|
@ -104,11 +105,13 @@ enum EID
|
|||
ID_VOID,
|
||||
ID_BOOL,
|
||||
|
||||
TokenKeyVal = 2200, //!< keywords that represent values (true, false, null, nan)
|
||||
ID_TRUE = 2200,
|
||||
ID_FALSE,
|
||||
ID_NULL,
|
||||
ID_NAN,
|
||||
|
||||
TokenKeyOp = 2300, //!< operators
|
||||
ID_OPENPAR = 2300,
|
||||
ID_CLOSEPAR,
|
||||
ID_OPBLK,
|
||||
|
@ -157,10 +160,24 @@ enum EID
|
|||
ID_MODULO,
|
||||
ID_POWER,
|
||||
ID_ASSMODULO,
|
||||
|
||||
TX_UNDEF = 4000,
|
||||
TX_NAN
|
||||
};
|
||||
|
||||
/**
|
||||
* \enum TokenType
|
||||
* \brief Types of tokens
|
||||
*/
|
||||
enum TokenType {
|
||||
TokenTypNone = 0,
|
||||
TokenTypKeyWord = 1, //!< keyword of the language (see TokenKeyWord)
|
||||
TokenTypNum = 2, //!< number
|
||||
TokenTypString = 3, //!< string
|
||||
TokenTypVar = 4, //!< a variable name
|
||||
TokenTypDef = 5 //!< value according DefineNum
|
||||
};
|
||||
|
||||
/**
|
||||
* \enum CBotError
|
||||
* \brief This enum contains possible CBot error values. Values in range 5000-5999 are compile errors, 6000-6999 are runtime errors
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
|
||||
//! \brief Keeps the string corresponding to keyword ID
|
||||
// Map is filled with id-string pars that are needed for CBot language parsing
|
||||
static const std::map<EID, const std::string> s_keywordString = {
|
||||
static const std::map<TokenId, const std::string> s_keywordString = {
|
||||
{ID_IF, "if"},
|
||||
{ID_ELSE, "else"},
|
||||
{ID_WHILE, "while"},
|
||||
|
@ -95,7 +95,7 @@ static const std::map<EID, const std::string> s_keywordString = {
|
|||
};
|
||||
|
||||
static const std::string emptyString = "";
|
||||
const std::string& LoadString(EID id)
|
||||
const std::string& LoadString(TokenId id)
|
||||
{
|
||||
if (s_keywordString.find(id) != s_keywordString.end())
|
||||
{
|
||||
|
|
|
@ -9,4 +9,4 @@
|
|||
* \param id Provided identifier.
|
||||
* \return String if found, else NullString.
|
||||
*/
|
||||
const std::string& LoadString(EID id);
|
||||
const std::string& LoadString(TokenId id);
|
||||
|
|
|
@ -50,7 +50,7 @@ CBotToken::CBotToken(const CBotToken* pSrc)
|
|||
m_Text.clear();
|
||||
m_Sep.clear();
|
||||
|
||||
m_type = 0;
|
||||
m_type = TokenTypNone;
|
||||
m_IdKeyWord = 0;
|
||||
|
||||
m_start = 0;
|
||||
|
@ -350,7 +350,7 @@ bis:
|
|||
|
||||
if (CharInList( mot[0], num )) token->m_type = TokenTypNum;
|
||||
if (mot[0] == '\"') token->m_type = TokenTypString;
|
||||
if (first) token->m_type = 0;
|
||||
if (first) token->m_type = TokenTypNone;
|
||||
|
||||
token->m_IdKeyWord = GetKeyWords(mot);
|
||||
if (token->m_IdKeyWord > 0) token->m_type = TokenTypKeyWord;
|
||||
|
@ -400,7 +400,7 @@ CBotToken* CBotToken::CompileTokens(const std::string& program, int& error)
|
|||
// adds a token as a terminator
|
||||
// ( useful for the previous )
|
||||
nxt = new CBotToken();
|
||||
nxt->m_type = 0;
|
||||
nxt->m_type = TokenTypNone;
|
||||
prv->m_next = nxt; // added after
|
||||
nxt->m_prev = prv;
|
||||
|
||||
|
@ -459,14 +459,7 @@ void CBotToken::LoadKeyWords()
|
|||
int i, n = 0;
|
||||
|
||||
i = TokenKeyWord; //start with keywords of the language
|
||||
while (!(s = LoadString(static_cast<EID>(i))).empty())
|
||||
{
|
||||
m_ListKeyWords.push_back(s);
|
||||
m_ListIdKeyWords[n++] = i++;
|
||||
}
|
||||
|
||||
i = TokenKeyDeclare; //keywords of declarations
|
||||
while (!(s = LoadString(static_cast<EID>(i))).empty())
|
||||
while (!(s = LoadString(static_cast<TokenId>(i))).empty())
|
||||
{
|
||||
m_ListKeyWords.push_back(s);
|
||||
m_ListIdKeyWords[n++] = i++;
|
||||
|
@ -474,14 +467,14 @@ void CBotToken::LoadKeyWords()
|
|||
|
||||
|
||||
i = TokenKeyVal; //keywords of values
|
||||
while (!(s = LoadString(static_cast<EID>(i))).empty())
|
||||
while (!(s = LoadString(static_cast<TokenId>(i))).empty())
|
||||
{
|
||||
m_ListKeyWords.push_back(s);
|
||||
m_ListIdKeyWords[n++] = i++;
|
||||
}
|
||||
|
||||
i = TokenKeyOp; //operators
|
||||
while (!(s = LoadString(static_cast<EID>(i))).empty())
|
||||
while (!(s = LoadString(static_cast<TokenId>(i))).empty())
|
||||
{
|
||||
m_ListKeyWords.push_back(s);
|
||||
m_ListIdKeyWords[n++] = i++;
|
||||
|
@ -542,4 +535,3 @@ bool IsOfTypeList(CBotToken* &p, int type1, ...)
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -22,40 +22,43 @@
|
|||
#include <vector>
|
||||
#include <string>
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////////////
|
||||
// Token management (tokens)
|
||||
|
||||
#define TokenTypKeyWord 1 // a keyword of the language (see TokenKeyWord)
|
||||
#define TokenTypNum 2 // number
|
||||
#define TokenTypString 3 // string
|
||||
#define TokenTypVar 4 // a variable name
|
||||
#define TokenTypDef 5 // value according DefineNum
|
||||
|
||||
#define TokenKeyWord 2000 // keywords of the language
|
||||
#define TokenKeyDeclare 2100 // keywords of declarations (int, float,..)
|
||||
#define TokenKeyVal 2200 // keywords representing the value (true, false, null, nan)
|
||||
#define TokenKeyOp 2300 // operators
|
||||
#include "CBot/CBotEnums.h"
|
||||
|
||||
#define MAXDEFNUM 1000 // limited number of DefineNum
|
||||
|
||||
/**
|
||||
* \class CBotToken
|
||||
* Responsible for token management. A CBot program is a text string. This string
|
||||
* is first transformed into a list of token. It will only treat the case as an
|
||||
* error where there is an illegal character in a string.
|
||||
* For example :
|
||||
* int var = 3 * ( pos.y + x )
|
||||
* is decomposed into (each line is a token)
|
||||
* int
|
||||
* var
|
||||
* =
|
||||
* 3
|
||||
* *
|
||||
* (
|
||||
* pos.y
|
||||
* +
|
||||
* x
|
||||
* )
|
||||
* \brief Class representing one token of a program.
|
||||
*
|
||||
* A CBot program starts as a text string. This string is first transformed into a list of tokens.
|
||||
*
|
||||
* \section Example Example
|
||||
* This code:
|
||||
* \code
|
||||
* int var = 3 * ( pos.y + x );
|
||||
* string test = "Hello world";
|
||||
* \endcode
|
||||
*
|
||||
* Is decomposed into (each line is a token, separate CBotToken instance):
|
||||
* \code
|
||||
* int
|
||||
* var
|
||||
* =
|
||||
* 3
|
||||
* *
|
||||
* (
|
||||
* pos
|
||||
* .
|
||||
* y
|
||||
* +
|
||||
* x
|
||||
* )
|
||||
* ;
|
||||
* string
|
||||
* test
|
||||
* =
|
||||
* "Hello world"
|
||||
* ;
|
||||
* \endcode
|
||||
*/
|
||||
|
||||
class CBotToken
|
||||
|
@ -204,7 +207,7 @@ private:
|
|||
//! The previous token in the linked list
|
||||
CBotToken* m_prev;
|
||||
//! The token type
|
||||
int m_type; // type of Token
|
||||
TokenType m_type; // type of Token
|
||||
//! The id of the keyword
|
||||
long m_IdKeyWord;
|
||||
|
||||
|
|
|
@ -667,10 +667,6 @@ void CScript::ColorizeScript(Ui::CEdit* edit, int rangeStart, int rangeEnd)
|
|||
{
|
||||
color = Gfx::FONT_HIGHLIGHT_KEYWORD;
|
||||
}
|
||||
else if (type >= TokenKeyDeclare && type < TokenKeyDeclare+100) // TODO: no idea :P seems to never happen
|
||||
{
|
||||
color = Gfx::FONT_HIGHLIGHT_TYPE;
|
||||
}
|
||||
else if (type >= TokenKeyVal && type < TokenKeyVal+100) // true, false, null, nan
|
||||
{
|
||||
color = Gfx::FONT_HIGHLIGHT_CONST;
|
||||
|
|
Loading…
Reference in New Issue