annotate gcc/d/dmd/lexer.h @ 145:1830386684a0

gcc-9.2.0
author anatofuz
date Thu, 13 Feb 2020 11:34:05 +0900
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
145
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
1
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
2 /* Compiler implementation of the D programming language
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
3 * Copyright (C) 1999-2019 by The D Language Foundation, All Rights Reserved
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
4 * written by Walter Bright
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
5 * http://www.digitalmars.com
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
6 * Distributed under the Boost Software License, Version 1.0.
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
7 * http://www.boost.org/LICENSE_1_0.txt
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
8 * https://github.com/D-Programming-Language/dmd/blob/master/src/lexer.h
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
9 */
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
10
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
11 #pragma once
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
12
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
13 #include "root/root.h"
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
14 #include "globals.h"
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
15 #include "tokens.h"
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
16
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
17 struct StringTable;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
18 class Identifier;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
19
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
20 class Lexer
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
21 {
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
22 public:
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
23 static OutBuffer stringbuffer;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
24
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
25 Loc scanloc; // for error messages
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
26
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
27 const utf8_t *base; // pointer to start of buffer
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
28 const utf8_t *end; // past end of buffer
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
29 const utf8_t *p; // current character
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
30 const utf8_t *line; // start of current line
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
31 Token token;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
32 bool doDocComment; // collect doc comment information
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
33 bool anyToken; // !=0 means seen at least one token
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
34 bool commentToken; // !=0 means comments are TOKcomment's
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
35 bool errors; // errors occurred during lexing or parsing
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
36
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
37 Lexer(const char *filename,
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
38 const utf8_t *base, size_t begoffset, size_t endoffset,
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
39 bool doDocComment, bool commentToken);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
40
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
41 TOK nextToken();
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
42 TOK peekNext();
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
43 TOK peekNext2();
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
44 void scan(Token *t);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
45 Token *peek(Token *t);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
46 Token *peekPastParen(Token *t);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
47 unsigned escapeSequence();
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
48 TOK wysiwygStringConstant(Token *t, int tc);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
49 TOK hexStringConstant(Token *t);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
50 TOK delimitedStringConstant(Token *t);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
51 TOK tokenStringConstant(Token *t);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
52 TOK escapeStringConstant(Token *t);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
53 TOK charConstant(Token *t);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
54 void stringPostfix(Token *t);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
55 TOK number(Token *t);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
56 TOK inreal(Token *t);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
57
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
58 Loc loc()
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
59 {
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
60 scanloc.charnum = (unsigned)(1 + p-line);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
61 return scanloc;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
62 }
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
63
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
64 void error(const char *format, ...);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
65 void error(Loc loc, const char *format, ...);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
66 void deprecation(const char *format, ...);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
67 void poundLine();
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
68 unsigned decodeUTF();
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
69 void getDocComment(Token *t, unsigned lineComment);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
70
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
71 static const utf8_t *combineComments(const utf8_t *c1, const utf8_t *c2);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
72
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
73 private:
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
74 void endOfLine();
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
75 };