Added an AST printer

This commit is contained in:
Brandon Dyck 2023-06-26 13:47:31 -07:00
parent cbefb3cf40
commit b9b8c8e24b

46
ASTPrinter.cs Normal file
View File

@ -0,0 +1,46 @@
using System;
using System.IO;
using Finn.AST;
namespace Finn;
class ASTPrinter : IVisitor<string>
{
string print(Expr expr)
{
return expr.accept(this);
}
private string parenthesize(string name, params Expr[] exprs)
{
var w = new StringWriter();
w.Write($"({name}");
foreach (Expr expr in exprs)
{
w.Write(" ");
w.Write(expr.accept(this));
}
w.Write(")");
return w.ToString();
}
public string visitBinaryExpr(Binary expr)
{
return parenthesize(expr.Op.lexeme, expr.Left, expr.Right);
}
public string visitGroupingExpr(Grouping expr)
{
return parenthesize("group", expr.Expression);
}
public string visitLiteralExpr(Literal expr)
{
return expr.Value.ToString() ?? "";
}
public string visitUnaryExpr(Unary expr)
{
return parenthesize(expr.Op.lexeme, expr.Right);
}
}