Patterns in SOME –Interpreter
2007-03-01 14:38
375 查看
Code in C#:
[align=left] [/align]
[align=left]namespace Interpreter_DesignPattern[/align]
[align=left]{[/align]
[align=left] using System;[/align]
[align=left] using System.Collections;[/align]
[align=left] [/align]
[align=left] class Context [/align]
[align=left] {[/align]
[align=left] [/align]
[align=left] }[/align]
[align=left] [/align]
[align=left] abstract class AbstractExpression [/align]
[align=left] {[/align]
[align=left] abstract public void Interpret(Context c);[/align]
[align=left] }[/align]
[align=left] [/align]
[align=left] // class for terminal symbol[/align]
[align=left] class TerminalExpression : AbstractExpression[/align]
[align=left] {[/align]
[align=left] override public void Interpret(Context c) [/align]
[align=left] {[/align]
[align=left] [/align]
[align=left] }[/align]
[align=left] }[/align]
[align=left] [/align]
[align=left] // class for grammar rule (one per rule needed)[/align]
[align=left] class NonterminalExpression : AbstractExpression[/align]
[align=left] {[/align]
[align=left] override public void Interpret(Context c) [/align]
[align=left] {[/align]
[align=left] [/align]
[align=left] } [/align]
[align=left] }[/align]
[align=left] // to extend grammar, just add other NonterminalExpression classes[/align]
[align=left] [/align]
[align=left] ///<summary>[/align]
[align=left] /// Summary description for Client.[/align]
[align=left] ///</summary>[/align]
[align=left] public class Client[/align]
[align=left] {[/align]
[align=left] public static int Main(string[] args)[/align]
[align=left] {[/align]
[align=left] Context c = new Context();[/align]
[align=left] ArrayList l = new ArrayList(); //really need a tree here![/align]
[align=left] [/align]
[align=left] // build up context information [/align]
[align=left] // . . .[/align]
[align=left] [/align]
[align=left] // Populate abstract syntax tree with data[/align]
[align=left] l.Add(new TerminalExpression());[/align]
[align=left] l.Add(new NonterminalExpression());[/align]
[align=left] [/align]
[align=left] // interpret[/align]
[align=left] foreach (AbstractExpression exp in l)[/align]
[align=left] {[/align]
[align=left] exp.Interpret(c);[/align]
[align=left] }[/align]
[align=left] [/align]
[align=left] return 0;[/align]
[align=left] }[/align]
[align=left] }[/align]
[align=left]}[/align]
[align=left] [/align]
[align=left] [/align]
[align=left]Code in SOME:[/align]
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);
}
%>
}
[align=left] [/align]
[align=left]namespace Interpreter_DesignPattern[/align]
[align=left]{[/align]
[align=left] using System;[/align]
[align=left] using System.Collections;[/align]
[align=left] [/align]
[align=left] class Context [/align]
[align=left] {[/align]
[align=left] [/align]
[align=left] }[/align]
[align=left] [/align]
[align=left] abstract class AbstractExpression [/align]
[align=left] {[/align]
[align=left] abstract public void Interpret(Context c);[/align]
[align=left] }[/align]
[align=left] [/align]
[align=left] // class for terminal symbol[/align]
[align=left] class TerminalExpression : AbstractExpression[/align]
[align=left] {[/align]
[align=left] override public void Interpret(Context c) [/align]
[align=left] {[/align]
[align=left] [/align]
[align=left] }[/align]
[align=left] }[/align]
[align=left] [/align]
[align=left] // class for grammar rule (one per rule needed)[/align]
[align=left] class NonterminalExpression : AbstractExpression[/align]
[align=left] {[/align]
[align=left] override public void Interpret(Context c) [/align]
[align=left] {[/align]
[align=left] [/align]
[align=left] } [/align]
[align=left] }[/align]
[align=left] // to extend grammar, just add other NonterminalExpression classes[/align]
[align=left] [/align]
[align=left] ///<summary>[/align]
[align=left] /// Summary description for Client.[/align]
[align=left] ///</summary>[/align]
[align=left] public class Client[/align]
[align=left] {[/align]
[align=left] public static int Main(string[] args)[/align]
[align=left] {[/align]
[align=left] Context c = new Context();[/align]
[align=left] ArrayList l = new ArrayList(); //really need a tree here![/align]
[align=left] [/align]
[align=left] // build up context information [/align]
[align=left] // . . .[/align]
[align=left] [/align]
[align=left] // Populate abstract syntax tree with data[/align]
[align=left] l.Add(new TerminalExpression());[/align]
[align=left] l.Add(new NonterminalExpression());[/align]
[align=left] [/align]
[align=left] // interpret[/align]
[align=left] foreach (AbstractExpression exp in l)[/align]
[align=left] {[/align]
[align=left] exp.Interpret(c);[/align]
[align=left] }[/align]
[align=left] [/align]
[align=left] return 0;[/align]
[align=left] }[/align]
[align=left] }[/align]
[align=left]}[/align]
[align=left] [/align]
[align=left] [/align]
[align=left]Code in SOME:[/align]
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);
}
%>
}
相关文章推荐
- Patterns in SOME –Memento
- Patterns in SOME –Facade
- Patterns in SOME –Abstract Factory
- Patterns in SOME –Mediator
- Patterns in SOME –Decorator
- Patterns in SOME –Factory Method
- Patterns in SOME –Iterator
- Patterns in SOME –Composite
- Patterns in SOME – Command
- Patterns in SOME –Bridge
- Patterns in SOME - Visitor
- Patterns in SOME –Chain Of Responsibility
- Patterns in SOME –Adapter (class)
- Patterns in SOME - Strategy
- Patterns in SOME –Template Method
- Patterns in SOME –Singleton
- Patterns in SOME –State
- Patterns in SOME –Proxy
- Patterns in SOME –Prototype
- use AWK to extract some lines according to some patterns in file