diff --git a/src/assemble.c b/src/assemble.c index e2ad1c8..ae760c0 100755 --- a/src/assemble.c +++ b/src/assemble.c @@ -1,5 +1,7 @@ #include +#include int main(int argc, char **argv) { + return EXIT_SUCCESS; } diff --git a/src/fileaccess.c b/src/fileio.c similarity index 96% rename from src/fileaccess.c rename to src/fileio.c index 14bf70d..45b25e8 100644 --- a/src/fileaccess.c +++ b/src/fileio.c @@ -37,6 +37,7 @@ int writeBinaryFile(word instrs[], char outputFile[]){ //reads assembly file of "inputFile" name, and passes //each line into a parser +//TODO: allocate whole file in memory, line-by-line int readAssemblyFile(char inputFile[]) { if (!isValidFileFormat(filename, "s")){ exit(EXIT_FAILURE); diff --git a/src/parser.c b/src/parser.c index 15f010a..53b8e0c 100644 --- a/src/parser.c +++ b/src/parser.c @@ -59,10 +59,10 @@ char *tokeniseOperands(char* str, int operandCount, char *operands[]){ operand = strtok(NULL, OPERAND_DELIMITER); operands[operandCount] = operand; } - return(operands); - } +//takes inputted assembly line and returns a +//pointer to an abstract representation of the instruction a64inst_instruction *parser(char asmLine[]){ a64inst_instruction *instr = malloc(sizeof(a64inst_instruction)); if (instr == NULL){ @@ -80,6 +80,7 @@ a64inst_instruction *parser(char asmLine[]){ } //"opcode operand1, {operand2}, ..." + //duplicated as strtok modifies the input string char *stringptr = strdup(asmLine); char *opcode = strtok(stringptr, " "); diff --git a/src/symboltable.c b/src/symboltable.c new file mode 100644 index 0000000..fb448c1 --- /dev/null +++ b/src/symboltable.c @@ -0,0 +1,43 @@ +#include + +typedef struct st st; + + + +typedef struct { + const void* key; + void* value; + node* prev; + node* next; +} node; + +struct st { + node* head; + node* tail; +}; + +// add new node to the end +void st_add(st table, void* key, void* value) { + node n = {key, value, table.tail}; + (*(table.tail)).next = &n; + table.tail = &n; +} + +// returns the pointer to key of the specified node, or null, if it does not exist +void* st_search(st table, void* key) { + return nodeSearch(table.head, key); +} + +void* nodeSearch(node* n, void* key) { + if (n != NULL) { + if ((*n).key == key) { + return (*n).value; + } + else { + return nodeSearch((*n).next, key); + } + } + else { + return NULL; + } +} \ No newline at end of file