29 (*parser)->language.data = NULL;
33 (*parser)->language.size = language->
size;
36 for(uint32_t index = 0; index < language->
size; index++){
48 for(uint32_t orIndex = 0; orIndex < languageTag->
tokensOrTagsSize; orIndex++){
49 currentTag->
tokensOrTags[orIndex] = (uint32_t *)malloc(
sizeof(uint32_t) * (languageTag->
tokensOrTags[orIndex][0] + 1));
51 for(uint32_t tokenOrTagIndex = 0; tokenOrTagIndex < languageTag->
tokensOrTags[orIndex][0] + 1; tokenOrTagIndex++){
62 initLexerRulesFn(((*parser)->lexer));
65 (*parser)->data = NULL;
68 (*parser)->userData = userData;
71 (*parser)->createDataFn = NULL;
72 if(createDataFn != NULL){
74 *((*parser)->createDataFn) = *createDataFn;
78 (*parser)->destroyDataFn = NULL;
79 if(createDataFn != NULL){
81 *((*parser)->destroyDataFn) = *destroyDataFn;
91 for(uint32_t index = 0; index < languageSize; index++){
102 ARC_Parser_Create(parser, &languageAsArray, initLexerRulesFn, createDataFn, destroyDataFn, userData);
110 ARC_DEBUG_LOG_ERROR_WITH_VARIABLES(
"ARC_Parser_CreateFromString(parser, languageString, initLexerRulesFn, getStringIdFn, createDataFn, destroyDataFn, userData), failed to create language from: %s", languageString->
data);
129 for(uint32_t index = 0; index < parser->
language.
size; index++){
133 for(uint32_t orIndex = 0; orIndex < currentTag->
tokensOrTagsSize; orIndex++){
166 (*tagToken)->
id = id;
167 (*tagToken)->token = NULL;
168 (*tagToken)->tagTokens = NULL;
191 for(uint32_t index = 0; index < parser->
language.
size; index++){
193 if(foundTag->
tagId == tagToken->
id){
216 uint32_t lexerCheckIndex = *lexerIndex;
218 for(uint32_t tokenOrTagIndex = 1; tokenOrTagIndex < tag->
tokensOrTags[orIndex][0] + 1; tokenOrTagIndex++){
220 uint32_t nextTagId = tag->
tokensOrTags[orIndex][tokenOrTagIndex];
231 uint32_t tempLexerCheckIndex = lexerCheckIndex;
249 lexerCheckIndex = tempLexerCheckIndex;
274 nextTagToken->
token = token;
282 *lexerIndex = lexerCheckIndex;
313 uint32_t lexerIndex = 0;
349 if(fileString == NULL){
#define ARC_DEBUG_LOG_ERROR_WITH_VARIABLES(STR,...)
#define ARC_DEBUG_LOG_ERROR(STR)
void ARC_IO_FileToStr(ARC_String *path, ARC_String **data)
get string and size from file
ARC_LexerToken * ARC_Lexer_GetToken(ARC_Lexer *lexer, uint32_t index)
gets a token at a given index from a lexer
ARC_Bool ARC_Lexer_IsTokenId(ARC_Lexer *lexer, uint32_t id)
returns a boolean based on if a given id is a stored token rule id
void ARC_Lexer_LexString(ARC_Lexer *lexer, ARC_String **data)
creates tokens using a given string with ARC_LexerToken rules
void ARC_Lexer_Clear(ARC_Lexer *lexer)
clears all tokens from a lexer (will not clear token rules)
void ARC_Lexer_Create(ARC_Lexer **lexer)
creates an ARC_Lexer type
uint32_t ARC_Lexer_GetTokensSize(ARC_Lexer *lexer)
gets a token at a given index from a lexer
void ARC_Lexer_Destroy(ARC_Lexer *lexer)
destroys an ARC_Lexer type
void ARC_Parser_CreateFromString(ARC_Parser **parser, ARC_String *languageString, ARC_Parser_InitLexerRulesFn initLexerRulesFn, ARC_Parser_GetStringIdFn getStringIdFn, ARC_ParserData_CreateFn *createDataFn, ARC_ParserData_DestroyFn *destroyDataFn, void *userData)
creates an ARC_Parser type from a string
void ARC_Parser_ParseFile(ARC_Parser *parser, ARC_String *path)
ARC_Bool ARC_Parser_ParseTag(ARC_Parser *parser, ARC_ParserTagToken *tagToken, uint32_t *lexerIndex)
void ARC_ParserTagToken_Destroy(ARC_ParserTagToken *tagToken)
void ARC_ParserTagToken_Create(ARC_ParserTagToken **tagToken, uint32_t id)
void ARC_Parser_Create(ARC_Parser **parser, ARC_Array *language, ARC_Parser_InitLexerRulesFn initLexerRulesFn, ARC_ParserData_CreateFn *createDataFn, ARC_ParserData_DestroyFn *destroyDataFn, void *userData)
creates an ARC_Parser type
void ARC_ParserTagToken_VectorDestroyDataFn(void *data)
void ARC_Parser_Parse(ARC_Parser *parser, ARC_String **data)
void ARC_Parser_CreateFromVector(ARC_Parser **parser, ARC_Vector *language, ARC_Parser_InitLexerRulesFn initLexerRulesFn, ARC_ParserData_CreateFn *createDataFn, ARC_ParserData_DestroyFn *destroyDataFn, void *userData)
creates an ARC_Parser type from an arc vector
void ARC_Parser_Destroy(ARC_Parser *parser)
destroys an ARC_Parser type
void ARC_Parser_ClearData(ARC_Parser *parser)
void * ARC_Parser_GetData(ARC_Parser *parser)
#define ARC_PARSER_TAG_LAMBDA
basic tag for letting the parser know it is ok to end
uint32_t(* ARC_Parser_GetStringIdFn)(ARC_String *string)
TODO: write this.
void(* ARC_Parser_InitLexerRulesFn)(ARC_Lexer *lexer)
a callback function to initialize the lexer the parser uses with rules
void(* ARC_ParserData_CreateFn)(void **data, ARC_ParserTagToken *parsedData, void *userData)
TODO: write this.
void(* ARC_ParserData_DestroyFn)(void *data, ARC_Bool clear, void *userData)
TODO: write this.
void ARC_ParserLang_CreateAsParser(ARC_Parser **parser, ARC_Parser_GetStringIdFn getStringIdFn)
creates a parser for the Parser Lang
void ARC_String_Copy(ARC_String **copy, ARC_String *original)
copy a ARC_String
a type that holds an array of data and its size
a parser type used inside of the parser data create function
a langue tag type for the parser //TODO: explain this better
uint32_t tokensOrTagsSize
ARC_ParserData_CreateFn * createDataFn
ARC_ParserData_DestroyFn * destroyDataFn
substring position within a string
void(* ARC_Vector_DestroyDataFn)(void *data)
a callback that cleans up memory when it is removed from the vector
uint32_t ARC_Vector_GetSize(ARC_Vector *vector)
gets the current size of an ARC_Vector as an unsigned 32 bit integer
void * ARC_Vector_Get(ARC_Vector *vector, uint32_t index)
gets an item from an ARC_Vector at a position index
void ARC_Vector_Add(ARC_Vector *vector, void *data)
adds an item to an ARC_Vector
void ARC_Vector_Destroy(ARC_Vector *vector)
destroys an ARC_Vector
void ARC_Vector_Clear(ARC_Vector *vector)
clears all items from a vector
void ARC_Vector_Create(ARC_Vector **vector, ARC_Vector_CompareDataFn *compareDataFn, ARC_Vector_DestroyDataFn *destroyDataFn)
creates an ARC_Vector which is an "expandable" array