英語版
このページの英語版を見る

dmd.parse

レキサーからトークンストリームを受け取り、それを抽象構文木に解析する。

仕様 D文法

Authors:

ソース parse.d

class Parser(AST, Lexer = dmd.lexer.Lexer): Lexer;
bool transitionIn;
-transition=in がアクティブな場合、 パラメータがリストされる。in
scope this(const ref Loc loc, AST.Module _module, const(char)[] input, bool doDocComment, ErrorSink errorSink, const CompileEnv* compileEnv, const bool doUnittests);
文字列ミックスインにはこのコンストラクタを使う。

入力 loc = ミックスインのソースファイルの場所

scope this(AST.Module _module, const(char)[] input, bool doDocComment, ErrorSink errorSink, const CompileEnv* compileEnv, const bool doUnittests);
メイン・パーサー・コンストラクタ。
AST.Dsymbols* parseModule();
モジュールを解析する。つまり、オプションのmodule x.y.z 宣言と、現在のファイルにある を解析する。
Returns:
宣言のリスト、または不正な宣言の場合は空リスト、 モジュール宣言が見つかった場合は、this.md として格納される。
final bool parseModuleDeclaration();
オプションのモジュール宣言を解析する
Returns:
不正なモジュール宣言が見つかった場合はfalse
final AST.Dsymbols* parseModuleContent();
モジュールの内容、つまりファイルの最後まで見つかったすべての宣言を解析する。
Returns:
宣言のリスト、または不正な宣言の場合は空リスト。
AST.Dsymbols* parseDeclDefs(int once, AST.Dsymbol* pLastDecl = null, PrefixAttributes!AST* pAttrs = null);
宣言と定義を解析する
Parameters:
int once !=0は、正確に1つの宣言または定義を解析することを意味する。
AST.Dsymbol* pLastDecl 最後に解析された宣言または定義に設定される
PrefixAttributes!AST* pAttrs 属性を追跡する
Returns:
宣言されたシンボルの配列
RootObject parseTypeOrAssignExp(TOK endtoken = TOK.reserved);
型または式を解析する
Returns:
ASTを表すルートオブジェクト
AST.Parameter parseAssignCondition();
if文やwhile文の代入条件を解析する。
Returns:
条件内で宣言されている変数
AST.Statement parseStatement(int flags, const(char)** endPtr = null, Loc* pEndloc = null);

入力 フラグ PSxxxx

出力 pEndloc if { ...文...} の場合は閉じ波括弧の位置を、そうでない場合は文の最後のトークンの位置を格納する。

AST.Statement parseAsm(bool endOfLine);
インラインアセンブラブロックを解析する。 asm のトークンで入る。 https://dlang.org/spec/iasm.html

AsmStatement asm FunctionAttributes(opt) { AsmInstructionListopt }.

AsmInstructionList AsmInstruction ; AsmInstruction ; AsmInstruction

Parameters:
bool endOfLine EOLがasm文の終了を意味する場合、trueを返す。
Returns:
アセンブラブロックを "文"としてインライン化する。
void check(Loc loc, TOK value);
現在のトークンが value, 次のトークンに進む。
Parameters:
Loc loc エラーメッセージの場所
TOK value 比較するトークン値
void check(TOK value);
現在のトークンが value, 次のトークンに進む。
Parameters:
TOK value 比較するトークン値
void check(TOK value, const(char)* string);
現在のトークンが value, 次のトークンに進む。
Parameters:
TOK value 比較するトークン値
const(char)* string エラーメッセージ
enum NeedDeclaratorId;
bool skipParens(Token* t, Token** pt);
括弧をスキップする。
Parameters:
Token* t オープン時(
Token** pt *ptはtrueの場合、')を過ぎたトークンに設定される
Returns:
真 成功した false 解析エラー
AST.Expression parsePrimaryExp();
式パーサー
static StorageClass isBuiltinAtAttribute(Identifier ident);
組み込みの@属性を認識する
Parameters:
Identifier ident 識別子
Returns:
属性の格納クラス、なければ0
immutable PREC[EXP.max + 1] precedence;
各演算子に演算子の優先順位を設定する。
hdrgenによって使用される
struct ParsedLinkage(AST);
ParseLinkage 関数の結果。
LINK link;
どのようなリンケージが指定されたか
CPPMANGLE cppmangle;
もしextern(C++, class|struct) 、が含まれていればclass|struct
AST.Identifiers* idents;
もしextern(C++, some.identifier) なら、識別子が含まれる。
AST.Expressions* identExps;
もし `extern(C++, (some_tuple_expression)|"string")なら、式になる。
)