Mercurial > hg > CbC > CbC_gcc
diff gcc/d/dmd/lexer.h @ 145:1830386684a0
gcc-9.2.0
author | anatofuz |
---|---|
date | Thu, 13 Feb 2020 11:34:05 +0900 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/gcc/d/dmd/lexer.h Thu Feb 13 11:34:05 2020 +0900 @@ -0,0 +1,75 @@ + +/* 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(); +};