#+TITLE: Notes #+DATE: <2017-02-20 Mon> #+AUTHOR: Yann Herklotz #+EMAIL: ymherklotz@gmail.com #+DESCRIPTION: These are notes about the Compiler project. #+DATE: <2017-03-09 Thu> * Lexer ** DONE Lab (calculate statistics over text) DEADLINE: <2017-01-31 Tue> *** Task We had to calculate statistics over text. This was to learn about flex and how to use it. ** DONE Coursework (c lexer) DEADLINE: <2017-02-07 Tue> *** Task Design a C lexer that could lex C and output the important information about the C code. This made us read the C spec for the first time. * Parser ** DONE Lab (parse maths) DEADLINE: <2017-02-14 Tue> *** Task We had to design a maths parser and then analyse the tree that was created by parsing it. The additional parts where to differentiate equations using the different rules for differentiating. We also had to evaluate the expressions and do other operations on the tree. This taught us how to use bison. ** TODO Coursework (c parser) DEADLINE: <2017-03-07 Tue> *** Task *** AST (Abstract Syntax Tree) Finsihed the AST for now, using polymorphism to achieve this. Right now i t achieves the goal of this coursework as it does print out the AST in xml format and supports all the features that the parser should support. The expressions branch of the AST is completely bare because they are not needed for this parser. I will continue working on this AST in the compiler section so that it supports all the other constructs that I need for the compiler. *** Grammar The grammar is not completely done yet as I dont support all of the declartions that are possible, and as I add more constructs in the AST I will also have to add declarations in the bison file. This I will only continue in the Compiler section. * Compiler ** DONE Lab (codegen) DEADLINE: <2017-02-28 Tue> *** Task In this lab we used the setup provided to us to make a compiler for the language specified in the lab. The AST was already built for us and the language was already parsed using C++ instead of bison. ** TODO Coursework (c compiler) DEADLINE: <2017-03-28 Tue> *** Task *** Mips Assembly - %hi(id) :: loads the upper address of the global variable id - %lo(id) :: loads the lower address of the global variable id - addiu :: Add Immediate Unsigned - jr :: Jump Register - li :: Pseudo instruction interpreted as ( lui $rd, LabelAddr[31:16] ori $rd,$rd, LabelAddr[15:0] ) - lui :: loads uppper immediate. - lw :: Load Word - move :: Pseudo instruction interpreted as (add $rt, $rs, $zero) - nop :: No Operation - sw :: Store Word *** TODOs **** Expression ***** void evaluate(VariableStackBindings binding) Statements evaluate the expression by writing it out and printing the resulting asm onto the command line. I will also have to pass the bindings to the evaluate function examples: z = a + b + c, will be calculated as $2 = b + c, and then $2 = a + $2 This should happen automatically because of recursion. Have to be careful because of the way the expressions are parsed. Constant expressions will just output li $2, 6 for example **** Function class **** Statement class - Need function that prints declaration bits and expression bits, as well as connected statements **** Definition class - need function that will print the code for declaration. Basic code should be: li $2, 6 sw $2, 4($fp) - Before that is executed it should evaluate the expression. - The expression should be the thing doing: li $2, 6 That is if we want a 6 stored in the variable. - The declaration class should only be in charge of storing it in the right location in the stack.