コード例 #1
0
ファイル: Parser.cs プロジェクト: twakeham/csharplang
        private bool number()
        {
            /// number = digits+ ('.' digits+)?
            string digits   = null;
            int    line     = _line;
            int    position = _position;

            while (Numbers.Contains(peek() ?? NotNumber))
            {
                digits = (digits ?? "") + peek();
                if (advance(1))
                {
                    break;
                }
            }

            // floating point part
            if (accept("."))
            {
                digits += ".";
                while (Numbers.Contains(peek() ?? NotNumber))
                {
                    digits = (digits ?? "") + peek();
                    if (advance(1))
                    {
                        break;
                    }
                }
            }

            if (digits != null)
            {
                Node node;
                if (digits.Contains("."))
                {
                    node = new FloatNode(digits, _filename, line, position);
                }
                else
                {
                    node = new IntegerNode(digits, _filename, line, position);
                }
                _stack.Push(node);
                return(true);
            }
            return(false);
        }
コード例 #2
0
ファイル: CodeGen.cs プロジェクト: twakeham/csharplang
        public void integer_immediate(IntegerNode node)
        {
            Instruction instruction = new Instruction(InstructionOpcode.push, node.Number);

            instructions.Add(instruction);
        }