以下翻译脑袋的VBF项目,试试看TypeScript能否重写。

class RegExpr {     Accept<T>(convert: Converter<T>) {     } } class SymbolExpr extends RegExpr {     Symbol: string     constructor(symbol: string) {         this.Symbol = symbol;         super();     }     Accept<T>(convert: Converter<T>) {         return convert.AcceptSymbolExpr(this);     } } class KleeneStarExpr extends RegExpr {     InnerExpression: RegExpr     Accept<T>(convert: Converter<T>) {         return convert.AcceptKleeneStarExpr(this);     } } class AlternationExpr extends RegExpr {     Expr1: RegExpr     Expr2: RegExpr     Accept<T>(convert: Converter<T>) {         return convert.AcceptAlternationExpr(this);     } } class ConcatenationExpr extends RegExpr {     Left: RegExpr     Right: RegExpr     Accept<T>(convert: Converter<T>) {         return convert.AcceptConcatenationExpr(this);     } } class EmptyExpr extends RegExpr {     Accept<T>(convert: Converter<T>) {         return convert.AcceptEmpty(this);     } } interface Converter<T> {     AcceptEmpty(expr: RegExpr): T;     AcceptSymbolExpr(expr: SymbolExpr): T;     AcceptKleeneStarExpr(expr: KleeneStarExpr): T;     AcceptAlternationExpr(expr: AlternationExpr): T;     AcceptConcatenationExpr(expr: ConcatenationExpr): T; } class RegularExprPrettyPrint implements Converter<String> {     AcceptEmpty(expr: EmptyExpr) {         return "ε";     }     AcceptSymbolExpr(expr: SymbolExpr) {         return expr.Symbol;     }     AcceptKleeneStarExpr(expr: KleeneStarExpr) {         return "(" + expr.InnerExpression.Accept(this) + ")*";     }     AcceptAlternationExpr(expr: AlternationExpr) {         return "(" + expr.Expr1.Accept(this) + "|" + expr.Expr2.Accept(this) + ")";     }     AcceptConcatenationExpr(expr: ConcatenationExpr) {         return "(" + expr.Left.Accept(this) + expr.Right.Accept(this) + ")";     } } window.onload = () => {     var s = new SymbolExpr("A");     var kstart = new KleeneStarExpr();     kstart.InnerExpression = s;     var formatter = new RegularExprPrettyPrint();     var str = kstart.Accept(formatter)     alert(str); };
posted on 2015-04-30 00:23  江振  阅读(308)  评论(0编辑  收藏  举报