示例#1
0
        /// <summary>
        /// 翻译代码树到C语言
        /// </summary>
        public void startDash()
        {
            StringBuilder codeBuilder = new StringBuilder();
            // 第一阶段:处理标头和宏
            string stdHeadAndMacro = this.symbolMana.getMarcoContainer();

            codeBuilder.Append(stdHeadAndMacro);
            codeBuilder.Append("// ____KAGA_STDHEADANDMACRO_DEAL_ABOVE" + Environment.NewLine + Environment.NewLine);
            // 第二阶段:处理全局量和函数签名
            KagaTable globalKT = this.symbolMana.getGlobalTable();

            foreach (string gs in globalKT.getParseTable())
            {
                codeBuilder.Append(gs + Consta.pile_statend + Environment.NewLine);
            }
            codeBuilder.Append("// ____KAGA_GLOBALVAR_DEAL_ABOVE" + Environment.NewLine + Environment.NewLine);
            codeBuilder.Append("char " + Consta.switch_name + "[" + Consta.switch_max + "];" + Environment.NewLine);
            codeBuilder.Append("// ____KAGA_SWITCHES_DEAL_ABOVE" + Environment.NewLine + Environment.NewLine);
            foreach (FunctionCell fc in this.symbolMana.getFuncCellVector())
            {
                codeBuilder.Append(fc.getSign(containLeftBrucket: false) + Consta.pile_statend);
            }
            codeBuilder.Append(Environment.NewLine + "// ____KAGA_FUNCDECLARATION_DEAL_ABOVE" + Environment.NewLine + Environment.NewLine);
            // 第三阶段:递归下降翻译代码树
            this.pileBuilder = new StringBuilder();
            codeMana.DFS(
                match: (x) => x != null,
                startNode: codeMana.getRoot(),
                func: (x) => pile(x),
                unique: false);
            string ss = pileBuilder.ToString();

            codeBuilder.Append(ss);
            codeBuilder.Append("// ____KAGA_PILE_DEAL_ABOVE" + Environment.NewLine + Environment.NewLine);
            // 第四阶段:收尾并固化
            codeBuilder.Append("// ____KAGA_EOF" + Environment.NewLine + Environment.NewLine);
            string test = codeBuilder.ToString();
        }
示例#2
0
 /// <summary>
 /// 添加一张符号表
 /// </summary>
 /// <param name="kt">待添加符号表</param>
 public void addSymbolTable(KagaTable kt)
 {
     this.tableContainer.Add(kt);
 }