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();
+};