Exemplo n.º 1
0
        private void ASNUM()
        {
            DataNeeds(1);
            var val = DATA.Pop();

            DATA.Push(SYMTAB.CreateSymbol(SymbolType.DOUBLE, double.Parse(val.Value.ToString())));
        }
Exemplo n.º 2
0
        private void ARITHOP()
        {
            Needing(new SymbolType[] { SymbolType.STRING, SymbolType.DOUBLE, SymbolType.DOUBLE });
            var op = DATA.Pop();
            var lh = DATA.Pop();
            var rh = DATA.Pop();

            switch (op.Value.ToString())
            {
            case "+":
                DATA.Push(SYMTAB.CreateSymbol(SymbolType.DOUBLE, (double)lh.Value + (double)rh.Value));
                break;

            case "-":
                DATA.Push(SYMTAB.CreateSymbol(SymbolType.DOUBLE, (double)lh.Value - (double)rh.Value));
                break;

            case "*":
                DATA.Push(SYMTAB.CreateSymbol(SymbolType.DOUBLE, (double)lh.Value * (double)rh.Value));
                break;

            case "/":
                DATA.Push(SYMTAB.CreateSymbol(SymbolType.DOUBLE, (double)lh.Value / (double)rh.Value));
                break;
            }
        }
Exemplo n.º 3
0
        public void DEF()
        {
            var defname = DATA.Pop().Value
                          .ToString();
            var defvalue = DATA.Pop().Value;

            SYMTAB.UpdateEntry(defname, SymbolType.STRING, defvalue);
        }
Exemplo n.º 4
0
        private void CHR()
        {
            DataNeeds(1);
            Check(0, SymbolType.DOUBLE);
            var chr = DATA.Pop();

            DATA.Push(SYMTAB.CreateSymbol(SymbolType.STRING, (char)((int)chr.Value)));
        }
Exemplo n.º 5
0
        private void ATSIGN()
        {
            DataNeeds(1);
            Check(0, SymbolType.STRING);
            var varname = DATA.Pop().Value.ToString();

            if (SYMTAB.ExistsEntry(varname))
            {
                var ent = SYMTAB.RetrieveEntry(varname);
                DATA.Push(ent);
            }
            else
            {
                throw new Exception($"No entry in symbol table called {varname}");
            }
        }
Exemplo n.º 6
0
 private void BANGSIGN()
 {
     DataNeeds(2);
     Check(0, SymbolType.STRING);
     SYMTAB.UpdateEntry(DATA.Pop().Value.ToString(), DATA.Pop());
 }