private void ReportError(Error error, BufferPosition position, params object[] args) { if (OnError != null) { OnError(this, new ErrorEventArgs(error, position, args)); } }
private void ReportError(Error error, BufferPosition position, params object[] args) { if (OnError != null) { OnError(this, new FileLexerErrorEventArgs(error, lineMap.Map(position), args)); } }
private void ReportError(Error error) { BufferPosition position = text.Position; position.Line -= 1; ReportError(error, position); }
private void ReportFormattedError(Error error, params object[] args) { BufferPosition position = text.Position; position.Line -= 1; ReportError(error, position, args); }
private BufferPosition TakePosition() { lastLine = text.Line; BufferPosition position = this.position; ClearPosition(); return(position); }
/// <summary> /// Map a buffer position to a position in a file. /// </summary> public FilePosition Map(BufferPosition from) { MapEntry entry = FindEntry(from.Line); return(new FilePosition( new BufferPosition( entry.To + (from.Line - entry.From), from.Column + 1, from.Offset), entry.FileName)); }
public int CompareTo(BufferPosition pos) { if (this < pos) { return(-1); } if (this == pos) { return(0); } return(1); }
public PreprocessorToken NextToken(TextBuffer text) { this.text = text; SkipWhiteSpace(); BufferPosition position = text.Position; char ch = PeekChar(); if (ch == '\0' || IsLineSeparator(ch)) { return(NewPpToken(PreprocessorTokenType.EndOfLine, position)); } ch = NextChar(); switch (ch) { case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': { int intValue = ch - '0'; while (IsDigit(PeekChar())) { int value10 = intValue * 10; if (value10 < intValue) { ReportError(LexError.NumericConstantOverflow); } else { intValue = value10 + (NextChar() - '0'); } } return(new PreprocessorIntToken(intValue, position)); } case '=': if (PeekChar() == '=') { NextChar(); return(NewPpToken(PreprocessorTokenType.EqualEqual, position)); } break; case '!': if (PeekChar() == '=') { NextChar(); return(NewPpToken(PreprocessorTokenType.NotEqual, position)); } else { return(NewPpToken(PreprocessorTokenType.Not, position)); } case '&': if (PeekChar() == '&') { NextChar(); return(NewPpToken(PreprocessorTokenType.And, position)); } break; case '|': if (PeekChar() == '|') { NextChar(); return(NewPpToken(PreprocessorTokenType.Or, position)); } break; case '(': return(NewPpToken(PreprocessorTokenType.OpenParen, position)); case ')': return(NewPpToken(PreprocessorTokenType.CloseParen, position)); case '"': value.Length = 0; while ((ch = PeekChar()) != '"') { if (Eof) { ReportError(LexError.UnexpectedEndOfFileString); break; } if (IsLineSeparator(ch)) { ReportError(LexError.WhiteSpaceInConstant); break; } value.Append(ch); NextChar(); } NextChar(); return(new PreprocessorStringToken(value.ToString(), position)); case '/': if (PeekChar() == '/') { IgnoreRestOfLine(); return(NewPpToken(PreprocessorTokenType.EndOfLine, position)); } break; default: if (IsLineSeparator(ch)) { return(NewPpToken(PreprocessorTokenType.EndOfLine, position)); } if (!IsIdentifierChar(ch)) { break; } value.Length = 0; value.Append(ch); while (IsIdentifierChar(PeekChar())) { value.Append(NextChar()); } Name id = nameTable.Add(value); PreprocessorTokenType type = keywords.IsKeyword(id); if (type != PreprocessorTokenType.Invalid) { return(NewPpToken(type, position)); } else { return(new PreprocessorIdentifierToken(id, position)); } } return(NewPpToken(PreprocessorTokenType.Unknown, position)); }
private PreprocessorToken NewPpToken(PreprocessorTokenType type, BufferPosition position) { return(new PreprocessorToken(type, position)); }
private void StartToken() { position = text.Position; }
private void ClearPosition() { position = new BufferPosition(); }
public PreprocessorToken(PreprocessorTokenType type, BufferPosition position) { Type = type; Position = position; }