
callib
Dependencies: LCD_DISCO_F429ZI mbed BSP_DISCO_F429ZI
TokensHandling.cpp
- Committer:
- filipksiezyc
- Date:
- 2020-06-09
- Revision:
- 0:befccd954577
File content as of revision 0:befccd954577:
#include "TokensHandling.h" #include "mbed.h" #define MAX_KEYWORD_NR 4 enum Result {OK, ERR}; struct Keyword{ enum KeywordCode eCode; char cString[MAX_KEYWORD_STRING_LTH]; }; struct Keyword asKeywordList[MAX_KEYWORD_NR]={ {CALLIB, "callib"}, {GOTO, "goto"}, {ID, "id"}, {STEP, "step"}, }; void TokensHandler::ReplaceCharactersInString(char *pcString,char cOldChar,char cNewChar){ char *CurrentChar = strchr(pcString,cOldChar); while(*CurrentChar){ *CurrentChar = cNewChar; CurrentChar = strchr(CurrentChar,cOldChar); } } unsigned char TokensHandler::ucFindTokensInString(char *pcString){ char *pcTokenString = pcString; pcTokenString = strtok(pcTokenString, " "); for(ucTokenNr=0;((pcTokenString != NULL) && (ucTokenNr < MAX_TOKEN_NR));ucTokenNr++) { asToken[ucTokenNr].uValue.pcString = pcTokenString; pcTokenString = strtok(NULL, " "); } return ucTokenNr; } enum Result TokensHandler::eStringToKeyword (char pcStr[],enum KeywordCode *peKeywordCode){ unsigned char ucKeywordCounter; for(ucKeywordCounter=0; ucKeywordCounter< MAX_KEYWORD_NR; ucKeywordCounter++){ if( (strcmp(pcStr, asKeywordList[ucKeywordCounter].cString))==0){ *peKeywordCode = asKeywordList[ucKeywordCounter].eCode; return OK; } } return ERR; } void TokensHandler::DecodeTokens(void){ unsigned char ucTokenCounter; struct Token *psCurrentToken; unsigned int uiTokenValue; enum KeywordCode eTokenCode; for(ucTokenCounter= 0; ucTokenCounter< ucTokenNr; ucTokenCounter++){ psCurrentToken= &asToken[ucTokenCounter]; if(sscanf(asToken[ucTokenCounter].uValue.pcString, "%x", &uiTokenValue) == 1 ){ psCurrentToken->eType= NUMBER; psCurrentToken->uValue.uiNumber= uiTokenValue; } else if(OK== eStringToKeyword(psCurrentToken->uValue.pcString, &eTokenCode)){ psCurrentToken->eType=KEYWORD; psCurrentToken->uValue.eKeyword=eTokenCode; } else{ psCurrentToken->eType=STRING; } } } void TokensHandler::DecodeMsg(char *pcString){ ucTokenNr= ucFindTokensInString(pcString); ReplaceCharactersInString(pcString, ' ', NULL); DecodeTokens(); } TokensHandler::TokensHandler(){ ucTokenNr=0; }