parser working, needs more tests and an actual language to make sure that is true though
This commit is contained in:
parent
63dfb98aad
commit
606f8e4bad
10 changed files with 365 additions and 148 deletions
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
*/
|
||||
|
|
|
|||
|
|
@ -54,4 +54,4 @@ uint32_t ARC_Queue_Size(ARC_Queue *queue);
|
|||
}
|
||||
#endif
|
||||
|
||||
#endif //ARC_STD_QUEUE_H_
|
||||
#endif //ARC_STD_QUEUE_H_
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue