From d4b977d0904a1dea37922dac60d3bb37f9769230 Mon Sep 17 00:00:00 2001 From: David Walter Seikel Date: Thu, 5 Jan 2012 04:47:56 +1000 Subject: Add a simple flex + btyacc stub. Will be fleshed out soon with LSL grammer. --- LuaSL/src/LuaSL_LSL_tree.c | 63 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 63 insertions(+) create mode 100644 LuaSL/src/LuaSL_LSL_tree.c (limited to 'LuaSL/src/LuaSL_LSL_tree.c') diff --git a/LuaSL/src/LuaSL_LSL_tree.c b/LuaSL/src/LuaSL_LSL_tree.c new file mode 100644 index 0000000..78da8e7 --- /dev/null +++ b/LuaSL/src/LuaSL_LSL_tree.c @@ -0,0 +1,63 @@ +/* + * Implementation of functions used to build the abstract syntax tree. + */ + +#include "LuaSL_LSL_tree.h" +#include + +/** + * @brief Allocates space for expression + * @return The expression or NULL if not enough memory + */ +static SExpression* allocateExpression() +{ + SExpression* b = malloc(sizeof *b); + + if( b == NULL ) return NULL; + + b->type = eVALUE; + b->value = 0; + + b->left = NULL; + b->right = NULL; + + return b; +} + +SExpression* createNumber(int value) +{ + SExpression* b = allocateExpression(); + + if( b == NULL ) return NULL; + + b->type = eVALUE; + b->value = value; + + return b; +} + +SExpression *createOperation( + EOperationType type, + SExpression *left, + SExpression *right) +{ + SExpression* b = allocateExpression(); + + if( b == NULL ) return NULL; + + b->type = type; + b->left = left; + b->right = right; + + return b; +} + +void deleteExpression(SExpression *b) +{ + if (b == NULL) return; + + deleteExpression(b->left); + deleteExpression(b->right); + + free(b); +} -- cgit v1.1