still working on parser, plan to rework to parsing first, then calling struct creation callback after with vector of tokens and tags
This commit is contained in:
parent
fcc07493d3
commit
d69844dab1
9 changed files with 251 additions and 27 deletions
|
|
@ -6,8 +6,8 @@ extern "C" {
|
|||
#endif
|
||||
|
||||
#include "arc/std/array.h"
|
||||
//#include "arc/std/bool.h"
|
||||
#include "arc/std/lexer.h"
|
||||
#include "arc/std/vector.h"
|
||||
#include <stdint.h>
|
||||
|
||||
/**
|
||||
|
|
@ -28,20 +28,20 @@ typedef void (* ARC_ParserData_DestroyFn)(void *data);
|
|||
/**
|
||||
* @brief TODO: write this
|
||||
*/
|
||||
typedef void (* ARC_ParserLanguageTag_AddDataFn)(void **data, uint32_t tagId, ARC_LexerToken *token, void *userData);
|
||||
typedef void (* ARC_ParserTag_AddDataFn)(void **data, uint32_t tagId, uint32_t tagIndex, ARC_LexerToken *token, void *userData);
|
||||
|
||||
/**
|
||||
* @brief a langue tag type for the parser //TODO: explain this better
|
||||
*/
|
||||
typedef struct ARC_ParserLanguageTag {
|
||||
typedef struct ARC_ParserTag {
|
||||
uint32_t tagId;
|
||||
|
||||
uint32_t **tokensOrTags;
|
||||
uint32_t tokensOrTagsSize;
|
||||
|
||||
ARC_ParserLanguageTag_AddDataFn *addDataFn;
|
||||
ARC_ParserTag_AddDataFn *addDataFn;
|
||||
void *addUserData;
|
||||
} ARC_ParserLanguageTag;
|
||||
} ARC_ParserTag;
|
||||
|
||||
/**
|
||||
* @brief a callback function to initialize the lexer the parser uses with rules
|
||||
|
|
@ -72,6 +72,15 @@ typedef void (* ARC_Parser_InitLexerRulesFn)(ARC_Lexer *lexer);
|
|||
*/
|
||||
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 an arc vector
|
||||
*
|
||||
* @param[out] parser ARC_Parser to create
|
||||
* @param[in] language an vector 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_CreateFromVector(ARC_Parser **parser, ARC_Vector *language, ARC_Parser_InitLexerRulesFn initLexerRulesFn, ARC_ParserData_CreateFn *createDataFn, ARC_ParserData_DestroyFn *destroyDataFn);
|
||||
|
||||
/**
|
||||
* @brief creates an ARC_Parser type from a string
|
||||
*
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue