示例#1
0
 private bool Match(char ch)
 {
     if (stream.Peek() == ch)
     {
         stream.Next();
         return(true);
     }
     return(false);
 }
示例#2
0
    private Lexeme RecognizeOperator(char current)
    {
        if (".,();".Contains(current))
        {
            return(lexemeFactory.Create(lexemeMapper.MapsToLexeme("" + current)));
        }
        if ("+-*/".Contains(current))
        {
            switch (current)
            {
            case '+': return(lexemeFactory.Create(LexemeType.AddOp, OperationType.Addition));

            case '-': return(lexemeFactory.Create(LexemeType.AddOp, OperationType.Subtraction));

            case '/': return(lexemeFactory.Create(LexemeType.MulOp, OperationType.Division));

            default:  return(lexemeFactory.Create(LexemeType.MulOp, OperationType.Multiplication));
            }
        }

        if (current == ':')
        {
            if (inputStream.Peek() == '=')
            {
                inputStream.Next();
                return(lexemeFactory.Create(LexemeType.Assign));
            }
            else
            {
                throw new CompilerException(": with out matching =");
            }
        }

        if (current == '<')
        {
            char next = inputStream.Peek();
            if (next == '=')
            {
                inputStream.Next();
                return(lexemeFactory.Create(LexemeType.RelOp, OperationType.LessThanOrEquals));
            }
            if (next == '>')
            {
                inputStream.Next();
                return(lexemeFactory.Create(LexemeType.RelOp, OperationType.NotEqual));
            }
            return(lexemeFactory.Create(LexemeType.RelOp, OperationType.LessThan));
        }

        if (current == '=')
        {
            return(lexemeFactory.Create(LexemeType.RelOp, OperationType.Equal));
        }

        // this has to be true
        if (current == '>')
        {
            char next = inputStream.Peek();
            if (next == '=')
            {
                inputStream.Next();
                return(lexemeFactory.Create(LexemeType.RelOp, OperationType.GreaterThanOrEquals));
            }
            return(lexemeFactory.Create(LexemeType.RelOp, OperationType.GreaterThan));
        }

        // we really can't get here
        return(null);
    }