Tre-adressformat är en typ av mellanliggande kodrepresentation som används i kompilatorer. Det kallas "tre-adress" eftersom varje instruktion vanligtvis involverar högst tre operander (variabler eller konstanter). Den allmänna formen av en tre-adressinstruktion är:
`x =y op z`
Där:
* `x`,` y` och `z` är operander (variabler eller konstanter).
* `Op` är en binär operatör (t.ex. +, -, *, /, =).
Nyckelegenskaper:
* Explicit Operands: Operander namnges uttryckligen; Det finns ingen implicit användning av register eller stackplatser som du kan hitta på monteringsspråk. Detta gör det enklare för kompilatoroptimeringspass för att analysera och manipulera koden.
* en operatör per instruktion: Varje instruktion utför endast en operation. Detta står i kontrast till monteringsspråk där en enda instruktion kan utföra flera operationer.
* Tillfälliga variabler: Ofta används tillfälliga variabler för att hålla mellanresultat. Detta hjälper till att göra koden tydligare och lättare att optimera.
* enkel struktur: Den enkla, regelbundna strukturen förenklar kompilatordesign och optimering.
Exempel:
Låt oss överväga det aritmetiska uttrycket:`A =B + C * D`.
I en tre-adresskodrepresentation kan den översättas till följande sekvens av instruktioner:
1. `T1 =C * D` (Multiplicera C och D, lagra resultatet i tillfällig variabel T1)
2. `T2 =B + T1` (Lägg till B och T1, lagra resultatet i tillfällig variabel T2)
3. `A =T2` (Tilldela värdet i T2 till A)
Fördelar:
* optimering: Den uttryckliga representationen av operander och en-oparation-per-instruktionsdesign gör det enkelt för kompilatorn att utföra olika optimeringar, såsom vanlig eliminering av underuttryck, konstant vikning och kodrörelse.
* läsbarhet och felsökning: Den tydliga strukturen gör mellankoden mer läsbar och lättare att felsöka jämfört med mer kompakta, mindre strukturerade representationer.
Nackdelar:
* längre kod: Jämfört med andra mellanliggande representationer kan tre-adresskod resultera i längre kodsekvenser på grund av användningen av tillfälliga variabler. Men denna längd kompenseras ofta av de ökade möjligheterna till optimering.
Sammanfattningsvis ger tre-adresskoden en kraftfull och flexibel mellanliggande representation som underlättar effektiv kompilatoroptimering och kodgenerering. Det är en avgörande del av sammanställningsprocessen för många programmeringsspråk.