Corrected parser logic
This commit is contained in:
parent
ab576e8d6f
commit
b2f9eddebe
@ -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;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user