1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47
|
using System;
using CommonAST = antlr.CommonAST;
using AST = antlr.collections.AST;
using CharBuffer = antlr.CharBuffer;
using RecognitionException = antlr.RecognitionException;
using TokenStreamException = antlr.TokenStreamException;
// wh: bug(?) in DotGNU 0.6 - "using antlr" will workaround the problem.
#if __CSCC__
using antlr;
#endif
class Calc
{
public static void Main(string[] args)
{
try
{
CalcLexer lexer = new CalcLexer(new CharBuffer(Console.In));
lexer.setFilename("<stdin>");
CalcParser parser = new CalcParser(lexer);
parser.setFilename("<stdin>");
// Parse the input expression
parser.expr();
CommonAST t = (CommonAST)parser.getAST();
// Print the resulting tree out in LISP notation
Console.Out.WriteLine(t.ToStringTree());
CalcTreeWalker walker = new CalcTreeWalker();
CalcParser.initializeASTFactory(walker.getASTFactory());
// Traverse the tree created by the parser
float r = walker.expr(t);
Console.Out.WriteLine("value is "+r);
}
catch(TokenStreamException e)
{
Console.Error.WriteLine("exception: "+e);
}
catch(RecognitionException e)
{
Console.Error.WriteLine("exception: "+e);
}
}
}
|