Exemple #1
0
        private NumberInstructionArgument parseNumberArgument(ZealCpuParser.NumberLiteralContext context)
        {
            int          result = 0;
            ArgumentSize size   = ArgumentSize.Byte;

            switch (context.Start.Type)
            {
            case ZealCpuParser.HEX_LITERAL:
            {
                string hexText = context.HEX_LITERAL().GetText().Substring(1);
                if (Int32.TryParse(hexText, NumberStyles.HexNumber, CultureInfo.InvariantCulture, out result))
                {
                    if (hexText.Length > 4 && hexText.Length <= 6)
                    {
                        size = ArgumentSize.LongWord;
                    }
                    else if (hexText.Length > 2 && hexText.Length <= 4)
                    {
                        size = ArgumentSize.Word;
                    }
                }
                break;
            }

            case ZealCpuParser.INTEGER_LITERAL:
                if (Int32.TryParse(context.INTEGER_LITERAL().GetText(), out result))
                {
                    if (result > ushort.MaxValue)
                    {
                        size = ArgumentSize.LongWord;
                    }
                    else if (result > byte.MaxValue)
                    {
                        size = ArgumentSize.Word;
                    }
                }
                break;

            case ZealCpuParser.BINARY_LITERAL:
            {
                string binaryLiteral = context.BINARY_LITERAL().GetText().Substring(1);
                int    stringLength  = binaryLiteral.Length - 1;
                for (int i = 0; i <= stringLength; ++i)
                {
                    if (binaryLiteral[stringLength - i] == '1')
                    {
                        result |= (1 << i);
                    }
                }
                if (binaryLiteral.Length > 16 && binaryLiteral.Length <= 24)
                {
                    size = ArgumentSize.LongWord;
                }
                else if (binaryLiteral.Length > 8 && binaryLiteral.Length <= 16)
                {
                    size = ArgumentSize.Word;
                }
                break;
            }
            }

            return(new NumberInstructionArgument(result, size));
        }
Exemple #2
0
 private int parseNumberLiteral(ZealCpuParser.NumberLiteralContext context)
 {
     return(parseNumberArgument(context).Number);
 }