/// <summary> /// /// </summary> /// <returns>true if parsing had no errors</returns> public bool Parse() { if (AlreadyParsed) { return(ParsingWasSuccessfull); } //Sets default console if needed console ??= new DefaultConsole(); var antlrInputStream = new AntlrInputStream(code); var lexer = new CosmosLexer(antlrInputStream); var tokens = new CommonTokenStream(lexer); var parser = new Cosmos(tokens); ErrorListener = new ErrorListener(console); parser.RemoveErrorListeners(); parser.AddErrorListener(ErrorListener); context = parser.programme(); var result = !ErrorListener.HadError; AlreadyParsed = true; ParsingWasSuccessfull = result; return(result); }
public override ExecutionContext VisitProgramme(Cosmos.ProgrammeContext context) { var result = new ExecutionContext { Success = false }; try { variableVisitor = new VariableVisitor(parser, executionConsole); expressionVisitor = new ExpressionVisitor(variableVisitor, parser, random); variableVisitor.ExpressionVisitor = expressionVisitor; base.VisitProgramme(context); result.Success = true; } catch (CosmosException e) { parser.ErrorListener.Error(e); } return(result); }
/// <summary> /// Visit a parse tree produced by <see cref="Cosmos.programme"/>. /// <para> /// The default implementation returns the result of calling <see cref="AbstractParseTreeVisitor{Result}.VisitChildren(IRuleNode)"/> /// on <paramref name="context"/>. /// </para> /// </summary> /// <param name="context">The parse tree.</param> /// <return>The visitor result.</return> public virtual Result VisitProgramme([NotNull] Cosmos.ProgrammeContext context) { return(VisitChildren(context)); }
/// <summary> /// Exit a parse tree produced by <see cref="Cosmos.programme"/>. /// <para>The default implementation does nothing.</para> /// </summary> /// <param name="context">The parse tree.</param> public virtual void ExitProgramme([NotNull] Cosmos.ProgrammeContext context) { }