Piszę interpreter języka C# od podstaw dla doświadczenia uczenia się i do tej pory wszystko poszło gładko. Mam w pełni funkcjonalny lexer C#, który wysyła wszystkie rodzaje tokenów do analizatora składni. Wiem, jak mam zamiar parsować tokeny, ale nie jestem pewien, jak powinienem uporządkować moje AST (abstrakcyjne drzewo składniowe).Jak zaprojektować części drzewa składni abstrakcyjnej?
Na przykład, jeśli mam prosty fragment kodu:
using System.Xml;
co by drzewo wyglądać, gdy analizowany?
Podoba Ci się to?
UsingDirective
Identifier(System)
Identifier(Xml)
lubisz to?
UsingDirective
Identifier(System)
Identifier(Xml)
Jeśli mógłbym dostać jakieś sugestie i/lub przykłady jak to jak mógłbym zorganizować rzeczy jak identyfikatory z kropkami w nich, jeśli/else if/else, deklaracja zmiennej/cesja połączone w jednej instrukcji (int i = 0;), definicje funkcji itp., Które byłyby pomocne. Po prostu potrzebuję lepszego pomysłu na strukturę drzewa i sam mogę wymyślić resztę. Dzięki.
To będzie długa nauka, jeśli chcesz zaimplementować całe C# :-) – svick
. Pomijam większość biblioteki klas. Zasadniczo po prostu wdrażam to, co musi zostać zaimplementowane w odniesieniu do podstawowych definicji klas/funkcji, zmiennych kreacji/użycia i wywołań funkcji. –