49 uint32_t *uint = (uint32_t *)data;
57 for(uint32_t orIndex = 0; orIndex < currentTag->
tokensOrTagsSize; orIndex++){
69 if(tagToken->
token != NULL){
125 switch(childTagToken->
id){
137 id = (uint32_t *)malloc(
sizeof(uint32_t));
138 *
id = (*getStringIdFn)(tagOrConstantString);
162 uint32_t tokensOrTagsIndex = 0;
167 switch(childTagToken->
id){
209 bodyTag->
tagId = (*getStringIdFn)(tagIdString);
243 bodyTag->
tokensOrTags[orIndex] = (uint32_t *)malloc(
sizeof(uint32_t) * (orTokensOrTagsSize + 1));
247 for(uint32_t tokenOrTagIndex = 0; tokenOrTagIndex < orTokensOrTagsSize; tokenOrTagIndex++){
267 switch(childTagToken->
id){
290 if(parsedData == NULL){
292 ARC_DEBUG_LOG_ERROR(
"ARC_ParserLang_CreateDataFn(void **data, ARC_ParserTagToken *parsedData, void *userData), parsedData was NULL when passed in");
313 if(userData != NULL){
326 uint32_t *line[] = { (uint32_t[]){ 3,
ARC_PARSERLANG_BODY,
ARC_PARSERLANG_TOKEN_NEWLINE_ID,
ARC_PARSERLANG_LINE }, (uint32_t[]){ 1,
ARC_PARSERLANG_BODY }, (uint32_t[]){ 2,
ARC_PARSERLANG_TOKEN_NEWLINE_ID,
ARC_PARSERLANG_LINE }, (uint32_t[]){ 1,
ARC_PARSERLANG_LAMBDA } };
394 *newGetStringIdFn = getStringIdFn;
#define ARC_DEBUG_LOG_ERROR(STR)
#define ARC_LEXER_TOKEN_WHITESPACE
void ARC_Lexer_RegisterTokenRule(ARC_Lexer *lexer, ARC_LexerTokenRule tokenRule)
adds a token rule to a lexer
ARC_LexerTokenRule ARC_LexerTokenRule_CreateAndReturnMatchStringRule(uint32_t id, ARC_String *string)
creates a ARC_LexerTokenRule with a given id and string
ARC_LexerTokenRule ARC_LexerTokenRule_CreateAndReturnMatchCharRule(uint32_t id, char character)
creates a ARC_LexerTokenRule with a given id and character
ARC_LexerTokenRule ARC_LexerTokenRule_CreateAndReturnMatchCharOrBetween(uint32_t id, char start, char end)
creates a ARC_LexerTokenRule with a given id and character range
ARC_LexerTokenRule ARC_LexerTokenRule_CreateAndReturnMatchCharInStringRule(uint32_t id, ARC_String *string)
creates a ARC_LexerTokenRule with a given id and string
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
uint32_t(* ARC_Parser_GetStringIdFn)(ARC_String *string)
TODO: write this.
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_ParserLangParsedData_GetArgumentTag(ARC_Vector *orTokensOrTags, ARC_ParserTagToken *tagToken, ARC_Parser_GetStringIdFn *getStringIdFn)
void ARC_ParserLangParsedData_CreateTagString(ARC_String **tagString, ARC_ParserTagToken *tagToken)
void ARC_ParserLang_VectorDestroyVectorFn(void *data)
void ARC_ParserLang_CreateDataFn(void **data, ARC_ParserTagToken *parsedData, void *userData)
void ARC_ParserLang_CreateAsParser(ARC_Parser **parser, ARC_Parser_GetStringIdFn getStringIdFn)
creates a parser for the Parser Lang
void ARC_ParserLangParsedData_CreateBodyTag(ARC_ParserTag **tag, ARC_ParserTagToken *tagToken, ARC_Parser_GetStringIdFn *getStringIdFn)
void ARC_ParserLangParsedData_GetArgumentsTag(ARC_Vector *tokensOrTags, ARC_ParserTagToken *tagToken, ARC_Parser_GetStringIdFn *getStringIdFn)
void ARC_ParserLang_VectorDestroyParserTagFn(void *data)
void ARC_ParserLang_VectorDestroyUInt32Fn(void *data)
void ARC_ParserLangParsedData_RunLineTag(ARC_Vector *tags, ARC_ParserTagToken *tagToken, ARC_Parser_GetStringIdFn *getStringIdFn)
void ARC_ParserLang_DestroyDataFn(void *data, ARC_Bool clear, void *userData)
void ARC_ParserLang_InitLexerRulesFn(ARC_Lexer *lexer)
void ARC_ParserLangParsedData_RecurseStringAdd(ARC_String **data, ARC_ParserTagToken *tagToken)
#define ARC_PARSERLANG_TOKEN_OR_CHAR
#define ARC_PARSERLANG_TOKEN_UNDERSCORE_CHAR
#define ARC_PARSERLANG_CONSTANT_CHAR
#define ARC_PARSERLANG_TAG
#define ARC_PARSERLANG_ALPHA_CHAR
#define ARC_PARSERLANG_TOKEN_NEWLINE_ID
#define ARC_PARSERLANG_BODY
#define ARC_PARSERLANG_WHITESPACE
#define ARC_PARSERLANG_CONSTANT
#define ARC_PARSERLANG_TOKEN_NUMBER
#define ARC_PARSERLANG_TOKEN_GREATER_THAN_CHAR
#define ARC_PARSERLANG_TAG_OR_CONSTANT
#define ARC_PARSERLANG_TOKEN_ARROW_ID
#define ARC_PARSERLANG_TOKEN_LESS_THAN_ID
#define ARC_PARSERLANG_TOKEN_GREATER_THAN_ID
#define ARC_PARSERLANG_TOKEN_OR_ID
#define ARC_PARSERLANG_TOKEN_WHITESPACE
#define ARC_PARSERLANG_TOKEN_ALPHA_UPPER_CHAR
#define ARC_PARSERLANG_LINE
#define ARC_PARSERLANG_TOKEN_NEWLINE_CHAR
#define ARC_PARSERLANG_VARIABLE_BODY
#define ARC_PARSERLANG_TOKEN_NULL
#define ARC_PARSERLANG_VARIABLE_CHAR
#define ARC_PARSERLANG_CONSTANT_BODY
#define ARC_PARSERLANG_TOKEN_ALPHA_LOWER_CHAR
#define ARC_PARSERLANG_ARGUMENT
#define ARC_PARSERLANG_TOKEN_UNDERSCORE_ID
#define ARC_PARSERLANG_ARGUMENTS
#define ARC_PARSERLANG_TOKEN_ARROW_CSTRING
#define ARC_PARSERLANG_VARIABLE
#define ARC_PARSERLANG_TOKEN_LESS_THAN_CHAR
#define ARC_PARSERLANG_LAMBDA
void ARC_String_CreateWithStrlen(ARC_String **string, char *data)
creates ARC_String type with strinlen
void ARC_String_AppendCString(ARC_String **string, const char *cstring, uint64_t length)
appends to an ARC_String with an ARC_String
void ARC_String_Create(ARC_String **string, char *data, uint64_t length)
creates ARC_String type
void ARC_String_Append(ARC_String **string, ARC_String *append)
appends to an ARC_String with an ARC_String
void ARC_String_Destroy(ARC_String *string)
destroys ARC_String type
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
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_Create(ARC_Vector **vector, ARC_Vector_CompareDataFn *compareDataFn, ARC_Vector_DestroyDataFn *destroyDataFn)
creates an ARC_Vector which is an "expandable" array