2008-11-14 9 views
2

Existe-t-il un moyen de le faire presque prêt à l'emploi?En utilisant C# et gppg, comment construire un arbre de syntaxe abstraite?

Je pourrais aller écrire une grosse méthode qui utiliserait les jetons collectés pour déterminer quelles feuilles devraient être placées dans quelles branches et à la fin remplir un objet TreeNode, mais puisque gppg traitait déjà tout en utilisant les expressions régulières fournies, Je me demandais s'il y a un moyen plus facile? Même si ce n'est pas le cas, tout pointeur sur la meilleure façon d'aborder le problème de la création d'un AST serait apprécié. Excuses si j'ai dit quelque chose d'idiot, je commence seulement à jouer au jeu de compilateur. :)

Répondre

0

Jetez un oeil à ANTLR, je l'ai d'un simple compilateur .NET écrit en C# avec elle quelques années.

1
  1. Dans votre fichier de syntaxe Déclarez une propriété qui gardera la racine de votre AST:

    {% 
    public BatchNode Batch; 
    public ErrorHandler yyhldr; 
    private TransformationContext _txContext = TransformationContext.Instance; 
    %} 
    
  2. Commencez à écrire votre grammaire avec des actions qui construisent des noeuds de votre AST:

    Batch 
        : StatementList {Batch = new BatchNode($1.Statements);} 
        ; 
    
    StatementList 
        : Statement {$$.Statements = new List<StatementNode>(); $$.Statements.Add($1.Statement); } 
        | StatementList Statement {$$.Statements = $1.Statements; $$.Statements.Add($2.Statement);} 
        ; 
    
  3. Analyseur d'appel:

    var parser = new Parser.Parser(); 
    var scanner = new Scanner(); 
    parser.scanner = scanner; 
    scanner.SetSource(sourceString, 0); 
    bool result = parser.Parse(); 
    if (result) 
        HandleMyAst(parser.Batch) 
    
Questions connexes