/// <summary> /// Visit a parse tree produced by <see cref="Generated.Z80TestParser.literalExpr"/>. /// </summary> /// <param name="context">The parse tree.</param> /// <return>The visitor result.</return> public override object VisitLiteralExpr(Z80TestParser.LiteralExprContext context) { if (IsInvalidContext(context)) { return(null); } var token = context.GetText(); ushort value; // --- Hexadecimal literals if (token.StartsWith("#")) { value = ushort.Parse(token.Substring(1), NumberStyles.HexNumber); } else if (token.StartsWith("0x")) { value = ushort.Parse(token.Substring(2), NumberStyles.HexNumber); } else if (token.EndsWith("h", StringComparison.OrdinalIgnoreCase)) { value = (ushort)int.Parse(token.Substring(0, token.Length - 1), NumberStyles.HexNumber); } // --- Binary literals else if (token.StartsWith("%")) { value = (ushort)Convert.ToInt32(token.Substring(1).Replace("_", ""), 2); } else if (token.StartsWith("0b")) { value = (ushort)Convert.ToInt32(token.Substring(2).Replace("_", ""), 2); } // --- Character literals else if (token.StartsWith("\"")) { var charExpr = context.GetText(); var bytes = SyntaxHelper.SpectrumStringToBytes(charExpr.Substring(1, charExpr.Length - 2)); value = bytes.Count == 0 ? (ushort)0x00 : bytes[0]; } // --- Decimal literals else { value = int.TryParse(context.GetText(), out var shortVal) ? (ushort)shortVal : (ushort)0; } return(new LiteralNode(context) { LiteralValue = value }); }
/// <summary> /// Exit a parse tree produced by <see cref="Z80TestParser.literalExpr"/>. /// <para>The default implementation does nothing.</para> /// </summary> /// <param name="context">The parse tree.</param> public virtual void ExitLiteralExpr([NotNull] Z80TestParser.LiteralExprContext context) { }
/// <summary> /// Visit a parse tree produced by <see cref="Z80TestParser.literalExpr"/>. /// <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 VisitLiteralExpr([NotNull] Z80TestParser.LiteralExprContext context) { return(VisitChildren(context)); }