/// <summary> /// 指定したリストを書く /// </summary> /// <param name="list"></param> protected void Write_list(NakoNodeList list) { for (int i = 0; i < list.Count; i++) { NakoNode node = list[i]; Write_r(node); } }
/// <summary> /// コンストラクタ /// </summary> /// <param name="tokens"></param> public NakoParserBase(NakoTokenList tokens) { this.tok = tokens; tokens.MoveTop(); parentNode = topNode = new NakoNode(); frameStack = new Stack<NakoParserFrame>(); stateStack = new Stack<NakoParserNodeState>(); calcStack = new NakoNodeList(); calcStackCounters = new Stack<int>(); lastNode = null; localVar = new NakoVariableManager(NakoVariableScope.Local); }
/// <summary> /// コンストラクタ /// </summary> /// <param name="tokens"></param> public NakoParserBase(NakoTokenList tokens) { this.tok = tokens; tokens.MoveTop(); parentNode = topNode = new NakoNode(); frameStack = new Stack <NakoParserFrame>(); stateStack = new Stack <NakoParserNodeState>(); calcStack = new NakoNodeList(); calcStackCounters = new Stack <int>(); lastNode = null; localVar = new NakoVariableManager(NakoVariableScope.Local); }
private void _getVariable(NakoNodeVariable node) { NakoILCode ld = new NakoILCode(); if (!node.useElement) { // + 変数アクセス ld.type = (node.scope == NakoVariableScope.Global) ? NakoILType.LD_GLOBAL : NakoILType.LD_LOCAL; if (node.varBy == VarByType.ByRef) { _varBy_change_ref(ld); } ld.value = node.varNo; result.Add(ld); } else { // + 配列変数アクセス // - 変数 ld.type = (node.scope == NakoVariableScope.Global) ? NakoILType.LD_GLOBAL : NakoILType.LD_LOCAL; ld.value = node.varNo; result.Add(ld); // - 要素 NakoNodeList c = node.Children; for (int i = 0; i < c.Count; i++) { Write_r(c[i]); NakoILCode code = new NakoILCode(); /* * code.type = ((c.Count - 1) == i) * ? NakoILType.LD_ELEM * : NakoILType.LD_ELEM_REF; */ code.type = NakoILType.LD_ELEM; result.Add(code); } } }
/// <summary> /// 子ノードを追加 /// </summary> /// <param name="child"></param> public void AddChild(NakoNode child) { if (children == null) { children = new NakoNodeList(); } children.Add(child); }