/// <summary> /// Parses a Fast program from given stream. /// </summary> public static MonaProgram Parse(Stream stream, string filename = null) { try { var parser = new MonaParser(stream, filename); bool ok = parser.Parse(); if (ok) { parser.program.Typecheck(); return(parser.program); } else { throw new MonaParseException(); } } catch (Exception e) { if (e is MonaParseException) { throw e; } else { throw new MonaParseException("unexpected error", e); } } }
public override void Print(StringBuilder sb) { sb.Append("("); arg1.Print(sb); sb.Append(" "); sb.Append(MonaParser.DescribeTokens(token.Kind)); sb.Append(" "); arg2.Print(sb); sb.Append(")"); }
public override void Print(StringBuilder sb) { if (token != null) { sb.AppendLine(MonaParser.DescribeTokens(token.Kind) + ";"); } foreach (var decl in declarations) { decl.Print(sb); sb.AppendLine(";"); } }
/// <summary> /// Parses a Fast program from given stream. /// </summary> public static Program Parse(Stream stream, string filename = null) { var parser = new MonaParser(stream, filename); bool ok = parser.Parse(); if (ok) { return(parser.program); } else { throw new MonaParseException("Error: mona parser failed", filename); } }