// Utworzenie skanera odczytującego ze strumienia wejściowego przekazanego nam CSLexer lexer = nowy CSLexer (nowy ANTLRFileStream (f)); tokens.TokenSource = lexer;Budowanie własnego kompilatora C# za pomocą ANTLR: Compilation Unit
// Create a parser that reads from the scanner
CSParser parser = new CSParser(tokens);
// start parsing at the compilationUnit rule
CSParser.compilation_unit_return x = parser.compilation_unit();
object ast = x.Tree;
Co mogę zrobić z X, który jest typu compilation_unit_return, aby wydobyć swoje korzenie, swoje zajęcia, swoje metody etc? Czy muszę wyodrębnić jego adapter? Jak mogę to zrobić? Zauważ, że compilation_unit_return jest zdefiniowany jako taki w moim CSParser (który jest automatycznie generowany przez antlr):
public class compilation_unit_return : ParserRuleReturnScope
{
private object tree;
override public object Tree
{
get { return tree; }
set { tree = (object) value; }
}
};
Jednak drzewo Dostaję jest obiektem typu. Używam debuggera i wydawało mi się, że jest on typu BaseTree. Ale BaseTree to interfejs! Nie wiem, w jaki sposób odnosi się do BaseTree i nie wiem, jak wyodrębnić szczegóły z tego drzewa. Potrzebuję napisać odwiedzającego, który odwiedziłby jego klasę, metodę, zmienne ... Klasa ParserRuleReturn rozciąga się od RuleReturnScope i ma obiekt start i stop, którego nie wiem, co to jest ... Ponadto , istnieje klasa TreeVisitor dostarczona przez ANTLR, która wygląda na zagmatwaną. Wymaga to przekazania adaptera jako parametru do jego konstruktora (jeśli nie użyje domyślnego narzędzia CommonTreeAdaptor), to dlaczego zapytałem, w jaki sposób uzyskać adapter Earlera. I inne problemy też ... Dla API, możesz odnieść się do http://www.antlr.org/api/CSharp/annotated.html
Teraz jestem uderzony tutaj ... Jeśli wiesz cokolwiek, pls pomóc. Stukrotne dzięki.
Jest to klasa abstrakcyjna ... publiczna klasa abstrakcyjna BaseTree: ITree – yeeen
No tak, i dlaczego miałaby Cię powstrzymać? Masz węzeł główny drzewa, który wiesz, że jest typu, który ma wszystkie metody niezbędne do odzyskania jego potomków (i tym samym chodzenia drzewa do dowolnej głębokości). –