Tenta januari 2025 Flashcards

1
Q

Vad ingår i symboltabellen?

A
  • The lexemeitself
  • Corresponding token
    *Its semantic component(e.g.,variable,operator, constant, functions, procedure, etc.)
  • Datatype
  • Pointers to oth erentries(when necessary)

Namn: Identifierare
Datatyp: Exempelvis int, float, string, etc.
Scope: Omfattning, t.ex. global, lokal eller block.
Minnesadress: Var identifieraren lagras.
Attribut: Extra information, som storlek, parametrar, och modifierare (t.ex. const, static).
Referenser: Var identifieraren används i koden.
Synlighet: Åtkomstspecifikationer

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
2
Q

The interaction between the Symbol Table and the phases of a compiler

A

Virtually every phase of the compiler will use the symbol table.

Lexikal analys använder symboltabellen för att lägga till identifierare när de upptäcks.
Syntaxanalys använder symboltabellen för att verifiera att identifierare används korrekt enligt språkets syntax.
Semantisk analys använder symboltabellen för att kontrollera typer, scope och deklarationer av identifierare.
Generering av mellanliggande kod använder symboltabellen för att hämta information om identifierares typer och adresser.
Optimering använder symboltabellen för att analysera och eliminera överflödig kod eller redundant användning av identifierare.
Kodgenerering använder symboltabellen för att tilldela minnesadresser eller register till identifierare.

  • The initialization phase will place keywords, operators, and standard identifiers in it.
  • The scanner will place user-defined identifiers and literals in it and will return the corresponding token.
  • The parser uses these token to create the parse tree, the product of the syntactic analysis of the program.
  • The semantic action routines place data type in its entries and uses this information in performing basic type- checking.
  • Theintermediatecodegenerationphaseuse pointers to entries in the symbol table in creating the intermediate representation of the program
  • Theobjectcodegenerationphaseusespointersto entries in the symbol table in allocating storage for its variables and constants, as well as to store the addresses of its procedures and functions.
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
3
Q

Vilka är alla kompilatorns faser i ordning

A

Lexical analyzer(Scanner), Parser, Semantic analyzer, Intermediate code generation, Machine independent code optimizer, Code generator, Machine dependent code
optimizer

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
4
Q

Ge skillnad på en machine independent optimiering och en machine dependant optimering:

A

Machine Independent Optimization
Fokus ligger på att förbättra koden utan att ta hänsyn till den specifika maskinarkitekturen.
Exempel: Eliminering av död kod, loopunrolling, och gemensam subuttryckseliminering.

Machine Dependent Optimization
Fokus ligger på att anpassa koden för att utnyttja den specifika maskinens arkitektur och egenskaper.
Exempel: Tilldelning av register, utnyttjande av specifika CPU-instruktioner och pipelineoptimering.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
5
Q

Input Output Faserna

A

L: Source code as a sequence of characters -> tokens (keys, id, symbols)
P: Tokens -> Parse tree (abstract syntax tree)
S: Parse Tree -> Annoted Syntax Tree (type checks, scope info)
I: Annoted syntax tree -> Intermediate Code Representation (simple machine independent)
IO:Optimized intermediate representation
CG: Target Code in assembly(machine code)
DO: Optimized assembly (machine)

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
6
Q

Kodens utveckling från start till slut i kompilator

A

Source code as sequence of characters
Tokens
Parse Tree (Abstract syntax tree)
Annoted Syntax Tree
Intermediate Code Representation
Optimized IR
Target code
Optimized Target Code

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
7
Q

Copy propagation

A

Copy propagation är en optimeringsteknik där onödiga kopior av variabler tas bort. Om en variabel bara används som en kopia av en annan, ersätts den med originalvariabeln

t1 = a
t2 = t1
c = t2 + b

->

c = a + b

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
8
Q

Syntax-directed translation table

A

Produktionerna och dess regler

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
9
Q

Skillnad på proceduranrop proceduraktivering

A

Proceduranrop är när ett program anropar en funktion eller procedur för att exekvera den, medan proceduraktivering är den faktiska processen när kontrollen övergår till den anropade proceduren och dess exekvering börjar.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
10
Q

Skillnad på kontrolllänk och processlänk

A

En kontrolllänk är en länk som används för att hålla reda på var exekveringen ska fortsätta efter att en procedur har avslutats.
En accesslänk är en länk som kopplar till de lokala variablerna i en procedur eller funktion för att ge åtkomst till dem under exekveringen.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
11
Q

Statisk och dynamisk namnuppslagning

A

Statisk namnuppslagning sker vid kompileringstid, där variabelnamn och deras adresser bestäms innan programmet körs.
Dynamisk namnuppslagning sker vid körningstid, där variabelnamn och deras adresser bestäms under programmets exekvering beroende på programmets tillstånd.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
12
Q

Call by Value:

A

Skickar en kopia av argumentet till funktionen.

Call by Need: Liknar call by name, men utvärderar uttrycket bara när det behövs.
Macro Expansion: Ersätter ett makro med dess definition vid preprocessor-steget.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
13
Q

Call by Reference:

A

Skickar en referens till argumentet, vilket gör att funktionen kan ändra det.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
14
Q

Call by Name:

A

Skickar uttrycket till funktionen för att utvärdera det varje gång det används.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
15
Q

Call by Need:

A

Liknar call by name, men utvärderar uttrycket bara när det behövs.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
16
Q

Macro Expansion:

A

Ersätter ett makro med dess definition vid preprocessor-steget.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
17
Q

Skärpsamling

A

Skräpsamling (garbage collection) är en automatisk process som frigör minne genom att identifiera och ta bort objekt eller resurser som inte längre används eller är åtkomliga i ett program. Detta förhindrar minnesläckor genom att säkerställa att oanvänd minnesresurs återanvänds.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
18
Q

Skärp

A

Ej nåbar. data

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
19
Q

Mark and sweep

A

Mark and Sweep är en skräpsamlingsalgoritm som består av två faser. I markeringfasen markeras alla objekt som kan nås från aktiva referenser som “levande”. Under sopningsfasen tas alla objekt som inte är markerade bort och deras minne frigörs. Processen är en stop-the-world-operation, vilket innebär att programmet stannar för att säkerställa att inga referenser ändras under markeringen och sopningen. Algoritmen kan vara ineffektiv eftersom den måste genomgå hela minnet varje gång och stoppa exekveringen, vilket kan orsaka fördröjning.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
20
Q

Varianter av mark and sweep

A

generationer, inkementell, trådad

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
21
Q

Förklara vad och en av varianterna av mark and sweep

A

Generationer: äldre körs enbart var 100e gång, med 2 generationer så kan de råka hamna i äldre fast de bara hade kort livslängd, därför kör man ofta 3
Inkrementell: reda på hur långt vi kommit, kan stoppa mitt i och fortsätta med programmet, hålla koll noga vart man är
Trådad: trådad stör inte huvudtråden men använder cachen, sämgre cache på huvudtråd

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
22
Q

Annan metod ön mark and sweep

A

Referensräkning: rotmängd, håller reda på hur många pekare till varje objekt, cirkulära datastrukturer ligger kvar för alltid, sätt ihop med mark and sweep, sämre prestanda behöver gå huller om buller i minnet.
Konservativ skärpsamling: Följa adresser i rotmängden i adress rymden, BOHM

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
23
Q

Skillnad på statiska och dynamiska kontroller

A

Statiska kontroller: vid kompileringstillfälle genom att kolla på koden, statiska fel syns exempel int i, *i=2, i är ingen pekare, vill gärna ha statisk kontroll pga upptäcka fel så tidigt som möjligt.
Dynamiska kontroller: när programmet körs, vissa fel upptäcks inte förrens det körs, exempel objektorienterad programmering och en funktion inte finns i grunden och man castar så djuret verkligen är en hund, så kommer kompilatorn lägga en kontroll och kolla så det verkligen är en hund, kan bara kollas vid körningstillfälle

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
24
Q

Skillnad på stark och svag typning

A

Svag typning: går runt typkontroll
Stark typning: Mer strikt; kräver explicit typkonvertering. Säker men mindre flexibel.
Svag typning: Mer flexibel; kan automatiskt konvertera typer. Mindre säker men snabbare att skriva.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
25
Reguljära uttryck
Sätt att specifiera mönster, b*: noll eller flera b a|b: a eller b b*|a abc a|b* (a|b)*: a,b,abaab (a*|b*): a,b, aaa, bbb
26
Tillståndsmaskiner (skillnad deterministic)
DFA (Deterministic Finite Automation): Icke deterministic maskin: behöver chansa och backa, kan även göra om till deterministic
27
Is it a good idea to have a grammar that allows for type errors, and leave type checking to the next phase after parsing, the semantic analyzer?
YES
28
Is it a good idea to have an ambiguous grammar, which is made un-ambiguous when removing all parse trees that result in a type error?
NO
29
Basic blocks
Rader som garanterat körs efter varandra
30
Gemensamma deluttryck
Gemensamma deluttryck: inga hopp mitt i, med hjälp av basblock
31
Looptrullning
ar man otur, rullar ut loopen så den inte får plats i instruktions cachen om den ligger inuti en annan loop, kompilatorn får hålla koll på vilka loopar de rullat ut (1 miljon iterationer) Man vill inte hoppa runt i en array: rullar ut loop istället
31
Svansrekursion
Använder samma aktiveringspost, samma stack frame, med hopp Svansrekursion är en typ av rekursion där det sista steget i en funktion är ett rekursivt anrop. Eftersom det inte finns några ytterligare beräkningar efter det rekursiva anropet kan den aktuella aktiveringsposten återanvändas, och ingen ny stack frame behövs. Istället hoppar programmet direkt tillbaka till början av funktionen för nästa anrop, vilket gör att det är minnesmässigt effektivare än vanlig rekursion. Detta gör att svansrekursion ofta kan optimeras av kompilatorn eller tolken genom en teknik som kallas tail call optimization.
32
I VILKEN FAS BLIR FELET: printf("En övning i addition!\n) warning: missing terminating " character
Scanner
33
I VILKEN FAS BLIR FELET: printf("En övning i addition!\n) printf("Ange två tal och deras summa: "); error: expected ';' before 'printf'
Parsing
34
I VILKEN FAS BLIR FELET: Segmentation fault (core dumped)
Program execution
35
I VILKEN FAS BLIR FELET: error: 'gissning' undeclared
Semantic
36
I VILKEN FAS BLIR FELET: warning: 'summan' is used uninitialized
Semantic
37
I VILKEN FAS BLIR FELET: undefined reference to 'print'
Linker
38
I VILKEN FAS BLIR FELET: warning: returning 'char *' from a function with return type 'int'
Semantic
39
I VILKEN FAS BLIR FELET: (1) error: invalid suffix "a" on integer constant (2) warning: implicit declaration of function 'printg' (3) error: undefined reference to `printg'
(1)Scanner (2)Semantic (3)Linking
40
I VILKEN FAS BLIR FELET: (1) missing terminating " character (2) error: incompatible types in assignment (3) warning: double format, different type arg (arg 2) (4) error: syntax error before "s" (5) warning: `return' with no value, in function returning non-void
(1)Scanner (2)Semantic (3)Semantic (4)Parsing (5)Semantic
41
I VILKEN FAS BLIR FELET: error: invalid preprocessing directive #inglude
Preprocessor
42
I VILKEN FAS BLIR FELET: (2) warning: missing terminating " character (3) error: expected ';' before '}' token (4) Segmentation fault (core dumped) (5) warning: variable 't' set but not used (6) error: 'u' undeclared (7) warning: 'z' is used uninitialized (8) warning: implicit declaration of function 'f' (9) undefined reference to 'f'
(2)Scanner (3)Parser (4)Program executed (5) Optimizer or semantic (6)Semantic (7) Optimizer or semantic (8)Semantic (9)Linking
43
Recursive- descent parser
En rekursiv nedstigningsparser är en parser som börjar från startsymbolen och använder en funktion för varje icke-terminal i grammatiken. Den anropar dessa funktioner rekursivt baserat på grammatikkens regler. Till exempel, för att analysera ett uttryck som 2+3, skulle den kalla funktioner för Expr, Term och hantera +-symbolen steg för steg. Den är enkel att implementera men fungerar bäst med grammatik som inte är vänster-rekursiv.
44
What do we mean by a predictive parser?
A predictive parser decides which grammar rule to apply by looking at the next token. It uses this information to parse the input efficiently without guessing or backtracking.
45
VILKEN FAS UPPSTÅR FELET: (1) Segmentation fault (core dumped) (2) control reaches end of non-void function (3) expected ")" before ";" token (4) too few arguments to function "f" (5) undefined reference to "h"
(1) Vid programkörningen ("exekvering", "run-time") (2) Semantisk analys (3) Syntaktisk analys ("parser") (4) Semantisk analys (5) Länkning
46
eliminering av svansrekursion
47
eliminering av svansrekursion
48
lexem
49
operatorassociativitet
50
reduce-reduce-konflikt
51
registerallokering
52
startsymbol
53
Yacc
54
Att tänka på syntax träd:
Semikolon!!!!!! Börja med semikolon Om if else, if har 3 streck ifrån sig While har två If har två i vanliga fall
55
Att tänka på postfix för stackmaskin:
label behövs bara om man ska återvända dit!! gå dit igen JUMP while-start Gofalse after-while gofalse after if goals else start
56
Att tänka på treadresskod:
label while blir if() goto afterwhile dela upp i basic block försvinner labels men goto är kvar
57
När man ska rita minne vad tänka på
Heap högst och växer ner, stack under och växer uppåt
58
Vad gör alla faser i kompilatorn?
1. Lexer (lexikalisk analysator): Läser in källkoden som en ström av tecken och delar upp den i mindre enheter som kallas tokens (t.ex. nyckelord, identifierare, operatorer). Lexer ansvarar också för att ignorera kommentarer och mellanslag. 2. Parser (syntaktisk analysator): Tar tokens från lexern och bygger en syntaxträd (eller parse tree) som representerar programmets grammatiska struktur enligt språkspecifikationen. Parsern kontrollerar att koden följer språksyntaxen. 3. Semantic Analyzer (semantisk analysator): Kontrollerar den semantiska korrektheten i koden, t.ex. att variabler är deklarerade innan användning, att typer matchar i operationer och att funktioner anropas med rätt antal och typ av argument. 4. Intermediate Code Generator: Översätter syntaxträdet till en intermediär representation (IR), som är ett enklare och språkoberoende format, ofta tredelade adresser eller en form av pseudokod. 5. Optimizer: Förbättrar den intermediära koden för att göra den mer effektiv, t.ex. genom att eliminera död kod, minska antalet instruktioner eller optimera loopar och uttryck. 6. Code Generator: Översätter den optimerade intermediära representationen till maskinkod eller assemblerkod för målplattformen. Den ser också till att resurser som register används effektivt.
59