diff options
author | Peter Mikkelsen <petermikkelsen10@gmail.com> | 2022-01-11 23:21:05 +0000 |
---|---|---|
committer | Peter Mikkelsen <petermikkelsen10@gmail.com> | 2022-01-11 23:21:05 +0000 |
commit | 37fe04b08b3cae7390f75eb1bb25d8fd4e958384 (patch) | |
tree | 53a6fd51258c5a7113b7bd7fa3766a47a0173070 /apl9.h | |
parent | ba681c740d09deb36587b847a3307c68de933c4c (diff) |
First try at implementing variables
Diffstat (limited to 'apl9.h')
-rw-r--r-- | apl9.h | 32 |
1 files changed, 27 insertions, 5 deletions
@@ -15,7 +15,10 @@ typedef enum LCurlTag, RCurlTag, LBracketTag, - RBracketTag + RBracketTag, + ArrowTag, + AssignmentTag, + NameTag, } datumTag; typedef enum @@ -24,12 +27,13 @@ typedef enum AtypeArray, } arrayDataType; - /* Data types */ typedef struct Array Array; typedef struct Expr Expr; typedef struct Function Function; typedef struct Datum Datum; +typedef struct Symbol Symbol; +typedef struct Symtab Symtab; struct Array { @@ -65,12 +69,25 @@ struct Datum datumTag tag; union { Array *array; - int code; Expr expr; Function func; + Symbol *symbol; }; }; +struct Symbol +{ + int undefined; + Rune *name; + Datum value; +}; + +struct Symtab +{ + int nsyms; + Symbol **syms; +}; + typedef Array* (*fnmonad)(Array*); typedef Array* (*fndyad)(Array*, Array*); @@ -81,7 +98,7 @@ Rune *ppdatums(Datum *, int); Rune *pparray(Array *); /* lexer.c */ -Datum *lexline(Rune *, int *); +Datum *lexline(Rune *, int *, Symtab *); /* array.c */ Array *mkarray(int, int, int); @@ -93,6 +110,10 @@ int simplescalar(Array *); /* eval.c */ Datum *eval(Datum *, int *); +/* symbol.c */ +Symbol *getsym(Symtab *, Rune *); +Symtab *newsymtab(void); + /* Monadic functions from functions.h */ Array *fnTally(Array *); Array *fnEnclose(Array *); @@ -113,4 +134,5 @@ extern Rune primmonopnames[]; /* lexer.c */ extern Rune primdyadopnames[]; /* lexer.c */ extern Rune primhybridnames[]; /* lexer.c */ extern fnmonad monadfunctiondefs[]; /* function.c */ -extern fndyad dyadfunctiondefs[]; /* function.c */
\ No newline at end of file +extern fndyad dyadfunctiondefs[]; /* function.c */ +extern Symtab *globalsymtab; /* symbol.c */
\ No newline at end of file |