public override Type VisitLiteral(BRAQParser.LiteralContext context) { if (context.num != null) { return(type_dict[context] = typeof(int)); } if (context.str != null) { return(type_dict[context] = typeof(string)); } if (context.var_node_ != null) { return(type_dict[context] = context.var_node_.Accept(this)); } if (context.double_num != null) { return(type_dict[context] = typeof(double)); } if (context.containing_group != null) { return(type_dict[context] = context.containing_group.Accept(this)); } throw new NotImplementedException(); }
public override int VisitLiteral(BRAQParser.LiteralContext context) { if (context.num != null) { il.Emit(OpCodes.Ldc_I4, int.Parse(context.num.Text)); } else if (context.str != null) { //строки хронятся вместе с кавычками, уберём их string based = context.str.Text; string unquoted = based.Substring(1, based.Length - 2); il.Emit(OpCodes.Ldstr, unquoted); } else if (context.double_num != null) { Console.WriteLine($"double constant {context.double_num.Text}"); il.Emit(OpCodes.Ldc_R8, double.Parse(context.double_num.Text, new CultureInfo("en-us"))); } else if (context.var_node_ != null) { context.var_node_.Accept(this); //variable } else if (context.containing_group != null) { context.containing_group.Accept(this); } else { throw new NotImplementedException(); } return(0); }
/// <summary> /// Visit a parse tree produced by <see cref="BRAQParser.literal"/>. /// <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 VisitLiteral([NotNull] BRAQParser.LiteralContext context) { return(VisitChildren(context)); }
/// <summary> /// Exit a parse tree produced by <see cref="BRAQParser.literal"/>. /// <para>The default implementation does nothing.</para> /// </summary> /// <param name="context">The parse tree.</param> public virtual void ExitLiteral([NotNull] BRAQParser.LiteralContext context) { }