1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103
|
#include <windows.h>
#include <vector>
#include <map>
#include <fstream>
#include <string.h>
#include <time.h>
#include <math.h>
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
using namespace std;
#define TotalCommand 16
#define TotalSymbol 9
#define TotalExp 7
char Symbol[TotalSymbol] = {'&', '*', '+', '-', '/', '=', '^', '|'};
#define GetLength(string) ((string) ? strlen(string) : 0)
#define InRange(fVal, min, max) ((!(fVal < min) && !(fVal > max)))
#define HalfRange(fVal, min, max) ((!(fVal <= min) && !(fVal >= max)))
#define Null -0.29855
inline int GetCalMode(const char *str, unsigned int len){
unsigned char chr = str[0];
if(len == 1){
if(chr == '%')return Modulus;
if(chr == '*')return Multiply;
if(chr == '+')return Add;
if(chr == '-')return Subtract;
if(chr == '/')return Divide;
if(chr == '=')return Equal;}
return -1;
}
char Buffer[TotalCommand][7] = {
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
"cal", "random", "if", "while", "for", "switch", "point", "goto", "call",
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
"int", "bool", "char", "short", "long", "float", "double"
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
};
char shortExp[TotalExp][7] = {"equal", "add", "sub", "mul", "div", "neg", "mod"};
char longExp[TotalExp][10] = {"equal", "add", "subtract", "multiply", "divide", "negative", "modulus"};
enum ExpName {Equal = 0, Add = 1, Subtract = 2, Multiply = 3, Divide = 4, Negative = 5, Modulus = 6};
enum CmdName {
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
Calculate, Random, If, While, For, Switch, Point, Goto, Call,
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
Int, Bool, Char, Short, Float, Double, Long
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
};
char *IntToBit(long int x, char *str, char *Temp){
int nCount = 0;
bool Neg = (x < 0);
while(x)
{
if (x&1)
str[nCount] = '1';
else
str[nCount] = '0';
nCount++;
str[nCount] = 0;
x>>=1;
}
for(int i =0;i < nCount;i++)
Temp[i] = str[nCount -1 - i];
Temp[nCount] = 0;
if(Neg){while(nCount < 63){Temp[nCount] = '0';nCount++;}Temp[63] = '1';Temp[64] = '0';}
return Temp;
}
struct subData{inline subData(){dData = 0;nId = 0;}unsigned char nId;double dData;};
struct Data{inline Data() {data.clear();arr.clear();nId = 0;}vector <subData> data;vector <int> arr;unsigned short nId;unsigned int Att : 4;};
struct Function{struct Parameter {int nId;}; vector <Parameter>Param;};
struct ClassData{vector <Data> data;vector <ClassData> classData;vector <Function> Func;bool Main;};
class lngParser{public : inline lngParser(){}~lngParser(){}
char ReadFile(const char *FileName,const char *Source);
ClassData main;
};
|