parser working, needs more tests and an actual language to make sure that is true though

This commit is contained in:
herbglitch 2024-11-20 10:27:17 -07:00
parent 63dfb98aad
commit 606f8e4bad
10 changed files with 365 additions and 148 deletions

View file

@ -117,9 +117,9 @@ void ARC_Lexer_PrintTokenRules(ARC_Lexer *lexer);
* @param[in] lexer the lexer to get the token from
* @param[in] index the index of the token in the lexer to get
*
* @return a copy of the token, or a token with max value for rule and NULL for data on error
* @return a token at the lexer index on success, otherwise NULL
*/
ARC_LexerToken ARC_Lexer_GetToken(ARC_Lexer *lexer, uint32_t index);
ARC_LexerToken *ARC_Lexer_GetToken(ARC_Lexer *lexer, uint32_t index);
/**
* @brief gets a token at a given index from a lexer

View file

@ -15,6 +15,21 @@ extern "C" {
*/
typedef struct ARC_Parser ARC_Parser;
/**
* @brief TODO: write this
*/
typedef void (* ARC_ParserData_CreateFn)(void **data);
/**
* @brief TODO: write this
*/
typedef void (* ARC_ParserData_DestroyFn)(void *data);
/**
* @brief TODO: write this
*/
typedef void (* ARC_ParserLanguageTag_AddDataFn)(void **data, uint32_t tagId, ARC_LexerToken *token);
/**
* @brief a langue tag type for the parser //TODO: explain this better
*/
@ -23,6 +38,8 @@ typedef struct ARC_ParserLanguageTag {
uint32_t **tokensOrTags;
uint32_t tokensOrTagsSize;
ARC_ParserLanguageTag_AddDataFn *addDataFn;
} ARC_ParserLanguageTag;
/**
@ -35,6 +52,8 @@ typedef void (* ARC_Parser_InitLexerRulesFn)(ARC_Lexer *lexer);
/**
* @brief creates an ARC_Parser type
*
* @TODO: fix this documentation to reflect changes
*
* @TODO: probs want to move the note to another file
* @note array of tokens for langauge? like
* ARC_ParserTag tag = {
@ -50,7 +69,7 @@ typedef void (* ARC_Parser_InitLexerRulesFn)(ARC_Lexer *lexer);
* @param[in] language an arry of ARC_ParserLanguageTags defining a langauge
* @param[in] initLexerRulesFn a callback used to initalize the token rules the lexer within the parser will use
*/
void ARC_Parser_Create(ARC_Parser **parser, ARC_Array *language, ARC_Parser_InitLexerRulesFn initLexerRulesFn);
void ARC_Parser_Create(ARC_Parser **parser, ARC_Array *language, ARC_Parser_InitLexerRulesFn initLexerRulesFn, ARC_ParserData_CreateFn *createDataFn, ARC_ParserData_DestroyFn *destroyDataFn);
/**
* @brief creates an ARC_Parser type from a string
@ -90,6 +109,20 @@ void ARC_Parser_Parse(ARC_Parser *parser, ARC_String **data);
*/
void ARC_Parser_ParseFile(ARC_Parser *parser, ARC_String *path);
/**
* @brief
*
* @param[in] parser
*/
void ARC_Parser_ClearData(ARC_Parser *parser);
/**
* @brief
*
* @param[in] parser
*/
void *ARC_Parser_GetData(ARC_Parser *parser);
/**
* @brief basic tag for letting the parser know it is ok to end
*/

View file

@ -54,4 +54,4 @@ uint32_t ARC_Queue_Size(ARC_Queue *queue);
}
#endif
#endif //ARC_STD_QUEUE_H_
#endif //ARC_STD_QUEUE_H_