Corrected parser logic

This commit is contained in:
anschrammh 2019-03-26 06:41:57 +01:00
parent ab576e8d6f
commit b2f9eddebe

View File

@ -35,19 +35,22 @@ void *CFGFileParser::parseFile()
if(parsedParameter == NULL) if(parsedParameter == NULL)
_state = ERROR; _state = ERROR;
//printf("%c",readChar); //printf("%c",readChar);
}//Add case when we start with a single quote (allowed and not an error) }
else if(readChar == '\'')
{
_state = OPENING_QUOTE;
_type = PARAMETER;
}
else else
_state = ERROR; _state = ERROR;
break; break;
case COMMENT_SECTION: case COMMENT_SECTION:
if(readChar == '\r') _state = LINE_BREAK; if(readChar == '\r' || readChar == '\n') _state = LINE_BREAK;
if(readChar == '\n') _state = LINE_BREAK;
break; break;
case LINE_BREAK: case LINE_BREAK:
if(readChar == '#') if(readChar == '#')
_state = COMMENT_SECTION; _state = COMMENT_SECTION;
else if(readChar == '\n') _state = LINE_BREAK; else if(readChar == '\r' || readChar == '\n') _state = LINE_BREAK;
else if(readChar == '\r') _state = LINE_BREAK;
else if((readChar >= 65 && readChar <= 90) || (readChar >= 97 && readChar <= 122) || (readChar >= 48 && readChar <= 57)) else if((readChar >= 65 && readChar <= 90) || (readChar >= 97 && readChar <= 122) || (readChar >= 48 && readChar <= 57))
{ {
_state = PARAM_SECTION; _state = PARAM_SECTION;
@ -64,24 +67,11 @@ void *CFGFileParser::parseFile()
} }
else else
_state = ERROR; _state = ERROR;
break; break;
case PARAM_SECTION: case PARAM_SECTION:
if(readChar == '\'')_state = OPENING_QUOTE; if(readChar == '\'')_state = OPENING_QUOTE;
else if(readChar == ':') _state = SEPARATION; else if(readChar == ':') _state = SEPARATION;
else if(readChar == '\n') else if(readChar == '\r' || readChar == '\n')
{
_state = LINE_BREAK;
if(parsedParameter != NULL)
{
//printf("%s --> %s\n", parsedParameter, parsedValue);
dictioRef->addParameter(parsedParameter, parsedValue == NULL ? "":parsedValue);
free(parsedParameter);free(parsedValue);
parsedParameter = NULL;
parsedValue = NULL;
}
}
else if(readChar == '\r')
{ {
_state = LINE_BREAK; _state = LINE_BREAK;
if(parsedParameter != NULL) if(parsedParameter != NULL)
@ -133,13 +123,20 @@ void *CFGFileParser::parseFile()
} }
else else
_state = ERROR; _state = ERROR;
break; break;
case SEPARATION: case SEPARATION:
_type = VALUE; _type = VALUE;
if(readChar == '\'')_state = OPENING_QUOTE; if(readChar == '\'')_state = OPENING_QUOTE;
//Add the usual verification (readChar >= 65 && readChar <= 90) || (readChar >= 97 && readChar <= 122) || (readChar >= 48 && readChar <= 57) else if(readChar == ' ') _state = PARAM_SECTION;
else _state = PARAM_SECTION; //Should be an error else if((readChar >= 65 && readChar <= 90) || (readChar >= 97 && readChar <= 122) || (readChar >= 48 && readChar <= 57))
{
_state = PARAM_SECTION;
parsedValue = addChar(parsedValue, readChar);
if(parsedValue == NULL)
_state = ERROR;
}
else _state = ERROR;
break; break;
case ERROR: case ERROR:
dictioRef->dispose(); dictioRef->dispose();
@ -148,7 +145,6 @@ void *CFGFileParser::parseFile()
free(parsedParameter); free(parsedParameter);
parsedValue = NULL; parsedValue = NULL;
parsedParameter = NULL; parsedParameter = NULL;
file.close();
return NULL; return NULL;
break; break;
} }