您的位置:首页 > 其它

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);
}
%>
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: