diff --git a/.gitignore b/.gitignore index 47f37f6..b927c65 100644 --- a/.gitignore +++ b/.gitignore @@ -2,3 +2,5 @@ *.o alpha flex.h +grammar.tab.c +grammar.tab.h \ No newline at end of file diff --git a/Makefile b/Makefile index e912658..2f53d61 100644 --- a/Makefile +++ b/Makefile @@ -2,10 +2,9 @@ CC := gcc FLEX := flex LEX := lexicalStructure.lex EXE := alpha -CFLAGS := -std=c99 -Wall -CPPFLAGS := +CFLAGS := -build: lex.yy.c runner.o runner +compiler: lex.yy.c runner.o runner lex.yy.c: lexicalStructure.lex $(FLEX) -o lex.yy.c $(LEX) @@ -14,10 +13,13 @@ runner.o: runner.c runner.h flex.h $(CC) $(CFLAGS) -o runner.o -c runner.c runner: lex.yy.c runner.o - $(CC) -o $(EXE) runner.o lex.yy.c + $(CC) $(CFLAGS) -o $(EXE) runner.o lex.yy.c + +bison: grammar.y + bison -d grammar.y debug: CFLAGS += -DDEBUG=1 -debug: clean runner +debug: clean compiler test: ./$(EXE) ./tests/test_comments.alpha @@ -48,4 +50,6 @@ clean: rm -f $(EXE) rm -f flex.h rm -f *.tok - rm -f *.st + rm -f grammar.tab.c + rm -f grammar.tab.h + rm -f *.st \ No newline at end of file diff --git a/Makefile.save b/Makefile.save deleted file mode 100644 index 668af54..0000000 --- a/Makefile.save +++ /dev/null @@ -1,43 +0,0 @@ -CC := gcc -FLEX := flex -LEX := lexicalStructure.lex -EXE := runner -CFLAGS := -std=c99 -Wall -CPPFLAGS := - -runner: flex.o runner.o - $(CC) -o runner runner.o flex.o - -debug: CFLAGS += -DDEBUG=true -debug: clean runner - -runner.o: runner.c runner.h flex.h - $(CC) $(CFLAGS) -o runner.o -c runner.c - -flex.o: lex.yy.c typedefs.h - $(CC) $(CFLAGS) -o flex.o -c lex.yy.c - -lex.yy.c: lexicalStructure.lex - $(FLEX) -o lex.yy.c $(LEX) - -test: - ./$(EXE) ./tests/test_comments.alpha - ./$(EXE) ./tests/test_generalTokenTest.alpha - ./$(EXE) ./tests/test_keywords.alpha - ./$(EXE) ./tests/test_operators.alpha - ./$(EXE) ./tests/test_otherpunc.alpha - ./$(EXE) ./tests/test_simpleIntTest.alpha - ./$(EXE) ./tests/test_simpleLiterals.alpha - ./$(EXE) -tok ./tests/test_comments.alpha - ./$(EXE) -tok ./tests/test_generalTokenTest.alpha - ./$(EXE) -tok ./tests/test_keywords.alpha - ./$(EXE) -tok ./tests/test_operators.alpha - ./$(EXE) -tok ./tests/test_otherpunc.alpha - ./$(EXE) -tok ./tests/test_simpleIntTest.alpha - ./$(EXE) -tok ./tests/test_simpleLiterals.alpha -clean: - rm -f *.o - rm -f lex.yy.c - rm -f $(EXE) - rm -f flex.h - rm -f *.tok diff --git a/README.MD b/README.MD new file mode 100644 index 0000000..525582f --- /dev/null +++ b/README.MD @@ -0,0 +1,17 @@ +# The Translators α Compiler +#### Members: Annie Slenker, Meyer Simon, Partho Bhattacharya, & Scarlett Kadan + +## Lexical Analyzer +* **Undefined Behavior:** + * Spaces are not required between tokens. For instance, an INTEGER and an ID are valid even if there is no space between them +``` +Input: *5variable* +Output: 2 14 301 "5" + 1 1 101 "variable" +``` + +## Syntax Analyzer +* *Incomplete* + +## Symbol Table +* *TODO: Create diagram.* \ No newline at end of file diff --git a/grammar.y b/grammar.y index 19c6ea2..591d80a 100644 --- a/grammar.y +++ b/grammar.y @@ -1,3 +1,11 @@ +/* Syntax Analyzer with Bison (3.8.1) */ +/* (referenced Bison manual for file boilerplate [3.1]) */ + +// Prologue +%{ + #include +%} + %token ID 101 %token T_INTEGER 201 %token T_ADDRESS 202 @@ -44,3 +52,6 @@ %token RESERVE 613 %token RELEASE 614 %token COMMENT 700 +%% + +%% diff --git a/lexicalStructure.lex b/lexicalStructure.lex index 7857730..64b2863 100644 --- a/lexicalStructure.lex +++ b/lexicalStructure.lex @@ -81,6 +81,8 @@ SCHAR \\n|\\t|\\\"|[^\"\n\\] {ID} {if(DEBUG) {printf( "ID: %s (%d)\n", yytext, ID);} else {return ID;}} \n {line_number++; column_number = 1;} -. {column_number++;} +\t {column_number++;} +" " {column_number++;} +. {column_number++; return 1999;} %% diff --git a/runner.c b/runner.c index d170d26..ee872f4 100644 --- a/runner.c +++ b/runner.c @@ -1,4 +1,4 @@ -#include "symbol_table.h" +//#include "symbol_table.h" #include "symbol_table.c" #include "runner.h" @@ -80,18 +80,21 @@ int run(FILE *alpha) { } continue; } + if(token == 1999){ + printf("On line number %d and column number %d we have an invalid character:%s\n",line_number,column_number,yytext); + } column_number += yyleng; } if (st_flag != NULL) { //output symbol table, file pointer is - fprintf(st_flag, "just checking that this works \n"); + print_symbol_table(curr,st_flag); } if (yyin != NULL) { fclose(yyin); } - + if (tok_flag != NULL) { fclose(tok_flag); } @@ -136,7 +139,7 @@ int new_file(char *arg, char *alpha) { strcat(file_name, "."); strcat(file_name, arg + 1); - + if (strcmp(arg, "-tok") == 0) { tok_flag = fopen(file_name, "w"); } else if (strcmp(arg, "-st") == 0) { diff --git a/runner.h b/runner.h index e7a8194..73c94f2 100644 --- a/runner.h +++ b/runner.h @@ -20,9 +20,9 @@ int arg; SymbolTable * top; SymbolTable * curr; -int main(int argc, char* argv[]); +// int main(int argc, char* argv[]); char *is_tok(int argc, char* argv[]); -int is_alpha_file(char *file, int file_len); +// int is_alpha_file(char *file, int file_len); void enter_scope(int, int); void exit_scope(void); diff --git a/test b/test deleted file mode 100755 index 4941bf2..0000000 Binary files a/test and /dev/null differ