Megosztás a következőn keresztül:


Szemantikával végzett munka

A szintaxisfák a forráskód lexikális és szintaktikai szerkezetét jelölik. Bár ez az információ önmagában elegendő a forrás összes deklarációjának és logikájának leírásához, nem elegendő információ a hivatkozott adatok azonosításához. A név a következőt jelölheti:

  • típus
  • mező
  • metódus
  • helyi változó

Bár ezek mindegyike egyedileg eltérő, annak meghatározásához, hogy egy azonosító valójában melyikre utal, gyakran a nyelvi szabályok alapos megértését igényli.

A forráskódban vannak programelemek, és a programok a korábban lefordított kódtárakra is hivatkozhatnak, amelyek szerelvényfájlokba vannak csomagolva. Bár nincsenek forráskódok, és ezért nem érhetők el szintaxiscsomópontok vagy fák a szerelvényekhez, a programok továbbra is hivatkozhatnak bennük lévő elemekre.

Ezekhez a feladatokhoz szüksége van a szemantikai modellre.

A forráskód szintaktikai modellje mellett egy szemantikai modell is tartalmazza a nyelvi szabályokat, így könnyen megfeleltetheti az azonosítókat a megfelelő programelemre hivatkozva.

Összeállítása

A fordítás a C# vagy Visual Basic program fordításához szükséges összes elemet ábrázolja, amely tartalmazza az összes szerelvényhivatkozást, a fordítóbeállításokat és a forrásfájlokat.

Mivel ezek az információk egy helyen találhatók, a forráskód elemei részletesebben is leírhatók. Az összeállítás szimbólumként jelöli az egyes deklarált típusokat, tagokat vagy változókat. A fordítás számos metódust tartalmaz, amelyek segítenek megtalálni és összekapcsolni a forráskódban deklarált vagy metaadatként importált szimbólumokat egy szerelvényből.

A szintaxisfákhoz hasonlóan a fordítások nem módosíthatók. Miután létrehozott egy összeállítást, azt ön vagy bárki más nem módosíthatja, akivel esetleg megosztja. Létrehozhat azonban egy új fordítást egy meglévő fordításból, és ennek megfelelően módosíthatja azt. Létrehozhat például egy olyan fordítást, amely minden szempontból megegyezik egy meglévő fordítással, kivéve, ha az tartalmaz egy további forrásfájlt vagy szerelvényhivatkozást.

Szimbólumok

A szimbólum a forráskód által deklarált vagy egy szerelvényből metaadatként importált különálló elemet jelöl. Minden névteret, típust, metódust, tulajdonságot, mezőt, eseményt, paramétert vagy helyi változót szimbólum jelöl.

A típus különböző metódusai és tulajdonságai segítenek megtalálni a Compilation szimbólumokat. Megtalálhatja például a deklarált típus szimbólumát a közös metaadatok neve alapján. A teljes szimbólumtáblát a globális névtér által gyökerező szimbólumok fajaként is elérheti.

A szimbólumok további információkat is tartalmaznak, amelyeket a fordító a forrásból vagy a metaadatokból határoz meg, például más hivatkozott szimbólumokat. Minden szimbólumtípust egy külön felület jelöl, amely a ISymbolfordító által gyűjtött információkat részletező saját módszerekkel és tulajdonságokkal rendelkezik. Ezen tulajdonságok közül sok közvetlenül hivatkozik más szimbólumokra. A tulajdonság például IMethodSymbol.ReturnType azt a tényleges típusszimbólumot jelzi, amelyet a metódus visszaad.

A szimbólumok a névterek, a típusok és a tagok közös ábrázolását jelenítik meg a forráskód és a metaadatok között. A forráskódban deklarált és a metaadatokból importált metódusokat például ugyanazzal a tulajdonságokkal rendelkező metódus képviseli IMethodSymbol .

A szimbólumok koncepciójukban hasonlóak az API által System.Reflection képviselt CLR-típusrendszerhez, mégis gazdagabbak abban, hogy nem csupán típusokat modelleznek. A névterek, a helyi változók és a címkék mind szimbólumok. Emellett a szimbólumok a nyelvi fogalmak, nem a CLR-fogalmak ábrázolása. Sok az átfedés, de sok értelmes különbség is van. A C# vagy a Visual Basic iterátormetódusa például egyetlen szimbólum. Ha azonban az iterátor metódust CLR-metaadatokra fordítják le, az egy típus és több metódus.

Szemantikai modell

A szemantikai modell egyetlen forrásfájl összes szemantikai információjának felel meg. A következők felderítésére használhatja:

  • A forrás egy adott helyén hivatkozott szimbólumok.
  • Bármely kifejezés eredményül kapott típusa.
  • Minden diagnosztikát, amely hibák és figyelmeztetések.
  • Hogyan áramlanak a változók a forrásrégiókba és kifelé.
  • A válaszok a spekulatívabb kérdésekre.