private void PrintAssemblyCode(Code <int> code, ScopeStructure <int> scope, TextWriter output)
        {
            output.Write("\t");
            for (int i = 0; i < code.Parameters.Length; i++)
            {
                // support EA macro in inline assembly
                if (!scope.IsLocalLabelExisted(code.Parameters[i].ToString()) && !scope.GetSymbolValue(code.Parameters[i].ToString()).CausedError)
                {
                    output.Write(" #0x{0:X}", Folding.Fold(code.Parameters[i], (x => this.GetSymbolValue(scope, x))).Result);
                }
                else
                {
                    output.Write(" {0}", code.Parameters[i].ToString());
                }

                if (i == 0)
                {
                    output.Write("\t");
                    if (code.Parameters[0].ToString() == "push" || code.Parameters[0].ToString() == "pop")
                    {
                        output.Write("{");
                    }
                }
                if (i != code.Parameters.Length - 1)
                {
                    if (i != 0)
                    {
                        output.Write(",");
                    }

                    if (code.Parameters[0].ToString().StartsWith("ldr") || code.Parameters[0].ToString().StartsWith("str"))
                    {
                        if (i == 1)
                        {
                            output.Write("[");
                        }
                    }

                    // Console.WriteLine(code.Parameters[i + 1].ToString());
                    if (System.Text.RegularExpressions.Regex.IsMatch(code.Parameters[i + 1].ToString(), @"^\d+$"))
                    {
                        output.Write("#");
                    }
                }
                else
                {
                    if (code.Parameters[0].ToString() == "push" || code.Parameters[0].ToString() == "pop")
                    {
                        output.Write(" }");
                    }
                    else
                    if (code.Parameters[0].ToString().StartsWith("ldr") || code.Parameters[0].ToString().StartsWith("str"))
                    {
                        output.Write(" ]");
                    }
                    output.Write("\n");
                }
            }
        }
        private int?GetSymbolValue(ScopeStructure <int> scope, string symbolName)
        {
            if (symbolName.Equals(currentOffsetCode, StringComparison.OrdinalIgnoreCase) || symbolName.Equals(offsetChanger, StringComparison.OrdinalIgnoreCase))
            {
                return(new int?(this.currentOffset));
            }

            CanCauseError <IExpression <int> > symbolValue = scope.GetSymbolValue(symbolName);

            if (symbolValue.CausedError)
            {
                return(new int?());
            }

            CanCauseError <int> canCauseError = Folding.Fold(symbolValue.Result, (x => this.GetSymbolValue(scope, x)));

            if (canCauseError.CausedError)
            {
                return(new int?());
            }

            return(new int?(canCauseError.Result));
        }