From 6db1a2cdd3b96731f2e092d55d8c2136eabc52d0 Mon Sep 17 00:00:00 2001 From: Julian T Date: Tue, 11 Feb 2020 12:24:56 +0100 Subject: Rename and cleanup --- sem1/osc/mm9/opgaver.md | 129 ------------------------------------------------ 1 file changed, 129 deletions(-) delete mode 100644 sem1/osc/mm9/opgaver.md (limited to 'sem1/osc/mm9') diff --git a/sem1/osc/mm9/opgaver.md b/sem1/osc/mm9/opgaver.md deleted file mode 100644 index fe2ec99..0000000 --- a/sem1/osc/mm9/opgaver.md +++ /dev/null @@ -1,129 +0,0 @@ -# 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 - - - - -- cgit v1.2.3