Skip to content

Latest commit

 

History

History
170 lines (121 loc) · 5.66 KB

Notes.org

File metadata and controls

170 lines (121 loc) · 5.66 KB

Notes

Lexer

Lab (calculate statistics over text)

Task

We had to calculate statistics over text. This was to learn about flex and how to use it.

Coursework (c lexer)

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

Lab (parse maths)

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.

Coursework (c parser)

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

Lab (codegen)

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.

Coursework (c compiler)

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

VariableStackBindings class

The class will contain map of strings containing the variable name as the key and the stack position as the stack position and type as the attributes, which will be combined using a struct.

Work on statements and declaration

Implement the adding to the bindings part that has to be added in the statements and declarations.

Store expression results on the stack

To do this I created a function in my VariableStackBindings that will store the position of the stack that will be used for the next expression.

Reformat code

Work on expression

Add more expression.

Make functions work

Make function calls work from expressions
Make functions receive arguments
  • Work on bison file to get the parameters correctly
  • Work on storing them correctly in the binding

Comment code

comment code to know where I am at and what I still have to do.

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 and adding that to the bindings.

Add more expressions

Expressions like > or < or == etc..

Add more statements

If statement
For statement
While statement
Do While statement

Fixing Seg fault 1

Have to fix type assigment for declaration lists, need to make new pointers of the right type.

Load more that 4 bytes into a variable.

Fix expressions and temporary variables

I have to store the temporary expression in normal registers.

Convert cout to printf

convert all cout to printf

Add global variables

Change code so that it also prints global variables. This should be done with the globalAsm function.

I might have to change the print Asm and the global Asm function in the declarations.

Add post and pre increment

For post increment I will have a special class that handles that, for pre increment I will rewrite in terms of addition, which should be possible.

Arrays

Finished arrays

Pointers

Finished pointers

Add initializer list count of expression depth