fixed a lot of the lexer and parser (the segfault, and now can do char ranges)
This commit is contained in:
parent
050f7a8452
commit
b10f9b9123
4 changed files with 115 additions and 47 deletions
|
|
@ -25,7 +25,7 @@ void ARC_Parser_Create(ARC_Parser **parser, ARC_Array *language, ARC_Parser_Init
|
|||
(*parser)->language.size = language->size;
|
||||
(*parser)->language.data = malloc(sizeof(ARC_ParserLanguageTag) * language->size);
|
||||
|
||||
memcpy((*parser)->language.data, language->data, language->size);
|
||||
memcpy((*parser)->language.data, language->data, sizeof(ARC_ParserLanguageTag) * language->size);
|
||||
}
|
||||
|
||||
//create the lexer
|
||||
|
|
@ -103,6 +103,12 @@ void ARC_Parser_ParseTag(ARC_Parser *parser, uint32_t *lexerIndex, uint32_t tagI
|
|||
}
|
||||
|
||||
void ARC_Parser_Parse(ARC_Parser *parser, ARC_String **data){
|
||||
//make sure the parser has a language
|
||||
if(parser->language.size == 0){
|
||||
ARC_DEBUG_LOG_ERROR("ARC_Parser_Parse(parser, data), no parser language defined");
|
||||
return;
|
||||
}
|
||||
|
||||
//lex the subdata
|
||||
ARC_Lexer_LexString(parser->lexer, data);
|
||||
if(arc_errno){
|
||||
|
|
@ -110,11 +116,12 @@ void ARC_Parser_Parse(ARC_Parser *parser, ARC_String **data){
|
|||
return;
|
||||
}
|
||||
|
||||
//set the lexer index to start and get the first tag
|
||||
uint32_t lexerIndex = 0;
|
||||
ARC_ParserLanguageTag startTag = ((ARC_ParserLanguageTag *)parser->language.data)[0];
|
||||
ARC_ParserLanguageTag *startTag = parser->language.data;
|
||||
|
||||
//recursivly parse from the inital start tag
|
||||
ARC_Parser_ParseTag(parser, &lexerIndex, startTag.tagId);
|
||||
ARC_Parser_ParseTag(parser, &lexerIndex, startTag->tagId);
|
||||
if(arc_errno){
|
||||
ARC_DEBUG_LOG_ERROR("ARC_Parser_Parse(parser, data), could not parse the given data");
|
||||
return;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue