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

68
temp_parser.txt Normal file
View file

@ -0,0 +1,68 @@
int i = 32;
<defineIntLine> -> INT <variable> EQUALS <value> SEMICOLON
<variable> -> <alphaChar> <variableBody>
<variableBody> -> <alphaCharOrNum> <variableBody> | LAMBDA
<alphaCharOrNum> -> UPPER_ALPHA_CHAR | LOWER_ALPHA_CHAR | NUMBER
<value> -> NUMBER <valueBody>
<valueBody> -> NUMBER <valueBody> | LAMBDA
typedef struct TEMP_LangVar = {
ARC_String *name;
void *data;
} TEMP_LangVar;
void *(* ARC_Parser_ConstantCallbackFn)(void **data, void *parentdata);
defineIntLine
┌─────────────────── TEMP_LangVar var = { NULL, NULL }
│ INT
│ ┌───────────────── <- NULL
│ │ int
│ └─────────────────
│ variable
│ ┌───────────────── ARC_String_Create(&(var.name));
│ │ alphaChar
│ │ ┌─────────────── ARC_String_Append(var.name, "i");
│ │ │ i
│ │ └───────────────
│ │
│ │ variableBody
│ │ ┌───────────────
│ │ │ LAMBDA
│ │ └───────────────
│ └─────────────────
│ EQUALS
│ ┌─────────────────
│ │ =
│ └─────────────────
│ value
│ ┌───────────────── var.name = malloc(sizeof(int32_t));
│ │ NUMBER
│ │ ┌─────────────── *(var.name) = 3
│ │ │ 3
│ │ └───────────────
│ │
│ │ valueBody
│ │ ┌───────────────
│ │ │ NUMBER
│ │ │ ┌───────────── *(var.name) = *var.name * 10 + 2
│ │ │ │ 2
│ │ │ └─────────────
│ │ │
│ │ │ valueBody
│ │ │ ┌─────────────
│ │ │ │ LAMBDA
│ │ │ └─────────────
│ │ └───────────────
│ └─────────────────
│ SEMICOLON
│ ┌─────────────────
│ │ ;
│ └─────────────────
└───────────────────