//------------------------------------------------------------ // 意味解析。 public void SemanticAnalyze(SemanticAnalyzeComponent aComp) { // TypeInfo作成 TypeInfo typeInfo = aComp.CreateTypeInfo(mVariableDecl.TypePath, mIsConst, false); // シンボルノードを作成 VariableSymbolNode symbolNode = new VariableSymbolNode( aComp.PrevSymbolNode() , mVariableDecl.Ident , typeInfo ); aComp.AddSymbolNode(symbolNode); // 評価ノードを作成 var evaluateNode = new EvaluateNode(symbolNode, mVariableDecl.Expression()); // 評価準備 evaluateNode.SendEvent(aComp, EvaluateNodeEventKind.Analyze); // 評価実行 evaluateNode.SendEvent(aComp, EvaluateNodeEventKind.Evaluate); // 親の評価終了 evaluateNode.SendEvent(aComp, EvaluateNodeEventKind.Release); // 割り当て済みシンボルノードとして登録 aComp.AddEvaluatedSymbolNode(new EvaluatedSymbolNode(symbolNode, evaluateNode)); // Scope終了イベントのために追加 aComp.AddEvaluateNode(evaluateNode); }