Patterns in SOME –Interpreter

    技术2022-05-11  63

    Code in C#:   namespace Interpreter_DesignPattern {      using System;      using System.Collections;        class Context      {               }        abstract class AbstractExpression      {          abstract public void Interpret(Context c);      }        // class for terminal symbol      class TerminalExpression : AbstractExpression      {          override public void Interpret(Context c)          {                        }      }        // class for grammar rule (one per rule needed)      class NonterminalExpression : AbstractExpression      {          override public void Interpret(Context c)          {                        }         }      // to extend grammar, just add other NonterminalExpression classes        ///<summary>      ///    Summary description for Client.      ///</summary>      public class Client      {          public static int Main(string[] args)          {               Context c = new Context();               ArrayList l = new ArrayList(); //really need a tree here!                 // build up context information               // . . .                 // Populate abstract syntax tree with data               l.Add(new TerminalExpression());               l.Add(new NonterminalExpression());                 // interpret               foreach (AbstractExpression exp in l)               {                    exp.Interpret(c);               }                                  return 0;          }      } }     Code in SOME:    CContext   AAbstractExpression        a_Interpret(CContext)   CTerminalExpression : AAbstractExpression        o_Interpret(CContext)   CNonterminalExpression : AAbstractExpression        o_Interpret(CContext)   CClient        main     CClient.main {        CContext c.();        <%        ArrayList l = new ArrayList(); //really need a tree here!          // build up context information        // . . .          // Populate abstract syntax tree with data        l.Add(new CTerminalExpression());        l.Add(new CNonterminalExpression());          // interpret        foreach (AAbstractExpression exp in l)        {               exp.Interpret(c);        }  %>                     }

    最新回复(0)