private bool Match(char ch) { if (stream.Peek() == ch) { stream.Next(); return(true); } return(false); }
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); }