/**************************************/ /* filename:bbi.h 共通ヘッダ */ /**************************************/ #include <iostream> #include <fstream> #include <sstream> #include <string> #include <vector> #include <stack> #include <cstdio> #include <cstdlib> #include <cstring> #include <cmath> #include <cctype> using namespace std; /* ---------------- define */ #define SHORT_SIZ sizeof(short int) #define SHORT_P(p) (short int *)(p) #define UCHAR_P(p) (unsigned char *)(p) #define LIN_SIZ 255 /* ---------------- enum struct etc */ enum TknKind { Lparen='(', Rparen=')', Lbracket='[', Rbracket=']', Plus='+', Minus='-', Multi='*', Divi='/', Mod='%', Not='!', Ifsub='?', Assign='=', IntDivi='\\', Comma=',', DblQ='"', Func=150, Var, If, Elif, Else, For, To, Step, While, End, Break, Return, Option, Print, Println, Input, Toint, Exit, Equal, NotEq, Less, LessEq, Great, GreatEq, And, Or, END_KeyList, Ident, IntNum, DblNum, String, Leter, Doll, Digit, Gvar, Lvar, Fcall, EofProg, EofLine, Others }; struct Token { TknKind kind; string text; double dblVal; Token() { kind = Others; text=""; dblVal=0.0; } Token (TknKind k) { kind=k; text=""; dblVal=0.0; } Token (TknKind k, double d){ kind=k; text=""; dblVal=d; } Token (TknKind k, const string& s) { kind=k; text=s; dblVal=0.0; } Token (TknKind k, const string& s, double d){ kind=k; text=s; dblVal=d; } }; enum SymKind { noId, varId, fncId, paraId }; enum DtType { NON_T, DBL_T }; struct SymTbl{ string name; SymKind nmKind; char dtTyp; int aryLen; short args; int adrs; int frame; SymTbl() { clear(); } void clear() { name=""; nmKind=noId; dtTyp=NON_T; aryLen=0; args=0; adrs=0; frame=0; } }; struct CodeSet{ TknKind kind; const char *text; double dblVal; int symNbr; int jmpAdrs; CodeSet() { clear(); } CodeSet(TknKind k) { clear(); kind=k; } CodeSet(TknKind k, double d ){ clear(); kind=k; dblVal=d; } CodeSet(TknKind k, const char *s) { clear(); kind=k; text=s; } CodeSet(TknKind k, int sym, int jmp){ clear(); kind=k; symNbr=sym; jmpAdrs=jmp; } void clear() { kind=Others; text=""; dblVal=0.0; jmpAdrs=0; symNbr=-1; } }; struct Tobj { char type; double d; string s; Tobj() { type = '-'; d = 0.0; s = ""; } Tobj(double dt) { type = 'd'; d = dt; s = ""; } Tobj(const string& st){ type = 's'; d = 0.0; s= st; } Tobj(const char *st){ type = 's'; d= 0.0; s = st; } }; class Mymemory{ private: vector<double> mem; public: void auto_resize(int n){ if (n >= (int)mem.size()) { n = (n/256 + 1) * 256; mem.resize(n); } } void set(int adrs, double dt){mem[adrs] = dt; } void add(int adrs, double dt){ mem[adrs] += dt; } double get(int adrs) { return mem[adrs]; } int size() { return (int)mem.size(); } void resize(unsigned int n){ mem.resize(n); } };