archeus/temp_parser.txt

70 lines
2.4 KiB
Text

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
│ ┌─────────────────
│ │ ;
│ └─────────────────
└───────────────────