Пример #1
0
 /// <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);
     }
 }
Пример #2
0
 /// <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);
 }
Пример #3
0
 /// <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);
 }
Пример #4
0
        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);
                }
            }
        }
Пример #5
0
 /// <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);
     }
 }
Пример #6
0
 /// <summary>
 /// 子ノードを追加
 /// </summary>
 /// <param name="child"></param>
 public void AddChild(NakoNode child)
 {
     if (children == null)
     {
         children = new NakoNodeList();
     }
     children.Add(child);
 }