diff options
Diffstat (limited to 'sem3/osc/mm9/opgaver.md')
-rw-r--r-- | sem3/osc/mm9/opgaver.md | 129 |
1 files changed, 129 insertions, 0 deletions
diff --git a/sem3/osc/mm9/opgaver.md b/sem3/osc/mm9/opgaver.md new file mode 100644 index 0000000..fe2ec99 --- /dev/null +++ b/sem3/osc/mm9/opgaver.md @@ -0,0 +1,129 @@ +# Opgave A + +Hmm ved ikke lige med projekt men har en fed ide. + +Openscad men til 2d graffik som **kompilere** til svg. + +Tænker at man vil lave det i et sprog som c, go eller rust. +Rust ville være optimalt men det er også lidt svært. + +Det skulle være et emperisk sprog med variabler og functioner. +Funktioner returnere ikke noget, men mere en bestemt figur. + +Variables can be strings, floating point numbers. + +Lists are defined as list. + +Strings begin with big letters. + +Bools are defined as numbers 0 and 1. + +Lists are defined as [] and contain all numbers or all strings. + +C style comments. + +``` +var Black = "#FFFFFF"; +var White = "#000000"; +list Names = [ "nice", "nice2" ]; + +var radius = 10.2; + +func coolCircle(r, Name) { + // Defined as circle(radius, fgCol, bgCol) + circle(r, Black, White); + + // Defined as insertText(Text, allign, fgCol) + insertText(Name, ALIGN_CENTER, Black); +} + +translate(1, 2) { + coolCircle(radius / 2, Names[0]); +} + +coolCircle(radius, Names[1]); +``` + +The code will generate two circles, one in the center and one on the coordinates 1, 2. + +# Opgave B + +Der er defineret to globale variabler, men de er ikke på stacken. + +Inde i main laver man en pointer til a og sender ind i funktionen. +Dette betyder at denne pointer enten ligger på stacken eller i et register når funktionen ainc kører. + +Men der kan siges sikkert at stacken indeholder en return pointer til main og en reference til den tidelige stack(tror jeg). + + +## Kode i assembly + +Jeg har ikke taget højde for integer operationer. + +``` +JMP main +var_a: DB 4 + +ainc: + MOV B, [A] + ADD B, 1 + MOV [A], B + RET + +main: + MOV A, var_a + CALL ainc + + HLT +``` + +## Forskellige compile trin + +Proprocessor har ikke noget at lave. + +Start med at compile til assembly: + +Læg a og b i starten af programmet. + +Compiler funktionen ainc og adec og sæt en label ved dem. +Dette gøres ved først at lave koden der henter argument ud og gemmer tidligere stack pointer. +Derefter compiles indholdet i funktionen. +Slut af med at returner til caller. + +Derefter bliver assembly'en assemblet: + +De forskellige mnenorics(eller hvad det nu hed) bliver lavet om til opcodes og lags sammen med deres argumenter. +Dette gøres for alle funktionerne. + +a og b bliver placeret i filen. + +Derefter placeres main ved entrypoint og de to funktioner bliver lagt ved siden af. +De forskellige referencer til funktioner og globale variabler bliver byttet ud med deres virkelige værdier i binary. + +# Opgave C + +Grammastart -> *Viggo* stmList *End* +stmList -> stm stmList | e +stm -> ident *=* exp *;* +ident -> letter symList +letter -> *a* | ... | *å* | *A* | ... | *Å* +digit -> *0* | ... | *9* +symbol -> letter | digit +symList -> symbol symList | e +exp -> term expB +expB -> termopr term expB | e +termOpr -> *+* | *-* +term -> factor termB +termB -> factorOpr factor termB | e +factorOpr -> _*_ | _/_ +factor -> *(* exp *)* | ident + +## C.2 + +See tree.png + +## C.3 + + + + |