Report a bug
If you spot a problem with this page, click here to create a Bugzilla issue.
Improve this page
Quickly fork, edit online, and submit a pull request for this page.
Requires a signed-in GitHub account. This works well for small changes.
If you'd like to make larger changes you may want to consider using
a local clone.
ddmd.lexer
Compiler implementation of the
D programming language.
Authors:
License:
Source: lexer.d
- immutable ubyte[256]
cmtable
; - Do our own char maps
- class
Lexer
; -
- this(const(char)*
filename
, const(char)*base
, size_tbegoffset
, size_tendoffset
, booldoDocComment
, boolcommentToken
); - Creates a Lexer.Parameters:
const(char)* filename
used for error messages const(char)* base
source code, ending in a 0 byte size_t begoffset
starting offset into base
[]size_t endoffset
last offset into base
[]bool doDocComment
handle documentation comments bool commentToken
comments become TOKcomment's - final TOK
peekNext
(); - Look ahead at next token's value.
- final TOK
peekNext2
(); - Look 2 tokens ahead at value.
- final void
scan
(Token*t
); - Turn next token in buffer into a token.
- final Token*
peekPastParen
(Token*tk
); tk
is on the opening (. Look ahead and return token that is past the closing ).- final uint
escapeSequence
(); - Parse escape sequence.
- final TOK
wysiwygStringConstant
(Token*t
, inttc
); - final TOK
hexStringConstant
(Token*t
); - Lex hex strings: x"0A ae 34FE BD"
- final TOK
delimitedStringConstant
(Token*t
); - Lex delimited strings: q"(foo(xxx))" // "foo(xxx)" q"[foo(]" // "foo(" q"/foo]/" // "foo]" q"HERE foo HERE" // "foo\n"
Input: p is on the "
- final TOK
tokenStringConstant
(Token*t
); - Lex delimited strings: q{ foo(xxx) } // " foo(xxx) " q{foo(} // "foo(" q{{foo}"}"} // "{foo}"}""
Input: p is on the q
- final TOK
escapeStringConstant
(Token*t
, intwide
); - final TOK
charConstant
(Token*t
); - final void
stringPostfix
(Token*t
); - Get postfix of string literal.
- final TOK
number
(Token*t
); - Read in a
number
. If it's an integer, store it in tok.TKutok.Vlong. integers can be decimal, octal or hex Handle the suffixes U, UL, LU, L, etc. If it's double, store it in tok.TKutok.Vdouble.Returns:TKnum TKdouble,... - final TOK
inreal
(Token*t
); - Read in characters, converting them to real.Bugs:Exponent overflow not detected. Too much requested precision is not detected.
- final void
poundLine
(); parse: #line linnum [filespec] also allow __LINE__ for linnum, and __FILE__ for filespec
- final uint
decodeUTF
(); - Decode UTF character. Issue error messages for invalid sequences. Return decoded character, advance p to last character in UTF sequence.
- final void
getDocComment
(Token*t
, uintlineComment
, boolnewParagraph
); - Parse doc comment embedded between
t
.ptr and p. Remove trailing blanks and tabs from lines. Replace all newlines with \n. Remove leading comment character from each line. Decide if it's alineComment
or a blockComment. Append to previous one for this token.IfnewParagraph
istrue
, an extra newline will be added between adjoining doc comments. - static const(char)*
combineComments
(const(char)*c1
, const(char)*c2
, boolnewParagraph
); - Combine two document comments into one, separated by an extra newline if
newParagraph
istrue
.
Copyright © 1999-2017 by the D Language Foundation | Page generated by
Ddoc on Wed Jul 19 21:19:46 2017