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
|
|
@ -94,3 +94,33 @@ ARC_TEST(Lexer_Check_Id_Unordered_Not_Continious){
|
|||
|
||||
ARC_Lexer_Destroy(lexer);
|
||||
}
|
||||
|
||||
ARC_TEST(Lexer_Check_Continious){
|
||||
ARC_Lexer *lexer;
|
||||
ARC_Lexer_Create(&lexer);
|
||||
|
||||
ARC_Lexer_RegisterTokenRule(lexer, ARC_LexerTokenRule_CreateAndReturnMatchCharRule(2, ':'));
|
||||
ARC_Lexer_RegisterTokenRule(lexer, ARC_LexerTokenRule_CreateAndReturnMatchCharRule(0, 0 ));
|
||||
ARC_Lexer_RegisterTokenRule(lexer, ARC_LexerTokenRule_CreateAndReturnMatchCharRule(3, ':'));
|
||||
ARC_Lexer_RegisterTokenRule(lexer, ARC_LexerTokenRule_CreateAndReturnMatchCharRule(1, ':'));
|
||||
ARC_Lexer_RegisterTokenRule(lexer, ARC_LexerTokenRule_CreateAndReturnMatchCharRule(4, ':'));
|
||||
|
||||
ARC_CHECK(ARC_Lexer_IsContinious(lexer) == ARC_True);
|
||||
|
||||
ARC_Lexer_Destroy(lexer);
|
||||
}
|
||||
|
||||
ARC_TEST(Lexer_Check_Not_Continious){
|
||||
ARC_Lexer *lexer;
|
||||
ARC_Lexer_Create(&lexer);
|
||||
|
||||
ARC_Lexer_RegisterTokenRule(lexer, ARC_LexerTokenRule_CreateAndReturnMatchCharRule(2, ':'));
|
||||
ARC_Lexer_RegisterTokenRule(lexer, ARC_LexerTokenRule_CreateAndReturnMatchCharRule(8, 0 ));
|
||||
ARC_Lexer_RegisterTokenRule(lexer, ARC_LexerTokenRule_CreateAndReturnMatchCharRule(3, ':'));
|
||||
ARC_Lexer_RegisterTokenRule(lexer, ARC_LexerTokenRule_CreateAndReturnMatchCharRule(1, ':'));
|
||||
ARC_Lexer_RegisterTokenRule(lexer, ARC_LexerTokenRule_CreateAndReturnMatchCharRule(4, ':'));
|
||||
|
||||
ARC_CHECK(ARC_Lexer_IsContinious(lexer) == ARC_False);
|
||||
|
||||
ARC_Lexer_Destroy(lexer);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -2,6 +2,7 @@
|
|||
#include "arc/std/errno.h"
|
||||
#include "arc/std/parser.h"
|
||||
#include "arc/std/lexer.h"
|
||||
#include "arc/std/vector.h"
|
||||
#include "arc/std/parser/parserlang.h"
|
||||
#include <stddef.h>
|
||||
|
||||
|
|
@ -12,16 +13,16 @@
|
|||
#define VARIABLE_NAME 24
|
||||
#define VARIABLE 25
|
||||
|
||||
void TEST_ParserLanguageTag_CreateStringFn(void **data){
|
||||
void TEST_ParserData_CreateStringFn(void **data){
|
||||
ARC_String_Create((ARC_String **)data, NULL, 0);
|
||||
}
|
||||
|
||||
void TEST_ParserLanguageTag_DestroyStringFn(void *data){
|
||||
void TEST_ParserData_DestroyStringFn(void *data){
|
||||
ARC_String_Destroy((ARC_String *)data);
|
||||
}
|
||||
|
||||
//for this very basic example, the tagId does not matter
|
||||
void TEST_ParserLanguageTag_AddFirstCharFn(void **data, uint32_t tagId, ARC_LexerToken *token, void *userData){
|
||||
void TEST_ParserTag_AddFirstCharFn(void **data, uint32_t tagId, uint32_t tagIndex, ARC_LexerToken *token, void *userData){
|
||||
if(*data == NULL){
|
||||
return;
|
||||
}
|
||||
|
|
@ -34,7 +35,7 @@ void TEST_ParserLanguageTag_AddFirstCharFn(void **data, uint32_t tagId, ARC_Lexe
|
|||
}
|
||||
|
||||
//for this very basic example, the tagId does not matter
|
||||
void TEST_ParserLanguageTag_AddCharFn(void **data, uint32_t tagId, ARC_LexerToken *token, void *userData){
|
||||
void TEST_ParserTag_AddCharFn(void **data, uint32_t tagId, uint32_t tagIndex, ARC_LexerToken *token, void *userData){
|
||||
if(*data == NULL){
|
||||
return;
|
||||
}
|
||||
|
|
@ -47,13 +48,13 @@ uint32_t *variableNameTags[] = { (uint32_t[]){ 2, CHAR_OR_NUM, VARIABLE_NAME
|
|||
uint32_t *variableTokensOrTags[] = { (uint32_t[]){ 2, CHAR, VARIABLE_NAME } };
|
||||
|
||||
//TODO: note how language function callbacks work, and how they use the parentData if createDataFn is NULL
|
||||
ARC_ParserData_CreateFn createStringFn = TEST_ParserLanguageTag_CreateStringFn;
|
||||
ARC_ParserData_DestroyFn destroyStringFn = TEST_ParserLanguageTag_DestroyStringFn;
|
||||
ARC_ParserData_CreateFn createStringFn = TEST_ParserData_CreateStringFn;
|
||||
ARC_ParserData_DestroyFn destroyStringFn = TEST_ParserData_DestroyStringFn;
|
||||
|
||||
ARC_ParserLanguageTag_AddDataFn addCharFn = TEST_ParserLanguageTag_AddCharFn;
|
||||
ARC_ParserLanguageTag_AddDataFn addFirstCharFn = TEST_ParserLanguageTag_AddFirstCharFn;
|
||||
ARC_ParserTag_AddDataFn addCharFn = TEST_ParserTag_AddCharFn;
|
||||
ARC_ParserTag_AddDataFn addFirstCharFn = TEST_ParserTag_AddFirstCharFn;
|
||||
|
||||
ARC_ParserLanguageTag testTags[3] = {
|
||||
ARC_ParserTag testTags[3] = {
|
||||
{
|
||||
VARIABLE, //tagId
|
||||
variableTokensOrTags, //tokensOrTags
|
||||
|
|
@ -213,7 +214,6 @@ ARC_TEST(Parser_Basic_GetParsedValue){
|
|||
ARC_Parser_Destroy(parser);
|
||||
}
|
||||
|
||||
|
||||
ARC_TEST(Parser_ParserLang_BasicTest){
|
||||
ARC_Parser *parser;
|
||||
ARC_Parser_CreateAsParserLang(&parser);
|
||||
|
|
@ -229,3 +229,26 @@ ARC_TEST(Parser_ParserLang_BasicTest){
|
|||
ARC_CHECK(arc_errno == 0);
|
||||
}
|
||||
|
||||
ARC_TEST(Parser_ParserLang_BasicVector){
|
||||
ARC_Vector *testLanguage;
|
||||
ARC_Vector_Create(&testLanguage, NULL, NULL);
|
||||
|
||||
ARC_Vector_Add(testLanguage, testTags + 0);
|
||||
ARC_Vector_Add(testLanguage, testTags + 1);
|
||||
ARC_Vector_Add(testLanguage, testTags + 2);
|
||||
|
||||
ARC_Parser *parser;
|
||||
ARC_Parser_CreateFromVector(&parser, testLanguage, TEST_Parser_InitLexerRulesFn, NULL, NULL);
|
||||
|
||||
ARC_String *tempString;
|
||||
ARC_String_CreateWithStrlen(&tempString, "variablename");
|
||||
|
||||
//this destroys string, so no need for cleanup
|
||||
ARC_Parser_Parse(parser, &tempString);
|
||||
|
||||
//cleanup
|
||||
ARC_Parser_Destroy(parser);
|
||||
ARC_Vector_Destroy(testLanguage);
|
||||
|
||||
ARC_CHECK(arc_errno == 0);
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue