summaryrefslogtreecommitdiff
path: root/apl9.h
diff options
context:
space:
mode:
authorPeter Mikkelsen <petermikkelsen10@gmail.com>2022-01-11 23:21:05 +0000
committerPeter Mikkelsen <petermikkelsen10@gmail.com>2022-01-11 23:21:05 +0000
commit37fe04b08b3cae7390f75eb1bb25d8fd4e958384 (patch)
tree53a6fd51258c5a7113b7bd7fa3766a47a0173070 /apl9.h
parentba681c740d09deb36587b847a3307c68de933c4c (diff)
First try at implementing variables
Diffstat (limited to 'apl9.h')
-rw-r--r--apl9.h32
1 files changed, 27 insertions, 5 deletions
diff --git a/apl9.h b/apl9.h
index 9de7b12..ca7ed7c 100644
--- a/apl9.h
+++ b/apl9.h
@@ -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