merged with old parser stuff, and worked on parser a bit more
This commit is contained in:
commit
e4aa4a8b6d
8 changed files with 180 additions and 30 deletions
|
|
@ -0,0 +1,48 @@
|
|||
#include "arc/std/parser.h"
|
||||
#include "arc/std/lexer.h"
|
||||
#include <stdint.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
||||
struct ARC_Parser {
|
||||
ARC_Array language;
|
||||
|
||||
ARC_Lexer *lexer;
|
||||
};
|
||||
|
||||
void ARC_Parser_Create(ARC_Parser **parser, ARC_Array *language, ARC_Parser_InitLexerRulesFn initLexerRulesFn){
|
||||
*parser = (ARC_Parser *)malloc(sizeof(ARC_Parser));
|
||||
|
||||
//set the language size to 0 and data to NULL in case the language is NULL
|
||||
(*parser)->language.size = 0;
|
||||
(*parser)->language.data = NULL;
|
||||
|
||||
//if the language exists, copy the language
|
||||
if(language != NULL){
|
||||
(*parser)->language.size = language->size;
|
||||
(*parser)->language.data = malloc(sizeof(ARC_ParserLanguageTag) * language->size);
|
||||
|
||||
memcpy((*parser)->language.data, language->data, language->size);
|
||||
}
|
||||
|
||||
//create the lexer
|
||||
ARC_Lexer_Create(&((*parser)->lexer));
|
||||
|
||||
//register instructions to the lexer
|
||||
initLexerRulesFn(((*parser)->lexer));
|
||||
}
|
||||
|
||||
void ARC_Parser_CreateFromString(ARC_Parser **parser, ARC_String *languageString, ARC_Parser_InitLexerRulesFn initLexerRulesFn){
|
||||
}
|
||||
|
||||
void ARC_Parser_Destroy(ARC_Parser *parser){
|
||||
free(parser->language.data);
|
||||
|
||||
ARC_Lexer_Destroy(parser->lexer);
|
||||
|
||||
free(parser);
|
||||
}
|
||||
|
||||
void ARC_Parser_Parse(ARC_Parser *parser, ARC_String *data);
|
||||
|
||||
void ARC_Parser_ParseFile(ARC_Parser *parser, ARC_String *path);
|
||||
|
|
@ -173,7 +173,8 @@ ARC_Bool ARC_String_SubstringEqualsCString(ARC_String *string, uint64_t offset,
|
|||
return ARC_True;
|
||||
}
|
||||
|
||||
uint8_t ARC_String_Alpha(ARC_String *string){
|
||||
//TODO: fix this
|
||||
ARC_Bool ARC_String_IsAlpha(ARC_String *string){
|
||||
for(uint64_t length = string->length; length; length--){
|
||||
if(string->data[length - 1] >= 'a' && string->data[length - 1] <= 'z'){
|
||||
continue;
|
||||
|
|
@ -183,10 +184,20 @@ uint8_t ARC_String_Alpha(ARC_String *string){
|
|||
continue;
|
||||
}
|
||||
|
||||
return 1;
|
||||
return ARC_True;
|
||||
}
|
||||
|
||||
return 0;
|
||||
return ARC_False;
|
||||
}
|
||||
|
||||
ARC_Bool ARC_String_IsNumeric(ARC_String *string){
|
||||
for(uint64_t index = 0; index < string->length; index++){
|
||||
if(string->data[index] < '0' || string->data[index] > '9'){
|
||||
return ARC_False;
|
||||
}
|
||||
}
|
||||
|
||||
return ARC_True;
|
||||
}
|
||||
|
||||
uint64_t ARC_String_ToUint64_t(ARC_String *string){
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue