// Créer un scanner qui lit le flux d'entrée qui nous a été transmis CSLexer lexer = new CSLexer (new ANTLRFileStream (f)); tokens.TokenSource = lexer;Construire son propre compilateur C# en utilisant ANTLR: Unité de compilation
// 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;
Que puis-je faire avec le x qui est de type compilation_unit_return, pour extraire la racine, ses classes, ses méthodes, etc? Dois-je extraire son adaptateur? Comment je fais ça? Notez que le compilation_unit_return est défini comme tel dans mon CSParser (qui est généré automatiquement par ANTLR):
public class compilation_unit_return : ParserRuleReturnScope
{
private object tree;
override public object Tree
{
get { return tree; }
set { tree = (object) value; }
}
};
Cependant, l'arbre que je reçois est de l'objet de type. Je cours en utilisant le débogueur et a semblé voir qu'il est du type BaseTree. Mais BaseTree est une interface! Je ne sais pas comment cela se rapporte à BaseTree et je ne sais pas comment extraire les détails de cet arbre. Je dois écrire un visiteur qui a visité sa classe, méthode, variables .... La classe ParserRuleReturn s'étend de RuleReturnScope et a un objet start et stop, dont je ne sais pas ce que c'est ... En outre , il y a cette classe TreeVisitor fournie par ANTLR qui semble confuse. Il nécessite un adaptateur pour être passé en paramètre à son constructeur (sinon il utilisera le CommonTreeAdaptor par défaut), c'est pourquoi j'ai demandé à propos de la façon d'obtenir l'adaptateur de l'adaptateur. Et d'autres questions aussi ... Pour l'API, vous pouvez vous référer à http://www.antlr.org/api/CSharp/annotated.html
Maintenant, je suis frappé ici ... Si vous ne savez rien, pls aider. Merci un million.
C'est une classe abstraite ... public abstract class BaseTree: ITree – yeeen
Eh bien oui, et pourquoi ça t'arrêterait? Vous avez le nœud racine de l'arbre, dont vous savez qu'il est d'un type qui a toutes les méthodes nécessaires pour récupérer ses enfants (et donc marcher l'arbre à n'importe quelle profondeur). –