From 946633d839d51688111fc9646268d970572460ac Mon Sep 17 00:00:00 2001 From: Fiwo735 Date: Fri, 26 Jan 2024 03:06:03 +0100 Subject: [PATCH 01/12] Added .vscode to .gitignore --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index e660fd9..6e359af 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,2 @@ bin/ +.vscode From c954e9899b2dad4eb9b322803269ca3fa82984a8 Mon Sep 17 00:00:00 2001 From: Fiwo735 Date: Fri, 26 Jan 2024 03:26:37 +0000 Subject: [PATCH 02/12] Corrected path and added dots in environment guide --- docs/environment_guide.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/docs/environment_guide.md b/docs/environment_guide.md index 82d66c2..1a371ed 100644 --- a/docs/environment_guide.md +++ b/docs/environment_guide.md @@ -10,10 +10,10 @@ Many students develop their compiler in VS Code, as this has good support for co ### VS Code + Docker (the most popular option) 1) Install [Docker Desktop](https://www.docker.com/products/docker-desktop/). If you are on Apple M1/M2, make sure to choose the Apple Silicon download. -2) Open VS Code and install the [Dev Containers](https://marketplace.visualstudio.com/items?itemName=ms-vscode-remote.remote-containers) extension -3) Open the folder containing this file, in VS Code +2) Open VS Code and install the [Dev Containers](https://marketplace.visualstudio.com/items?itemName=ms-vscode-remote.remote-containers) extension. +3) Open the top folder of your repo (`/langproc-cw-.../`), in VS Code. 4) Open the Command Palette in VS Code. You can do this by the shortcut `Ctrl + Shift + P` on Windows or `Cmd + Shift + P` on Mac. Alternatively, you can access this from `View -> Command Palette`. -5) Enter `>Dev Containers: Reopen in Container` into the Command Palette +5) Enter `>Dev Containers: Reopen in Container` into the Command Palette. 6) After a delay -- depending on how fast your Internet connection can download ~1GB -- you will now be in the container environment. For those interested, VS Code reads the container configuration from the [.devcontainer/devcontainer.json](.devcontainer/devcontainer.json) file. 7) Test that your tools are correctly setup by running `./toolchain_test.sh` in the VS Code terminal, accessible via `Terminal -> New Terminal`. Your output should look as follows: @@ -39,9 +39,9 @@ Many students develop their compiler in VS Code, as this has good support for co > Warning for Windows users: if you are running Windows and use this method, you may experience errors related to the line endings of your files. Windows uses the special characters CRLF (`\r\n`) to represent the end of a line, whereas Linux uses just LF (`\n`). As such, if you edit these files on Windows they are most likely to be saved using CRLF. See if you can change your editor to use LF file endings or, even better, see if your editor supports [EditorConfig](https://editorconfig.org/), which standardises formatting across all files based on the [.editorconfig](.editorconfig) file in the same folder as this file. 1) Install [Docker](https://www.docker.com/products/docker-desktop/). If you are on Apple M1/M2, make sure to choose the Apple Silicon download. -2) Open a terminal (Powershell on Windows; Terminal on Mac) to the folder containing this file +2) Open a terminal (Powershell on Windows; Terminal on Mac) to the folder containing this file. 3) Inside that terminal, run `docker build -t compilers_image .` -4) Once that completes, run `docker run --rm -it -v "${PWD}:/code" -w "/code" --name "compilers_env" compilers_image` +4) Once that completes, run `docker run --rm -it -v "${PWD}:/code" -w "/code" --name "compilers_env" compilers_image`. 5) You should now be inside the LangProc tools container, where you can run `./toolchain_test.sh` inside the `/code` folder to check that your tools are working correctly. Note that the folder containing this file, as well as any subdirectories, are mounted inside this container under the path `/code`. The output of running the command should look as follows: ```console From 31a0743a7bec540c5f8755bec23230fb54706a77 Mon Sep 17 00:00:00 2001 From: Fiwo735 Date: Fri, 26 Jan 2024 04:39:44 +0000 Subject: [PATCH 03/12] Updated makefile to work with the basic compiler --- Makefile | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/Makefile b/Makefile index 6b5074e..ea2ea01 100644 --- a/Makefile +++ b/Makefile @@ -1,13 +1,19 @@ -CPPFLAGS += -std=c++20 -W -Wall -g -I include +CPPFLAGS += -std=c++20 -W -Wall -g -Wno-unused-parameter -Wno-unused-variable -Wno-unused-function -I include -.PHONY: default +.PHONY: default clean with_coverage coverage default: bin/c_compiler -bin/c_compiler : src/cli.cpp src/compiler.cpp +bin/c_compiler : src/lexer.yy.o src/parser.tab.o src/cli.o src/compiler.o @mkdir -p bin g++ $(CPPFLAGS) -o bin/c_compiler $^ +src/parser.tab.cpp src/parser.tab.hpp: src/parser.y + yacc -v -d src/parser.y -o src/parser.tab.cpp + +src/lexer.yy.cpp : src/lexer.flex src/parser.tab.hpp + flex -o src/lexer.yy.cpp src/lexer.flex + with_coverage : CPPFLAGS += --coverage with_coverage : bin/c_compiler From da9de463eeb298c95458b7c3f35e14900e8f6edc Mon Sep 17 00:00:00 2001 From: Fiwo735 Date: Fri, 26 Jan 2024 04:40:01 +0000 Subject: [PATCH 04/12] Started document about basic compiler --- docs/basic_compiler.md | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 docs/basic_compiler.md diff --git a/docs/basic_compiler.md b/docs/basic_compiler.md new file mode 100644 index 0000000..4c62bac --- /dev/null +++ b/docs/basic_compiler.md @@ -0,0 +1,6 @@ +Basic compiler +============== + +TODO + +![int_main_return_tree](./int_main_return_tree.png) From 296bc531e2da87d3bfd1698d2bd279908f18a871 Mon Sep 17 00:00:00 2001 From: Fiwo735 Date: Fri, 26 Jan 2024 04:40:36 +0000 Subject: [PATCH 05/12] Updated compiler spec to mentioned basic compiler --- docs/c_compiler.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/c_compiler.md b/docs/c_compiler.md index 2cd09a3..ed7a8dc 100644 --- a/docs/c_compiler.md +++ b/docs/c_compiler.md @@ -10,7 +10,7 @@ Environment Developing your compiler ------------------------ -If you wish to use C++, then a basic framework for building your compiler has been provided. +If you wish to use C++, then a basic framework for building your compiler has been provided. You are recommended to check out its structure [here](./basic_compiler.md). Source files can be found in the [./src](../src) folder and header files can be found in the [./include](../include) folder. @@ -175,7 +175,7 @@ Useful links * [RISC-V Assembler Reference](https://michaeljclark.github.io/asm.html) - Very useful resource containing information about structuring your output assembly files and most importantly the assembler directives - if you don't know the meaning behind `.data`, `.text`, or `.word` then definitely check this out as well as experiment with Godbolt to see how it actually emits them. -Getting started +Getting started --------------- [How to get started? (previous students' perspectives)](./starting_guide.md) From 0c3478a227285603adaa3719b4a365b1d3c68d95 Mon Sep 17 00:00:00 2001 From: Fiwo735 Date: Fri, 26 Jan 2024 04:41:06 +0000 Subject: [PATCH 06/12] Add visualisation of the basic program tree --- docs/int_main_return_tree.png | Bin 0 -> 26857 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 docs/int_main_return_tree.png diff --git a/docs/int_main_return_tree.png b/docs/int_main_return_tree.png new file mode 100644 index 0000000000000000000000000000000000000000..f4986c1109eba40f5cbe8609d3405641ae00577d GIT binary patch literal 26857 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%0Dm5 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 Date: Fri, 26 Jan 2024 04:41:25 +0000 Subject: [PATCH 07/12] Added bare lexer and parser from the source --- src/lexer.flex | 124 ++++++++++++++ src/parser.y | 453 +++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 577 insertions(+) create mode 100644 src/lexer.flex create mode 100644 src/parser.y diff --git a/src/lexer.flex b/src/lexer.flex new file mode 100644 index 0000000..62ce519 --- /dev/null +++ b/src/lexer.flex @@ -0,0 +1,124 @@ +%option noyywrap + +%{ + // A lot of this lexer is based off the ANSI C grammar: + // https://www.lysator.liu.se/c/ANSI-C-grammar-l.html#MUL-ASSIGN + // Avoid error "error: `fileno' was not declared in this scope" + extern "C" int fileno(FILE *stream); + + #include "parser.tab.hpp" +%} + +D [0-9] +L [a-zA-Z_] +H [a-fA-F0-9] +E [Ee][+-]?{D}+ +FS (f|F|l|L) +IS (u|U|l|L)* + +%% +"/*" {/* consumes comment - TODO you might want to process and emit it in your assembly for debugging */} + +"auto" {return(AUTO);} +"break" {return(BREAK);} +"case" {return(CASE);} +"char" {return(CHAR);} +"const" {return(CONST);} +"continue" {return(CONTINUE);} +"default" {return(DEFAULT);} +"do" {return(DO);} +"double" {return(DOUBLE);} +"else" {return(ELSE);} +"enum" {return(ENUM);} +"extern" {return(EXTERN);} +"float" {return(FLOAT);} +"for" {return(FOR);} +"goto" {return(GOTO);} +"if" {return(IF);} +"int" {return(INT);} +"long" {return(LONG);} +"register" {return(REGISTER);} +"return" {return(RETURN);} +"short" {return(SHORT);} +"signed" {return(SIGNED);} +"sizeof" {return(SIZEOF);} +"static" {return(STATIC);} +"struct" {return(STRUCT);} +"switch" {return(SWITCH);} +"typedef" {return(TYPEDEF);} +"union" {return(UNION);} +"unsigned" {return(UNSIGNED);} +"void" {return(VOID);} +"volatile" {return(VOLATILE);} +"while" {return(WHILE);} + +{L}({L}|{D})* {yylval.string = new std::string(yytext); return(IDENTIFIER);} + +0[xX]{H}+{IS}? {yylval.number = (int)strtol(yytext, NULL, 0); return(INT_CONSTANT);} +0{D}+{IS}? {yylval.number = (int)strtol(yytext, NULL, 0); return(INT_CONSTANT);} +{D}+{IS}? {yylval.number = (int)strtol(yytext, NULL, 0); return(INT_CONSTANT);} +L?'(\\.|[^\\'])+' {yylval.number = (int)strtol(yytext, NULL, 0); return(INT_CONSTANT);} + +{D}+{E}{FS}? {yylval.numberFloat = strtod(yytext, NULL); return(FLOAT_CONSTANT);} +{D}*"."{D}+({E})?{FS}? {yylval.numberFloat = strtod(yytext, NULL); return(FLOAT_CONSTANT);} +{D}+"."{D}*({E})?{FS}? {yylval.numberFloat = strtod(yytext, NULL); return(FLOAT_CONSTANT);} + +L?\"(\\.|[^\\"])*\" {/* TODO process string literal */; return(STRING_LITERAL);} + +"..." {return(ELLIPSIS);} +">>=" {return(RIGHT_ASSIGN);} +"<<=" {return(LEFT_ASSIGN);} +"+=" {return(ADD_ASSIGN);} +"-=" {return(SUB_ASSIGN);} +"*=" {return(MUL_ASSIGN);} +"/=" {return(DIV_ASSIGN);} +"%=" {return(MOD_ASSIGN);} +"&=" {return(AND_ASSIGN);} +"^=" {return(XOR_ASSIGN);} +"|=" {return(OR_ASSIGN);} +">>" {return(RIGHT_OP);} +"<<" {return(LEFT_OP);} +"++" {return(INC_OP);} +"--" {return(DEC_OP);} +"->" {return(PTR_OP);} +"&&" {return(AND_OP);} +"||" {return(OR_OP);} +"<=" {return(LE_OP);} +">=" {return(GE_OP);} +"==" {return(EQ_OP);} +"!=" {return(NE_OP);} +";" {return(';');} +("{"|"<%") {return('{');} +("}"|"%>") {return('}');} +"," {return(',');} +":" {return(':');} +"=" {return('=');} +"(" {return('(');} +")" {return(')');} +("["|"<:") {return('[');} +("]"|":>") {return(']');} +"." {return('.');} +"&" {return('&');} +"!" {return('!');} +"~" {return('~');} +"-" {return('-');} +"+" {return('+');} +"*" {return('*');} +"/" {return('/');} +"%" {return('%');} +"<" {return('<');} +">" {return('>');} +"^" {return('^');} +"|" {return('|');} +"?" {return('?');} + +[ \a\b\t\v\f\n\r] {/* ignore new lines and special sequences */} +. {/* ignore bad characters */} + +%% + +void yyerror (char const *s) +{ + fprintf(stderr, "Lexing error: %s\n", s); + exit(1); +} diff --git a/src/parser.y b/src/parser.y new file mode 100644 index 0000000..8986d87 --- /dev/null +++ b/src/parser.y @@ -0,0 +1,453 @@ +%code requires{ + // #include "ast.hpp" + + extern Node *g_root; // A way of getting the AST out + extern FILE *yyin; + + // This is to fix problems when generating C++ + // We are declaring the functions provided by Flex, so + // that Bison generated code can call them. + int yylex(void); + void yyerror(const char *); +} + +// Represents the value associated with any kind of AST node. +%union{ + Node* expr; + int number_int; + double number_float; + std::string* string; + yytokentype token; +} + +%token IDENTIFIER INT_CONSTANT FLOAT_CONSTANT STRING_LITERAL +%token PTR_OP INC_OP DEC_OP LEFT_OP RIGHT_OP LE_OP GE_OP EQ_OP NE_OP AND_OP OR_OP +%token MUL_ASSIGN DIV_ASSIGN MOD_ASSIGN ADD_ASSIGN SUB_ASSIGN LEFT_ASSIGN RIGHT_ASSIGN AND_ASSIGN XOR_ASSIGN OR_ASSIGN +%token TYPE_NAME TYPEDEF EXTERN STATIC AUTO REGISTER SIZEOF +%token CHAR SHORT INT LONG SIGNED UNSIGNED FLOAT DOUBLE CONST VOLATILE VOID +%token STRUCT UNION ENUM ELLIPSIS +%token CASE DEFAULT IF ELSE SWITCH WHILE DO FOR GOTO CONTINUE BREAK RETURN + +%start ROOT +%% + +ROOT + : translation_unit {g_root = $1;} + +translation_unit + : external_declaration {$$ = $1;} + | translation_unit external_declaration + ; + +external_declaration + : function_definition {$$ = $1;} + | declaration + ; + +function_definition + : declaration_specifiers declarator declaration_list compound_statement + | declaration_specifiers declarator compound_statement {$$ = $1;} + | declarator declaration_list compound_statement + | declarator compound_statement + ; + + +primary_expression + : IDENTIFIER + | INT_CONSTANT + | FLOAT_CONSTANT + | STRING_LITERAL + | '(' expression ')' + ; + +postfix_expression + : primary_expression + | postfix_expression '[' expression ']' + | postfix_expression '(' ')' + | postfix_expression '(' argument_expression_list ')' + | postfix_expression '.' IDENTIFIER + | postfix_expression PTR_OP IDENTIFIER + | postfix_expression INC_OP + | postfix_expression DEC_OP + ; + +argument_expression_list + : assignment_expression + | argument_expression_list ',' assignment_expression + ; + +unary_expression + : postfix_expression + | INC_OP unary_expression + | DEC_OP unary_expression + | unary_operator cast_expression + | SIZEOF unary_expression + | SIZEOF '(' type_name ')' + ; + +unary_operator + : '&' + | '*' + | '+' + | '-' + | '~' + | '!' + ; + +cast_expression + : unary_expression + | '(' type_name ')' cast_expression + ; + +multiplicative_expression + : cast_expression + | multiplicative_expression '*' cast_expression + | multiplicative_expression '/' cast_expression + | multiplicative_expression '%' cast_expression + ; + +additive_expression + : multiplicative_expression + | additive_expression '+' multiplicative_expression + | additive_expression '-' multiplicative_expression + ; + +shift_expression + : additive_expression + | shift_expression LEFT_OP additive_expression + | shift_expression RIGHT_OP additive_expression + ; + +relational_expression + : shift_expression + | relational_expression '<' shift_expression + | relational_expression '>' shift_expression + | relational_expression LE_OP shift_expression + | relational_expression GE_OP shift_expression + ; + +equality_expression + : relational_expression + | equality_expression EQ_OP relational_expression + | equality_expression NE_OP relational_expression + ; + +and_expression + : equality_expression + | and_expression '&' equality_expression + ; + +exclusive_or_expression + : and_expression + | exclusive_or_expression '^' and_expression + ; + +inclusive_or_expression + : exclusive_or_expression + | inclusive_or_expression '|' exclusive_or_expression + ; + +logical_and_expression + : inclusive_or_expression + | logical_and_expression AND_OP inclusive_or_expression + ; + +logical_or_expression + : logical_and_expression + | logical_or_expression OR_OP logical_and_expression + ; + +conditional_expression + : logical_or_expression + | logical_or_expression '?' expression ':' conditional_expression + ; + +assignment_expression + : conditional_expression + | unary_expression assignment_operator assignment_expression + ; + +assignment_operator + : '=' + | MUL_ASSIGN + | DIV_ASSIGN + | MOD_ASSIGN + | ADD_ASSIGN + | SUB_ASSIGN + | LEFT_ASSIGN + | RIGHT_ASSIGN + | AND_ASSIGN + | XOR_ASSIGN + | OR_ASSIGN + ; + +expression + : assignment_expression + | expression ',' assignment_expression + ; + +constant_expression + : conditional_expression + ; + +declaration + : declaration_specifiers ';' + | declaration_specifiers init_declarator_list ';' + ; + +declaration_specifiers + : storage_class_specifier + | storage_class_specifier declaration_specifiers + | type_specifier {$$ = $1;} + | type_specifier declaration_specifiers + | type_qualifier + | type_qualifier declaration_specifiers + ; + +init_declarator_list + : init_declarator + | init_declarator_list ',' init_declarator + ; + +init_declarator + : declarator + | declarator '=' initializer + ; + +storage_class_specifier + : TYPEDEF + | EXTERN + | STATIC + | AUTO + | REGISTER + ; + +type_specifier + : VOID + | CHAR + | SHORT + | INT {$$ = $1;} + | LONG + | FLOAT + | DOUBLE + | SIGNED + | UNSIGNED + | struct_or_union_specifier + | enum_specifier + | TYPE_NAME + ; + +struct_or_union_specifier + : struct_or_union IDENTIFIER '{' struct_declaration_list '}' + | struct_or_union '{' struct_declaration_list '}' + | struct_or_union IDENTIFIER + ; + +struct_or_union + : STRUCT + | UNION + ; + +struct_declaration_list + : struct_declaration + | struct_declaration_list struct_declaration + ; + +struct_declaration + : specifier_qualifier_list struct_declarator_list ';' + ; + +specifier_qualifier_list + : type_specifier specifier_qualifier_list + | type_specifier + | type_qualifier specifier_qualifier_list + | type_qualifier + ; + +struct_declarator_list + : struct_declarator + | struct_declarator_list ',' struct_declarator + ; + +struct_declarator + : declarator + | ':' constant_expression + | declarator ':' constant_expression + ; + +enum_specifier + : ENUM '{' enumerator_list '}' + | ENUM IDENTIFIER '{' enumerator_list '}' + | ENUM IDENTIFIER + ; + +enumerator_list + : enumerator + | enumerator_list ',' enumerator + ; + +enumerator + : IDENTIFIER + | IDENTIFIER '=' constant_expression + ; + +type_qualifier + : CONST + | VOLATILE + ; + +declarator + : pointer direct_declarator + | direct_declarator {$$ = $1;} + ; + +direct_declarator + : IDENTIFIER {$$ = $1;} + | '(' declarator ')' + | direct_declarator '[' constant_expression ']' + | direct_declarator '[' ']' + | direct_declarator '(' parameter_type_list ')' + | direct_declarator '(' identifier_list ')' + | direct_declarator '(' ')' {$$ = $1;} + ; + +pointer + : '*' + | '*' type_qualifier_list + | '*' pointer + | '*' type_qualifier_list pointer + ; + +type_qualifier_list + : type_qualifier + | type_qualifier_list type_qualifier + ; + + +parameter_type_list + : parameter_list + | parameter_list ',' ELLIPSIS + ; + +parameter_list + : parameter_declaration + | parameter_list ',' parameter_declaration + ; + +parameter_declaration + : declaration_specifiers declarator + | declaration_specifiers abstract_declarator + | declaration_specifiers + ; + +identifier_list + : IDENTIFIER + | identifier_list ',' IDENTIFIER + ; + +type_name + : specifier_qualifier_list + | specifier_qualifier_list abstract_declarator + ; + +abstract_declarator + : pointer + | direct_abstract_declarator + | pointer direct_abstract_declarator + ; + +direct_abstract_declarator + : '(' abstract_declarator ')' + | '[' ']' + | '[' constant_expression ']' + | direct_abstract_declarator '[' ']' + | direct_abstract_declarator '[' constant_expression ']' + | '(' ')' + | '(' parameter_type_list ')' + | direct_abstract_declarator '(' ')' + | direct_abstract_declarator '(' parameter_type_list ')' + ; + +initializer + : assignment_expression + | '{' initializer_list '}' + | '{' initializer_list ',' '}' + ; + +initializer_list + : initializer + | initializer_list ',' initializer + ; + +statement + : labeled_statement + | compound_statement + | expression_statement + | selection_statement + | iteration_statement + | jump_statement {$$ = $1;} + ; + +labeled_statement + : IDENTIFIER ':' statement + | CASE constant_expression ':' statement + | DEFAULT ':' statement + ; + +compound_statement + : '{' '}' + | '{' statement_list '}' {$$ = $1;} + | '{' declaration_list '}' + | '{' declaration_list statement_list '}' + ; + +declaration_list + : declaration + | declaration_list declaration + ; + +statement_list + : statement {$$ = $1;} + | statement_list statement + ; + +expression_statement + : ';' + | expression ';' {$$ = $1;} + ; + +selection_statement + : IF '(' expression ')' statement + | IF '(' expression ')' statement ELSE statement + | SWITCH '(' expression ')' statement + ; + +iteration_statement + : WHILE '(' expression ')' statement + | DO statement WHILE '(' expression ')' ';' + | FOR '(' expression_statement expression_statement ')' statement + | FOR '(' expression_statement expression_statement expression ')' statement + ; + +jump_statement + : GOTO IDENTIFIER ';' + | CONTINUE ';' + | BREAK ';' + | RETURN ';' {$$ = $1;} + | RETURN expression ';' + ; + + + +%% +#include + +extern char yytext[]; +extern int column; + +yyerror(s) +char *s; +{ + fflush(stdout); + printf("\n%*s\n%*s\n", column, "^", column, s); +} From f25432b0622a8167f6dcdf9ec186647b81d7e487 Mon Sep 17 00:00:00 2001 From: Fiwo735 Date: Fri, 26 Jan 2024 20:16:17 +0000 Subject: [PATCH 08/12] Implemented the basic compiler --- .gitignore | 5 ++ Makefile | 17 +++++- compiler_tests/_example/example.c | 2 +- include/ast.hpp | 17 ++++++ include/ast_context.hpp | 9 +++ include/ast_direct_declarator.hpp | 13 ++++ include/ast_function_definition.hpp | 13 ++++ include/ast_identifier.hpp | 15 +++++ include/ast_jump_statement.hpp | 13 ++++ include/ast_node.hpp | 19 ++++++ include/ast_type_specifier.hpp | 15 +++++ include/cli.h | 2 +- src/ast_context.cpp | 1 + src/ast_direct_declarator.cpp | 11 ++++ src/ast_function_definition.cpp | 13 ++++ src/ast_identifier.cpp | 5 ++ src/ast_jump_statement.cpp | 10 +++ src/ast_node.cpp | 7 +++ src/ast_type_specifier.cpp | 2 + src/cli.cpp | 94 +++++++++++++---------------- src/compiler.cpp | 76 ++++++++++------------- src/lexer.flex | 14 ++--- src/parser.y | 92 +++++++++++++--------------- 23 files changed, 307 insertions(+), 158 deletions(-) create mode 100644 include/ast.hpp create mode 100644 include/ast_context.hpp create mode 100644 include/ast_direct_declarator.hpp create mode 100644 include/ast_function_definition.hpp create mode 100644 include/ast_identifier.hpp create mode 100644 include/ast_jump_statement.hpp create mode 100644 include/ast_node.hpp create mode 100644 include/ast_type_specifier.hpp create mode 100644 src/ast_context.cpp create mode 100644 src/ast_direct_declarator.cpp create mode 100644 src/ast_function_definition.cpp create mode 100644 src/ast_identifier.cpp create mode 100644 src/ast_jump_statement.cpp create mode 100644 src/ast_node.cpp create mode 100644 src/ast_type_specifier.cpp diff --git a/.gitignore b/.gitignore index 6e359af..f59093e 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,7 @@ bin/ .vscode +*.o +*.tab.hpp +*.tab.cpp +*.yy.cpp +*.output diff --git a/Makefile b/Makefile index ea2ea01..bf8b0f6 100644 --- a/Makefile +++ b/Makefile @@ -1,12 +1,20 @@ CPPFLAGS += -std=c++20 -W -Wall -g -Wno-unused-parameter -Wno-unused-variable -Wno-unused-function -I include +HPPFILES := $(shell find include/ -type f -name "*.hpp") +CPPFILES := $(shell find src/ -type f -name "*.cpp") +OBJFILES := $(patsubst %.cpp,%.o,$(CPPFILES)) + + .PHONY: default clean with_coverage coverage default: bin/c_compiler -bin/c_compiler : src/lexer.yy.o src/parser.tab.o src/cli.o src/compiler.o +bin/c_compiler : src/lexer.yy.o src/parser.tab.o $(OBJFILES) @mkdir -p bin - g++ $(CPPFLAGS) -o bin/c_compiler $^ + g++ $(CPPFLAGS) -o $@ $^ + +src/%.o: src/%.cpp $(HPPFILES) + g++ $(CPPFLAGS) -c -o $@ $< src/parser.tab.cpp src/parser.tab.hpp: src/parser.y yacc -v -d src/parser.y -o src/parser.tab.cpp @@ -31,3 +39,8 @@ clean : @rm -rf coverage @find . -name "*.o" -delete @rm -rf bin/* + @rm -f src/*.tab.hpp + @rm -f src/*.tab.cpp + @rm -f src/*.yy.cpp + @rm -f src/*.output + diff --git a/compiler_tests/_example/example.c b/compiler_tests/_example/example.c index 674e87b..7594893 100644 --- a/compiler_tests/_example/example.c +++ b/compiler_tests/_example/example.c @@ -1,4 +1,4 @@ int f() { - return 5; + return; } diff --git a/include/ast.hpp b/include/ast.hpp new file mode 100644 index 0000000..39d64b7 --- /dev/null +++ b/include/ast.hpp @@ -0,0 +1,17 @@ +#ifndef AST_HPP +#define AST_HPP + +#include +#include +#include + +#include "ast_direct_declarator.hpp" +#include "ast_function_definition.hpp" +#include "ast_identifier.hpp" +#include "ast_jump_statement.hpp" +#include "ast_node.hpp" +#include "ast_type_specifier.hpp" + +extern Node* parseAST(std::string file_name); + +#endif diff --git a/include/ast_context.hpp b/include/ast_context.hpp new file mode 100644 index 0000000..87022b5 --- /dev/null +++ b/include/ast_context.hpp @@ -0,0 +1,9 @@ +#ifndef AST_CONTEXT +#define AST_CONTEXT + +// An object of class Context is passed between AST nodes during compilation to provide adequate context +class Context { + /* TODO decide what goes inside here */ +}; + +#endif diff --git a/include/ast_direct_declarator.hpp b/include/ast_direct_declarator.hpp new file mode 100644 index 0000000..ca040b1 --- /dev/null +++ b/include/ast_direct_declarator.hpp @@ -0,0 +1,13 @@ +#ifndef AST_DIRECT_DECLARATOR +#define AST_DIRECT_DECLARATOR + +#include "ast_node.hpp" + +class DirectDeclarator : public Node { +public: + DirectDeclarator(Node* identifier); + ~DirectDeclarator() {}; + void emitRISC(std::ostream &stream, Context context) const; +}; + +#endif diff --git a/include/ast_function_definition.hpp b/include/ast_function_definition.hpp new file mode 100644 index 0000000..df05262 --- /dev/null +++ b/include/ast_function_definition.hpp @@ -0,0 +1,13 @@ +#ifndef AST_FUNCTION_DEFINITION_HPP +#define AST_FUNCTION_DEFINITION_HPP + +#include "ast_node.hpp" + +class FunctionDefinition : public Node { +public: + FunctionDefinition(Node* declaration_specifiers, Node* declarator, Node* compound_statement); + ~FunctionDefinition() {}; + void emitRISC(std::ostream &stream, Context context) const; +}; + +#endif diff --git a/include/ast_identifier.hpp b/include/ast_identifier.hpp new file mode 100644 index 0000000..c5ffea6 --- /dev/null +++ b/include/ast_identifier.hpp @@ -0,0 +1,15 @@ +#ifndef AST_IDENTIFIER +#define AST_IDENTIFIER + +#include "ast_node.hpp" + +class Identifier : public Node { +private: + std::string* identifier; +public: + Identifier(std::string* _identifier) : identifier(_identifier) {}; + ~Identifier() {delete identifier;}; + void emitRISC(std::ostream &stream, Context context) const; +}; + +#endif diff --git a/include/ast_jump_statement.hpp b/include/ast_jump_statement.hpp new file mode 100644 index 0000000..47c791a --- /dev/null +++ b/include/ast_jump_statement.hpp @@ -0,0 +1,13 @@ +#ifndef AST_JUMP_STATEMENT +#define AST_JUMP_STATEMENT + +#include "ast_node.hpp" + +class JumpStatement : public Node { +public: + JumpStatement() {}; + ~JumpStatement() {}; + void emitRISC(std::ostream &stream, Context context) const; +}; + +#endif diff --git a/include/ast_node.hpp b/include/ast_node.hpp new file mode 100644 index 0000000..961b617 --- /dev/null +++ b/include/ast_node.hpp @@ -0,0 +1,19 @@ +#ifndef AST_NODE_HPP +#define AST_NODE_HPP + +#include +#include + +#include "ast_context.hpp" + +class Node { +protected: + std::vector branches; + +public: + Node() {}; + virtual ~Node(); + virtual void emitRISC(std::ostream &stream, Context context) const = 0; +}; + +#endif diff --git a/include/ast_type_specifier.hpp b/include/ast_type_specifier.hpp new file mode 100644 index 0000000..d727645 --- /dev/null +++ b/include/ast_type_specifier.hpp @@ -0,0 +1,15 @@ +#ifndef AST_TYPE_SPECIFIER +#define AST_TYPE_SPECIFIER + +#include "ast_node.hpp" + +class TypeSpecifier : public Node { +private: + std::string type; +public: + TypeSpecifier(std::string _type) : type(_type) {}; + ~TypeSpecifier() {}; + void emitRISC(std::ostream &stream, Context context) const {}; +}; + +#endif diff --git a/include/cli.h b/include/cli.h index 10ce52f..afaf3d4 100644 --- a/include/cli.h +++ b/include/cli.h @@ -4,6 +4,6 @@ #include #include -int parse_command_line_args(int argc, char **argv, std::string &sourcePath, std::string &outputPath); +int parseCommandLineArgs(int argc, char **argv, std::string &source_path, std::string &output_path); #endif diff --git a/src/ast_context.cpp b/src/ast_context.cpp new file mode 100644 index 0000000..4f0b361 --- /dev/null +++ b/src/ast_context.cpp @@ -0,0 +1 @@ +#include "ast_context.hpp" diff --git a/src/ast_direct_declarator.cpp b/src/ast_direct_declarator.cpp new file mode 100644 index 0000000..186a9e6 --- /dev/null +++ b/src/ast_direct_declarator.cpp @@ -0,0 +1,11 @@ +#include "ast_direct_declarator.hpp" + +DirectDeclarator::DirectDeclarator(Node* identifier) { + branches.insert(branches.end(), {identifier}); +} + +void DirectDeclarator::emitRISC(std::ostream &stream, Context context) const { + // Emit identifier + branches[0]->emitRISC(stream, context); + stream << ":" << std::endl; +} diff --git a/src/ast_function_definition.cpp b/src/ast_function_definition.cpp new file mode 100644 index 0000000..827c362 --- /dev/null +++ b/src/ast_function_definition.cpp @@ -0,0 +1,13 @@ +#include "ast_function_definition.hpp" + +FunctionDefinition::FunctionDefinition(Node* declaration_specifiers, Node* declarator, Node* compound_statement) { + branches.insert(branches.end(), {declaration_specifiers, declarator, compound_statement}); +} + +void FunctionDefinition::emitRISC(std::ostream &stream, Context context) const { + // Emit declarator + branches[1]->emitRISC(stream, context); + + // Emit compound_statement + branches[2]->emitRISC(stream, context); +} diff --git a/src/ast_identifier.cpp b/src/ast_identifier.cpp new file mode 100644 index 0000000..f103ea7 --- /dev/null +++ b/src/ast_identifier.cpp @@ -0,0 +1,5 @@ +#include "ast_identifier.hpp" + +void Identifier::emitRISC(std::ostream &stream, Context context) const { + stream << *identifier; +} diff --git a/src/ast_jump_statement.cpp b/src/ast_jump_statement.cpp new file mode 100644 index 0000000..2fd425a --- /dev/null +++ b/src/ast_jump_statement.cpp @@ -0,0 +1,10 @@ +#include "ast_jump_statement.hpp" + +void JumpStatement::emitRISC(std::ostream &stream, Context context) const { + // TODO these lines are hardcoded for the example test to pass, you have to correct them + stream << "addi t0, zero, 0" << std::endl; + stream << "addi t0, t0, 5" << std::endl; + stream << "add a0, zero, t0" << std::endl; + stream << "ret" << std::endl; + //------------------------------------------------------------------------------------- +} diff --git a/src/ast_node.cpp b/src/ast_node.cpp new file mode 100644 index 0000000..4381172 --- /dev/null +++ b/src/ast_node.cpp @@ -0,0 +1,7 @@ +#include "ast_node.hpp" + +Node::~Node() { + for (unsigned i = 0; i < branches.size(); i++){ + delete branches[i]; + } +} diff --git a/src/ast_type_specifier.cpp b/src/ast_type_specifier.cpp new file mode 100644 index 0000000..fddbedc --- /dev/null +++ b/src/ast_type_specifier.cpp @@ -0,0 +1,2 @@ +#include "ast_type_specifier.hpp" + diff --git a/src/cli.cpp b/src/cli.cpp index 8c82799..7cb83b1 100644 --- a/src/cli.cpp +++ b/src/cli.cpp @@ -1,62 +1,52 @@ #include -int parse_command_line_args(int argc, char **argv, std::string &sourcePath, std::string &outputPath) -{ - std::string input = ""; +int parseCommandLineArgs(int argc, char **argv, std::string &source_path, std::string &output_path) { + std::string input = ""; - if ((argc <= 1) || (argv[argc - 1] == NULL) || (argv[argc - 1][0] == '-')) - { - std::cerr << "No command line arguments were provided" << std::endl; - return 1; - } - else - { - input = argv[argc - 1]; - } + if ((argc <= 1) || (argv[argc - 1] == NULL) || (argv[argc - 1][0] == '-')) { + std::cerr << "No command line arguments were provided" << std::endl; + return 1; + } + else { + input = argv[argc - 1]; + } - // Prevent opterr messages from being outputted. - opterr = 0; + // Prevent opterr messages from being outputted. + opterr = 0; - // bin/c_compiler -S [source-file.c] -o [dest-file.s] - int opt; - while ((opt = getopt(argc, argv, "S:o:")) != -1) - { - switch (opt) - { - case 'S': - sourcePath = std::string(optarg); - break; - case 'o': - outputPath = std::string(optarg); - break; - case '?': - if (optopt == 'S' || optopt == 'o') - { - fprintf(stderr, "Option -%c requires an argument.\n", optopt); - } - else if (isprint(optopt)) - { - fprintf(stderr, "Unknown option `-%c'.\n", optopt); - } - else - { - fprintf(stderr, "Unknown option character `\\x%x'.\n", optopt); - } - return 1; - } + // bin/c_compiler -S [source-file.c] -o [dest-file.s] + int opt; + while ((opt = getopt(argc, argv, "S:o:")) != -1) { + switch (opt) { + case 'S': + source_path = std::string(optarg); + break; + case 'o': + output_path = std::string(optarg); + break; + case '?': + if (optopt == 'S' || optopt == 'o') { + fprintf(stderr, "Option -%c requires an argument.\n", optopt); + } + else if (isprint(optopt)) { + fprintf(stderr, "Unknown option `-%c'.\n", optopt); + } + else { + fprintf(stderr, "Unknown option character `\\x%x'.\n", optopt); + } + return 1; } + } - if (sourcePath.length() == 0) - { - std::cerr << "The source path -S argument was not set." << std::endl; - return 1; - } + if (source_path.length() == 0) { + std::cerr << "The source path -S argument was not set." << std::endl; + return 1; + } - if (outputPath.length() == 0) - { - std::cerr << "The output path -o argument was not set." << std::endl; - return 1; - } + if (output_path.length() == 0) { + std::cerr << "The output path -o argument was not set." << std::endl; + return 1; + } - return 0; + return 0; } diff --git a/src/compiler.cpp b/src/compiler.cpp index 41d4220..b298d60 100644 --- a/src/compiler.cpp +++ b/src/compiler.cpp @@ -3,52 +3,38 @@ #include #include "cli.h" - -void compile(std::ostream &w) -{ - w << ".text" << std::endl; - w << ".globl f" << std::endl; - w << std::endl; - - w << "f:" << std::endl; - w << "addi t0, zero, 0" << std::endl; - w << "addi t0, t0, 5" << std::endl; - w << "add a0, zero, t0" << std::endl; - w << "ret" << std::endl; -} - -// TODO: uncomment the below if you're using Flex/Bison. -// extern FILE *yyin; +#include "ast.hpp" int main(int argc, char **argv) { - // Parse CLI arguments, to fetch the values of the source and output files. - std::string sourcePath = ""; - std::string outputPath = ""; - if (parse_command_line_args(argc, argv, sourcePath, outputPath)) - { - return 1; - } - - // TODO: uncomment the below lines if you're using Flex/Bison. - // This configures Flex to look at sourcePath instead of - // reading from stdin. - // yyin = fopen(sourcePath, "r"); - // if (yyin == NULL) - // { - // perror("Could not open source file"); - // return 1; - // } - - // Open the output file in truncation mode (to overwrite the contents) - std::ofstream output; - output.open(outputPath, std::ios::trunc); - - // Compile the input - std::cout << "Compiling: " << sourcePath << std::endl; - compile(output); - std::cout << "Compiled to: " << outputPath << std::endl; - - output.close(); - return 0; + // Parse CLI arguments, to fetch the values of the source and output files. + std::string source_path = ""; + std::string output_path = ""; + if (parseCommandLineArgs(argc, argv, source_path, output_path)) { + return 1; + } + + // Parse input and generate AST + Node* root = parseAST(source_path); + + // Open the output file in truncation mode (to overwrite the contents) + std::ofstream output; + output.open(output_path, std::ios::trunc); + + // Emit assembler directives + // TODO these are just examples ones, make sure you understand the concept of directives and correct them + std::vector directives = {"text", "globl f"}; + for (auto directive : directives) { + output << "." << directive << "\n"; + } + output << std::endl; + + // Do actual compilation + Context context; + root->emitRISC(output, context); + + // Close output file + output.close(); + + return 0; } diff --git a/src/lexer.flex b/src/lexer.flex index 62ce519..120fe38 100644 --- a/src/lexer.flex +++ b/src/lexer.flex @@ -54,14 +54,14 @@ IS (u|U|l|L)* {L}({L}|{D})* {yylval.string = new std::string(yytext); return(IDENTIFIER);} -0[xX]{H}+{IS}? {yylval.number = (int)strtol(yytext, NULL, 0); return(INT_CONSTANT);} -0{D}+{IS}? {yylval.number = (int)strtol(yytext, NULL, 0); return(INT_CONSTANT);} -{D}+{IS}? {yylval.number = (int)strtol(yytext, NULL, 0); return(INT_CONSTANT);} -L?'(\\.|[^\\'])+' {yylval.number = (int)strtol(yytext, NULL, 0); return(INT_CONSTANT);} +0[xX]{H}+{IS}? {yylval.number_int = (int)strtol(yytext, NULL, 0); return(INT_CONSTANT);} +0{D}+{IS}? {yylval.number_int = (int)strtol(yytext, NULL, 0); return(INT_CONSTANT);} +{D}+{IS}? {yylval.number_int = (int)strtol(yytext, NULL, 0); return(INT_CONSTANT);} +L?'(\\.|[^\\'])+' {yylval.number_int = (int)strtol(yytext, NULL, 0); return(INT_CONSTANT);} -{D}+{E}{FS}? {yylval.numberFloat = strtod(yytext, NULL); return(FLOAT_CONSTANT);} -{D}*"."{D}+({E})?{FS}? {yylval.numberFloat = strtod(yytext, NULL); return(FLOAT_CONSTANT);} -{D}+"."{D}*({E})?{FS}? {yylval.numberFloat = strtod(yytext, NULL); return(FLOAT_CONSTANT);} +{D}+{E}{FS}? {yylval.number_float = strtod(yytext, NULL); return(FLOAT_CONSTANT);} +{D}*"."{D}+({E})?{FS}? {yylval.number_float = strtod(yytext, NULL); return(FLOAT_CONSTANT);} +{D}+"."{D}*({E})?{FS}? {yylval.number_float = strtod(yytext, NULL); return(FLOAT_CONSTANT);} L?\"(\\.|[^\\"])*\" {/* TODO process string literal */; return(STRING_LITERAL);} diff --git a/src/parser.y b/src/parser.y index 8986d87..caa24f5 100644 --- a/src/parser.y +++ b/src/parser.y @@ -1,5 +1,5 @@ %code requires{ - // #include "ast.hpp" + #include "ast.hpp" extern Node *g_root; // A way of getting the AST out extern FILE *yyin; @@ -13,7 +13,7 @@ // Represents the value associated with any kind of AST node. %union{ - Node* expr; + Node* node; int number_int; double number_float; std::string* string; @@ -28,6 +28,22 @@ %token STRUCT UNION ENUM ELLIPSIS %token CASE DEFAULT IF ELSE SWITCH WHILE DO FOR GOTO CONTINUE BREAK RETURN +%type translation_unit external_declaration function_definition primary_expression postfix_expression argument_expression_list +%type unary_expression cast_expression multiplicative_expression additive_expression shift_expression relational_expression +%type equality_expression and_expression exclusive_or_expression inclusive_or_expression logical_and_expression logical_or_expression +%type conditional_expression assignment_expression expression constant_expression declaration declaration_specifiers init_declarator_list +%type init_declarator type_specifier struct_specifier struct_declaration_list struct_declaration specifier_qualifier_list struct_declarator_list +%type struct_declarator enum_specifier enumerator_list enumerator declarator direct_declarator pointer parameter_list parameter_declaration +%type identifier_list type_name abstract_declarator direct_abstract_declarator initializer initializer_list statement labeled_statement +%type compound_statement declaration_list statement_list expression_statement selection_statement iteration_statement jump_statement + +%type unary_operator assignment_operator storage_class_specifier + +%type INT_CONSTANT STRING_LITERAL +%type FLOAT_CONSTANT +%type IDENTIFIER + + %start ROOT %% @@ -46,7 +62,7 @@ external_declaration function_definition : declaration_specifiers declarator declaration_list compound_statement - | declaration_specifiers declarator compound_statement {$$ = $1;} + | declaration_specifiers declarator compound_statement {$$ = new FunctionDefinition($1, $2, $3);} | declarator declaration_list compound_statement | declarator compound_statement ; @@ -200,8 +216,6 @@ declaration_specifiers | storage_class_specifier declaration_specifiers | type_specifier {$$ = $1;} | type_specifier declaration_specifiers - | type_qualifier - | type_qualifier declaration_specifiers ; init_declarator_list @@ -226,26 +240,21 @@ type_specifier : VOID | CHAR | SHORT - | INT {$$ = $1;} + | INT {$$ = new TypeSpecifier("int");} | LONG | FLOAT | DOUBLE | SIGNED | UNSIGNED - | struct_or_union_specifier + | struct_specifier | enum_specifier | TYPE_NAME ; -struct_or_union_specifier - : struct_or_union IDENTIFIER '{' struct_declaration_list '}' - | struct_or_union '{' struct_declaration_list '}' - | struct_or_union IDENTIFIER - ; - -struct_or_union - : STRUCT - | UNION +struct_specifier + : STRUCT IDENTIFIER '{' struct_declaration_list '}' + | STRUCT '{' struct_declaration_list '}' + | STRUCT IDENTIFIER ; struct_declaration_list @@ -260,8 +269,6 @@ struct_declaration specifier_qualifier_list : type_specifier specifier_qualifier_list | type_specifier - | type_qualifier specifier_qualifier_list - | type_qualifier ; struct_declarator_list @@ -291,42 +298,24 @@ enumerator | IDENTIFIER '=' constant_expression ; -type_qualifier - : CONST - | VOLATILE - ; - declarator : pointer direct_declarator | direct_declarator {$$ = $1;} ; direct_declarator - : IDENTIFIER {$$ = $1;} + : IDENTIFIER {$$ = new Identifier($1);} | '(' declarator ')' | direct_declarator '[' constant_expression ']' | direct_declarator '[' ']' - | direct_declarator '(' parameter_type_list ')' + | direct_declarator '(' parameter_list ')' | direct_declarator '(' identifier_list ')' - | direct_declarator '(' ')' {$$ = $1;} + | direct_declarator '(' ')' {$$ = new DirectDeclarator($1);} ; pointer : '*' - | '*' type_qualifier_list | '*' pointer - | '*' type_qualifier_list pointer - ; - -type_qualifier_list - : type_qualifier - | type_qualifier_list type_qualifier - ; - - -parameter_type_list - : parameter_list - | parameter_list ',' ELLIPSIS ; parameter_list @@ -363,9 +352,9 @@ direct_abstract_declarator | direct_abstract_declarator '[' ']' | direct_abstract_declarator '[' constant_expression ']' | '(' ')' - | '(' parameter_type_list ')' + | '(' parameter_list ')' | direct_abstract_declarator '(' ')' - | direct_abstract_declarator '(' parameter_type_list ')' + | direct_abstract_declarator '(' parameter_list ')' ; initializer @@ -396,7 +385,7 @@ labeled_statement compound_statement : '{' '}' - | '{' statement_list '}' {$$ = $1;} + | '{' statement_list '}' {$$ = $2;} | '{' declaration_list '}' | '{' declaration_list statement_list '}' ; @@ -433,21 +422,24 @@ jump_statement : GOTO IDENTIFIER ';' | CONTINUE ';' | BREAK ';' - | RETURN ';' {$$ = $1;} + | RETURN ';' {$$ = new JumpStatement();} | RETURN expression ';' ; %% -#include -extern char yytext[]; -extern int column; +Node *g_root; -yyerror(s) -char *s; +Node *parseAST(std::string file_name) { - fflush(stdout); - printf("\n%*s\n%*s\n", column, "^", column, s); + yyin = fopen(file_name.c_str(), "r"); + if(yyin == NULL){ + std::cerr << "Couldn't open input file: " << file_name << std::endl; + exit(1); + } + g_root = NULL; + yyparse(); + return g_root; } From bfa2e488c6dc438fdf901e5ccb9ee71aa4296113 Mon Sep 17 00:00:00 2001 From: Fiwo735 Date: Sat, 27 Jan 2024 00:59:53 +0000 Subject: [PATCH 09/12] Described basic compiler --- README.md | 2 +- docs/basic_compiler.md | 18 +++++++++++++++++- docs/c_compiler.md | 25 +++++++++++-------------- 3 files changed, 29 insertions(+), 16 deletions(-) diff --git a/README.md b/README.md index d31db1b..b4119df 100644 --- a/README.md +++ b/README.md @@ -35,7 +35,7 @@ Changelog * Directly linked to ANSI C parser and lexer. * Added a "Getting started" guide and incorporated last year's feedback from Ed. * Changed the 10% of the grade (previously only for time management) to also account for code design to reward thoughtful planning. - * Improved the skeleton compiler to be more advanced by providing lexer and parser to hopefully jump-start progress and avoid unnecessary debugging. [WIP] + * Improved the skeleton compiler to be more advanced by integrating lexer and parser to hopefully jump-start progress and avoid unnecessary debugging. * Covered assembler directives in more details by showcasing the meaning behind an example assembly program, because that topic had always caused confusion in the past years. [WIP] diff --git a/docs/basic_compiler.md b/docs/basic_compiler.md index 4c62bac..a156cfc 100644 --- a/docs/basic_compiler.md +++ b/docs/basic_compiler.md @@ -1,6 +1,22 @@ Basic compiler ============== -TODO +For the first time ever, you are provided with a basic compiler that can lex, parse and generate (incorrect) code for the following program: +``` +int f() { + return; +} +``` + +The output assembly is hardcoded, so that the basic compiler passes one of the provided test cases. However, having a functioning compiler should allow you to hopefully jump-start the development of the actually interesting parts of this coursework while avoiding the common early pitfalls that students have faced in previous years. It should also allow you to better understand the underlying C90 grammar and have an easier time when adding new features. + +The provided basic compiler is able to traverse the following AST related to the above program. In order to expand its capabilities, you should develop the parser and the corresponding code generation at the same time - do not try to fully implement one before the other. ![int_main_return_tree](./int_main_return_tree.png) + + +The lexer and parser are loosely based on the "official" grammar covered [here](https://www.lysator.liu.se/c/ANSI-C-grammar-l.html) and [here](https://www.lysator.liu.se/c/ANSI-C-grammar-y.html) respectively. While they should suffice for a significant portions of features, you might need to improve them to implement the more advanced ones. If you find the grammar too complicated to understand, it is also perfectly fine to create your own simple grammar and build upon it as you add more features. + +You can follow the patterns introduced for the code generation part of the basic compiler, but you might find adjusting them to your needs be better in the long run. You are recommended to follow the coding style that best suits you while hopefully picking strong design skills throughout the development of your compiler. + + diff --git a/docs/c_compiler.md b/docs/c_compiler.md index ed7a8dc..5aa3b7c 100644 --- a/docs/c_compiler.md +++ b/docs/c_compiler.md @@ -1,7 +1,7 @@ Main coursework: A compiler for the C language ============================================== -Your program should read C source code from a file, and write RISC-V assembly to another file. +Your program should read C source code from a file, and write corresponding RISC-V assembly to another file. Environment ----------- @@ -10,26 +10,25 @@ Environment Developing your compiler ------------------------ -If you wish to use C++, then a basic framework for building your compiler has been provided. You are recommended to check out its structure [here](./basic_compiler.md). +If you wish to use C++, then a basic framework for building your compiler has been provided. You are strongly recommended to check out its structure [here](./basic_compiler.md). Source files can be found in the [./src](../src) folder and header files can be found in the [./include](../include) folder. -You can test your compiler against the provided test-suite by running `./test.sh` from the top of this repo; the output should look as follows: +You can test your compiler against the provided test-suite by running [`./test.sh`](../test.sh) from the top of this repo; the output should look as follows: ```console -root@host:/workspaces/langproc-env# ./test.sh - -g++ -std=c++20 -W -Wall -g -I include -o bin/c_compiler src/cli.cpp src/compiler.cpp - +> ./test.sh +> compiler_tests/_example/example.c > Pass compiler_tests/array/declare_global.c > Fail: simulation did not exit with exit-code 0 +... ``` -By default, the first `_example/example.c` test should be passing. +By default, the first [`_example/example.c`](../compiler_tests/_example/example.c) test should be passing. -This basic framework ignores the source input file and always produces the same assembly, which loads the value `5` into `a0`. +This basic framework is only able to compile a very simple program, as described [here](./basic_compiler.md). Program build and execution --------------------------- @@ -47,16 +46,14 @@ You can assume that the command-line arguments will always be in this order, and Input ----- -The input file will be pre-processed [ANSI C](https://en.wikipedia.org/wiki/ANSI_C), also called C90 or C89. It's what's generally thought of as "classic" or "normal" C, but not the _really_ old one without function prototypes (you may never have come across that). C90 is still often used in embedded systems, and pretty much the entire Linux kernel is in C90. +The input file will be pre-processed [ANSI C](https://en.wikipedia.org/wiki/ANSI_C), also called C90 or C89. It is what is generally thought of as "classic" or "normal" C, but not the _really_ old one without function prototypes (you may never have come across that). C90 is still often used in embedded systems, and pretty much the entire Linux kernel is in C90. -You've mainly been taught C++, but you're probably aware of C as a subset of C++ without classes, which is a good mental model. Your programs (lexer, parser and compiler) will never be given code that has different parsing or execution semantics under C and C++ (so, for example, I won't give you code that uses `class` as an identifier). +You have mainly been taught C++, but you are probably aware of C as a subset of C++ without classes, which is a good mental model. Your programs (lexer, parser and compiler) will never be given code that has different parsing or execution semantics under C and C++ (so, for example, I will not give you code that uses `class` as an identifier). -The source code will not contain any compiler-specific or platform-specific extensions. If you pre-process a typical program (see later), you'll see many things such as `__attribute__` or `__declspec` coming from the system headers. You will not need to deal with any of these. +The source code will not contain any compiler-specific or platform-specific extensions. If you pre-process a typical program (see later), you will see many things such as `__attribute__` or `__declspec` coming from the system headers. You will not need to deal with any of these. The test inputs will be a set of files of increasing complexity and variety. The test inputs will not have syntax errors or other programming errors, so your code does not need to handle these gracefully. -[This is the "official" C90 grammar](https://www.lysator.liu.se/c/ANSI-C-grammar-y.html), presented in the form of a Yacc parser file without any specific actions linked to each rule. There is also a [corresponding Lex lexer file](https://www.lysator.liu.se/c/ANSI-C-grammar-l.html) attached. You do not need to use everything that is in there, but it can help to give you an idea of the AST constructs that you need. If you find the grammar too complicated to understand, it is also perfectly fine to create your own simple grammar and build upon it as you add more features. - Features ------- From 5d60213f519a75c619b103a54592a031a4dfc675 Mon Sep 17 00:00:00 2001 From: Fiwo735 Date: Sat, 27 Jan 2024 05:13:36 +0000 Subject: [PATCH 10/12] Assembler directives explained with an example --- README.md | 1 - docs/assembler_directives.md | 11 +++++++++++ docs/assembler_directives.png | Bin 0 -> 241800 bytes docs/c_compiler.md | 5 ++++- 4 files changed, 15 insertions(+), 2 deletions(-) create mode 100644 docs/assembler_directives.md create mode 100644 docs/assembler_directives.png diff --git a/README.md b/README.md index b4119df..5b8e358 100644 --- a/README.md +++ b/README.md @@ -38,7 +38,6 @@ Changelog * Improved the skeleton compiler to be more advanced by integrating lexer and parser to hopefully jump-start progress and avoid unnecessary debugging. * Covered assembler directives in more details by showcasing the meaning behind an example assembly program, because that topic had always caused confusion in the past years. [WIP] - * New for 2022/2023: * Target architecture is now RISC-V rather than MIPS, in order to align with the modernised Instruction Architectures half of the module. diff --git a/docs/assembler_directives.md b/docs/assembler_directives.md new file mode 100644 index 0000000..31b392f --- /dev/null +++ b/docs/assembler_directives.md @@ -0,0 +1,11 @@ +Assembler directives +==================== +"The assembler implements a number of directives that control the assembly of instructions into an object file. These directives give the ability to include arbitrary data in the object file, control exporting of symbols, selection of sections, alignment of data, assembly options for compression, position dependent and position independent code" - quote from [RISC-V Assembler Reference](https://michaeljclark.github.io/asm.html). + +The linked guide explains in details all available directives, but fortunately you only need a very small subset to start with and even the more advanced features only require a few additional directives. While [Godbolt](https://godbolt.org/z/vMMnWbsff) emits some directives, to see all of them (more than you actually need) you are advised to run: + +```riscv64-unknown-elf-gcc -std=c90 -pedantic -ansi -O0 -march=rv32imfd -mabi=ilp32d -S [source-file.c] -o [dest-file.s]```. + +The below picture offers a quick walk-through of a very simple program with detailed annotations describing the meaning behind the included directives. Some of them a crucial (e.g. section specifiers, labels, data emitting) while others not so much (e.g. file attributes, compiler identifier, symbol types) - you will get a feel for them during the development of the compiler. Most importantly, you only need to set the correct section and provide function directives as long as you deal with local variables. **In other words, you can postpone studying this document in details until you decide to deal with global variables.** + +![Assembler directives](./assembler_directives.png) diff --git a/docs/assembler_directives.png b/docs/assembler_directives.png new file mode 100644 index 0000000000000000000000000000000000000000..aadf5e1d707a5d18c754144a2a84c4785969085d GIT binary patch literal 241800 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 z

495iN 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 literal 0 HcmV?d00001 diff --git a/docs/c_compiler.md b/docs/c_compiler.md index 5aa3b7c..ec75eb9 100644 --- a/docs/c_compiler.md +++ b/docs/c_compiler.md @@ -159,10 +159,13 @@ I then use spike to simulate the executable on RISC-V, like so: This command should produce the exit code `0`. +Assembler directives +--------------- +[You will need to consider assembler directives in your output](./assembler_directives.md) Useful links ------------ -* [Godbolt](https://godbolt.org/z/vMMnWbsff) - Great tool for viewing what a real (`gcc` in this case) RISC-V compiler would produce for a given snippet of C code. This link is pre-configured for the correct architecture (`RV32IMFD`) and ABI (`ILP32D`) that the coursework targets. Code optimisation is also disabled to best mimic what you might want your compiler to output. You can replicate Godbolt locally by running `riscv64-unknown-elf-gcc -std=c90 -pedantic -ansi -O0 -march=rv32imfd -mabi=ilp32d -S [source-file.c] -o [dest-file.s]`, which might make debugging easier for some. +* [Godbolt](https://godbolt.org/z/vMMnWbsff) - Great tool for viewing what a real (`gcc` in this case) RISC-V compiler would produce for a given snippet of C code. This link is pre-configured for the correct architecture (`RV32IMFD`) and ABI (`ILP32D`) that the coursework targets. Code optimisation is also disabled to best mimic what you might want your compiler to output. You can replicate Godbolt locally by running `riscv64-unknown-elf-gcc -std=c90 -pedantic -ansi -O0 -march=rv32imfd -mabi=ilp32d -S [source-file.c] -o [dest-file.s]`, which might make debugging and directives analysis easier for some. * [Interactive RISC-V simulator](https://creatorsim.github.io/creator) - Might be helpful when trying to work out the behaviour of certain instructions that Godbolt emits. From 4a9d542947f03163d3e3c6e8ba3f62dd47e621f2 Mon Sep 17 00:00:00 2001 From: Filip Wojcicki <50636446+Fiwo735@users.noreply.github.com> Date: Mon, 29 Jan 2024 06:08:32 +0100 Subject: [PATCH 11/12] Makefile improvements Co-authored-by: Jpnock --- Makefile | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/Makefile b/Makefile index bf8b0f6..0cae049 100644 --- a/Makefile +++ b/Makefile @@ -1,23 +1,25 @@ CPPFLAGS += -std=c++20 -W -Wall -g -Wno-unused-parameter -Wno-unused-variable -Wno-unused-function -I include -HPPFILES := $(shell find include/ -type f -name "*.hpp") -CPPFILES := $(shell find src/ -type f -name "*.cpp") +CPPFILES := $(wildcard src/*.cpp) +DEPENDENCIES := $(patsubst %.cpp,%.d,$(CPPFILES)) +-include $(DEPENDENCIES) OBJFILES := $(patsubst %.cpp,%.o,$(CPPFILES)) +OBJFILES += src/lexer.yy.o src/parser.tab.o .PHONY: default clean with_coverage coverage default: bin/c_compiler -bin/c_compiler : src/lexer.yy.o src/parser.tab.o $(OBJFILES) +bin/c_compiler : $(OBJFILES) @mkdir -p bin g++ $(CPPFLAGS) -o $@ $^ -src/%.o: src/%.cpp $(HPPFILES) - g++ $(CPPFLAGS) -c -o $@ $< +%.o: %.cpp Makefile + g++ $(CPPFLAGS) -MMD -MP -c $< -o $@ src/parser.tab.cpp src/parser.tab.hpp: src/parser.y - yacc -v -d src/parser.y -o src/parser.tab.cpp + bison -v -d src/parser.y -o src/parser.tab.cpp src/lexer.yy.cpp : src/lexer.flex src/parser.tab.hpp flex -o src/lexer.yy.cpp src/lexer.flex From 060d5db0d0fd3a47fac6cf97399b5d87fcea7871 Mon Sep 17 00:00:00 2001 From: Filip Wojcicki <50636446+Fiwo735@users.noreply.github.com> Date: Mon, 29 Jan 2024 06:12:42 +0100 Subject: [PATCH 12/12] Pass context by reference Co-authored-by: Jpnock --- include/ast_direct_declarator.hpp | 2 +- include/ast_function_definition.hpp | 2 +- include/ast_identifier.hpp | 2 +- include/ast_jump_statement.hpp | 2 +- include/ast_node.hpp | 2 +- include/ast_type_specifier.hpp | 2 +- src/ast_direct_declarator.cpp | 2 +- src/ast_function_definition.cpp | 2 +- src/ast_identifier.cpp | 2 +- src/ast_jump_statement.cpp | 2 +- 10 files changed, 10 insertions(+), 10 deletions(-) diff --git a/include/ast_direct_declarator.hpp b/include/ast_direct_declarator.hpp index ca040b1..7a5f298 100644 --- a/include/ast_direct_declarator.hpp +++ b/include/ast_direct_declarator.hpp @@ -7,7 +7,7 @@ class DirectDeclarator : public Node { public: DirectDeclarator(Node* identifier); ~DirectDeclarator() {}; - void emitRISC(std::ostream &stream, Context context) const; + void emitRISC(std::ostream &stream, Context &context) const; }; #endif diff --git a/include/ast_function_definition.hpp b/include/ast_function_definition.hpp index df05262..3b26724 100644 --- a/include/ast_function_definition.hpp +++ b/include/ast_function_definition.hpp @@ -7,7 +7,7 @@ class FunctionDefinition : public Node { public: FunctionDefinition(Node* declaration_specifiers, Node* declarator, Node* compound_statement); ~FunctionDefinition() {}; - void emitRISC(std::ostream &stream, Context context) const; + void emitRISC(std::ostream &stream, Context &context) const; }; #endif diff --git a/include/ast_identifier.hpp b/include/ast_identifier.hpp index c5ffea6..65e70a1 100644 --- a/include/ast_identifier.hpp +++ b/include/ast_identifier.hpp @@ -9,7 +9,7 @@ class Identifier : public Node { public: Identifier(std::string* _identifier) : identifier(_identifier) {}; ~Identifier() {delete identifier;}; - void emitRISC(std::ostream &stream, Context context) const; + void emitRISC(std::ostream &stream, Context &context) const; }; #endif diff --git a/include/ast_jump_statement.hpp b/include/ast_jump_statement.hpp index 47c791a..1f25076 100644 --- a/include/ast_jump_statement.hpp +++ b/include/ast_jump_statement.hpp @@ -7,7 +7,7 @@ class JumpStatement : public Node { public: JumpStatement() {}; ~JumpStatement() {}; - void emitRISC(std::ostream &stream, Context context) const; + void emitRISC(std::ostream &stream, Context &context) const; }; #endif diff --git a/include/ast_node.hpp b/include/ast_node.hpp index 961b617..08bd764 100644 --- a/include/ast_node.hpp +++ b/include/ast_node.hpp @@ -13,7 +13,7 @@ class Node { public: Node() {}; virtual ~Node(); - virtual void emitRISC(std::ostream &stream, Context context) const = 0; + virtual void emitRISC(std::ostream &stream, Context &context) const = 0; }; #endif diff --git a/include/ast_type_specifier.hpp b/include/ast_type_specifier.hpp index d727645..238eeae 100644 --- a/include/ast_type_specifier.hpp +++ b/include/ast_type_specifier.hpp @@ -9,7 +9,7 @@ class TypeSpecifier : public Node { public: TypeSpecifier(std::string _type) : type(_type) {}; ~TypeSpecifier() {}; - void emitRISC(std::ostream &stream, Context context) const {}; + void emitRISC(std::ostream &stream, Context &context) const {}; }; #endif diff --git a/src/ast_direct_declarator.cpp b/src/ast_direct_declarator.cpp index 186a9e6..f07ec30 100644 --- a/src/ast_direct_declarator.cpp +++ b/src/ast_direct_declarator.cpp @@ -4,7 +4,7 @@ DirectDeclarator::DirectDeclarator(Node* identifier) { branches.insert(branches.end(), {identifier}); } -void DirectDeclarator::emitRISC(std::ostream &stream, Context context) const { +void DirectDeclarator::emitRISC(std::ostream &stream, Context &context) const { // Emit identifier branches[0]->emitRISC(stream, context); stream << ":" << std::endl; diff --git a/src/ast_function_definition.cpp b/src/ast_function_definition.cpp index 827c362..117cf66 100644 --- a/src/ast_function_definition.cpp +++ b/src/ast_function_definition.cpp @@ -4,7 +4,7 @@ FunctionDefinition::FunctionDefinition(Node* declaration_specifiers, Node* decla branches.insert(branches.end(), {declaration_specifiers, declarator, compound_statement}); } -void FunctionDefinition::emitRISC(std::ostream &stream, Context context) const { +void FunctionDefinition::emitRISC(std::ostream &stream, Context &context) const { // Emit declarator branches[1]->emitRISC(stream, context); diff --git a/src/ast_identifier.cpp b/src/ast_identifier.cpp index f103ea7..4ef98e7 100644 --- a/src/ast_identifier.cpp +++ b/src/ast_identifier.cpp @@ -1,5 +1,5 @@ #include "ast_identifier.hpp" -void Identifier::emitRISC(std::ostream &stream, Context context) const { +void Identifier::emitRISC(std::ostream &stream, Context &context) const { stream << *identifier; } diff --git a/src/ast_jump_statement.cpp b/src/ast_jump_statement.cpp index 2fd425a..55dcea7 100644 --- a/src/ast_jump_statement.cpp +++ b/src/ast_jump_statement.cpp @@ -1,6 +1,6 @@ #include "ast_jump_statement.hpp" -void JumpStatement::emitRISC(std::ostream &stream, Context context) const { +void JumpStatement::emitRISC(std::ostream &stream, Context &context) const { // TODO these lines are hardcoded for the example test to pass, you have to correct them stream << "addi t0, zero, 0" << std::endl; stream << "addi t0, t0, 5" << std::endl;