Ogólnie rzecz biorąc zamierzasz przeanalizować kod w jakiejś formie AST, może to być mniej więcej formalny model. Więc myślę o tym, co Kirk Woll osiągnął dzięki powyższemu komentarzowi, jest taki, że kiedy parsujesz ten język, bardzo często używasz parsera do stworzenia jakiegoś modelu danych surowej treści tego, co czytasz, ogólnie zorganizowanego w sposób drzewiasty. . Tak więc z tej definicji trudno jest uniknąć AST, chyba że robisz bardzo prostego tłumacza.
Często używam ANTLR do analizowania złożonych języków iw tym kontekście jest nieco bardziej konkretne znaczenie AST. ANTLR ma przydatny sposób generowania AST w gramatyce parsera za pomocą prostych czynności. Następnie należy napisać o wiele prostszy analizator składni dla tego AST, który można obsługiwać w znacznie prostszej wersji językiem, który przetwarza. To, czy dodatkowa praca polegająca na budowaniu dwóch parserów jest zyskiem netto, jest funkcją złożoności języka i tego, co planujesz z nim zrobić po przeanalizowaniu.
Dobra książka na ten temat, na którą możesz rzucić okiem, to "Wzorce implementacji języka" autorstwa Terrence'a Parra, autora ANTLR. Bardzo dokładnie zajmuje się tym tematem. Powiedział, że tak naprawdę nie dostałem AST, dopóki nie zacząłem ich używać, więc (jak zwykle) jest najlepszym sposobem na ich zrozumienie.
W jaki sposób planujesz modelować składnię języka bez AST? tj. podczas pisania parser/kompilator/interpreter/etc. –