示例#1
0
 public void Interpret(Context context)
 {
     if (context.Input.Length == 0)
         return;
     if (context.Input.StartsWith(Nine()))
     {
         context.Output += (9 * Multiplier());
         context.Input = context.Input.Substring(2);
     }
     else if (context.Input.StartsWith(Four()))
     {
         context.Output += (4 * Multiplier());
         context.Input = context.Input.Substring(2);
     }
     else if (context.Input.StartsWith(Five()))
     {
         context.Output += (5 * Multiplier());
         context.Input = context.Input.Substring(1);
     }
     while (context.Input.StartsWith(One()))
     {
         context.Output += (1 * Multiplier());
         context.Input = context.Input.Substring(1);
     }
 }
示例#2
0
 static void Main(string[] args)
 {
     string roman = "MCMXXVIII";
     Context context = new Context(roman);
     // Build the 'parse tree'
     ArrayList tree = new ArrayList();
     tree.Add(new ThousandExpression());
     tree.Add(new HundredExpression());
     tree.Add(new TenExpression());
     tree.Add(new OneExpression());
     // Interpret
     foreach (Expression exp in tree)
     {
         exp.Interpret(context);
     }
     Console.WriteLine("{0} = {1}",
     roman, context.Output);
     // Wait for user
     Console.Read();
 }