blob: f4570540f84fbd78ba641503537665a2795c603f [file] [log] [blame]
/* Compiler implementation of the D programming language
* Copyright (C) 1999-2019 by The D Language Foundation, All Rights Reserved
* written by Walter Bright
* http://www.digitalmars.com
* Distributed under the Boost Software License, Version 1.0.
* http://www.boost.org/LICENSE_1_0.txt
* https://github.com/D-Programming-Language/dmd/blob/master/src/lexer.h
*/
#pragma once
#include "root/root.h"
#include "globals.h"
#include "tokens.h"
struct StringTable;
class Identifier;
class Lexer
{
public:
static OutBuffer stringbuffer;
Loc scanloc; // for error messages
const utf8_t *base; // pointer to start of buffer
const utf8_t *end; // past end of buffer
const utf8_t *p; // current character
const utf8_t *line; // start of current line
Token token;
bool doDocComment; // collect doc comment information
bool anyToken; // !=0 means seen at least one token
bool commentToken; // !=0 means comments are TOKcomment's
bool errors; // errors occurred during lexing or parsing
Lexer(const char *filename,
const utf8_t *base, size_t begoffset, size_t endoffset,
bool doDocComment, bool commentToken);
TOK nextToken();
TOK peekNext();
TOK peekNext2();
void scan(Token *t);
Token *peek(Token *t);
Token *peekPastParen(Token *t);
unsigned escapeSequence();
TOK wysiwygStringConstant(Token *t, int tc);
TOK hexStringConstant(Token *t);
TOK delimitedStringConstant(Token *t);
TOK tokenStringConstant(Token *t);
TOK escapeStringConstant(Token *t);
TOK charConstant(Token *t);
void stringPostfix(Token *t);
TOK number(Token *t);
TOK inreal(Token *t);
Loc loc()
{
scanloc.charnum = (unsigned)(1 + p-line);
return scanloc;
}
void error(const char *format, ...);
void error(Loc loc, const char *format, ...);
void deprecation(const char *format, ...);
void poundLine();
unsigned decodeUTF();
void getDocComment(Token *t, unsigned lineComment);
static const utf8_t *combineComments(const utf8_t *c1, const utf8_t *c2);
private:
void endOfLine();
};