mirror of
https://github.com/msojocs/wx-compiler.git
synced 2025-07-19 00:00:04 +08:00
186 lines
9.2 KiB
C++
186 lines
9.2 KiB
C++
|
|
#include "../include/wxml.h"
|
|
|
|
namespace WXML
|
|
{
|
|
|
|
namespace RPX
|
|
{
|
|
|
|
// 0x0051FE20
|
|
int id_nextPos[0x850u];
|
|
uint8_t id_accept[] = {0x0,0x1,0x24,0x48,0x65,0x61,0x64,0x55,0x52,0x4c,0x24,0x20,0x24,0x49,0x64,0x24,0x20,0x30,0x5f,0x5f,0x66,0x69,0x6c,0x65,0x5f,0x5f,0x0,0x0,0x0,0x0,0x24,0x48,0x65,0x61,0x64,0x55,0x52,0x4c,0x24,0x20,0x24,0x49,0x64,0x24,0x20,0x30,0x5f,0x5f,0x66,0x69,0x6c,0x65,0x5f,0x5f,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x24,0x48,0x65,0x61,0x64,0x55,0x52,0x4c,0x24,0x20,0x24,0x49,0x64,0x24,0x20,0x30,0x5f,0x5f,0x66,0x69,0x6c,0x65,0x5f,0x5f,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x54,0xf6,0x50,0x0,0x5c,0xf6,0x50,0x0,0x3,0xf6,0x50,0x0,0xa,0xf6,0x50,0x0,0x15,0xf6,0x50,0x0,0x28,0xf6,0x50,0x0,0x65,0xf6,0x50,0x0,0x6f,0xf6,0x50,0x0,0x7e,0xf6,0x50,0x0,0x8a,0xf6,0x50,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0};
|
|
Table id;
|
|
|
|
// 0x0051E520
|
|
int str_nextPos[0x18F0u];
|
|
uint8_t str_accept[] = {0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x24,0x48,0x65,0x61,0x64,0x55,0x52,0x4c,0x24,0x20,0x24,0x49,0x64,0x24,0x20,0x30,0x5f,0x5f,0x66,0x69,0x6c,0x65,0x5f,0x5f,0x0,0x0,0x0,0x0,0x24,0x48,0x65,0x61,0x64,0x55,0x52,0x4c,0x24,0x20,0x24,0x49,0x64,0x24,0x20,0x30,0x5f,0x5f,0x66,0x69,0x6c,0x65,0x5f,0x5f,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x24,0x48,0x65,0x61,0x64,0x55,0x52,0x4c,0x24,0x20,0x24,0x49,0x64,0x24,0x20,0x30,0x5f,0x5f,0x66,0x69,0x6c,0x65,0x5f,0x5f,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x54,0xf6,0x50,0x0,0x5c,0xf6,0x50,0x0,0x3,0xf6,0x50,0x0,0xa,0xf6,0x50,0x0,0x15,0xf6,0x50,0x0,0x28,0xf6,0x50,0x0,0x65,0xf6,0x50,0x0,0x6f,0xf6,0x50,0x0,0x7e,0xf6,0x50,0x0,0x8a,0xf6,0x50,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0};
|
|
Table str;
|
|
|
|
// 0x0051D040
|
|
int num_nextPos[0x14C8u];
|
|
uint8_t num_accept[] = {0x0,0x0,0x1,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x24,0x48,0x65,0x61,0x64,0x55,0x52,0x4c,0x24,0x20,0x24,0x49,0x64,0x24,0x20,0x30,0x5f,0x5f,0x66,0x69,0x6c,0x65,0x5f,0x5f,0x0,0x0,0x0,0x0,0x24,0x48,0x65,0x61,0x64,0x55,0x52,0x4c,0x24,0x20,0x24,0x49,0x64,0x24,0x20,0x30,0x5f,0x5f,0x66,0x69,0x6c,0x65,0x5f,0x5f,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x24,0x48,0x65,0x61,0x64,0x55,0x52,0x4c,0x24,0x20,0x24,0x49,0x64,0x24,0x20,0x30,0x5f,0x5f,0x66,0x69,0x6c,0x65,0x5f,0x5f,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x54,0xf6,0x50,0x0,0x5c,0xf6,0x50,0x0,0x3,0xf6,0x50,0x0,0xa,0xf6,0x50,0x0,0x15,0xf6,0x50,0x0,0x28,0xf6,0x50,0x0,0x65,0xf6,0x50,0x0,0x6f,0xf6,0x50,0x0,0x7e,0xf6,0x50,0x0,0x8a,0xf6,0x50,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0};
|
|
Table num;
|
|
|
|
/**
|
|
*
|
|
*/
|
|
int accept(int *a1, uint8_t a2[266], int &a3, char const *a4)
|
|
{
|
|
int v4 = 0;
|
|
int v7 = 0;
|
|
int i;
|
|
for (i = a3; i > 0; i--)
|
|
{
|
|
v7 = v4;
|
|
v4 = a1[266 * v4 + *a4]; // 266 * 4 = 0x428
|
|
if (v4 == -1)
|
|
{
|
|
break;
|
|
}
|
|
a4++;
|
|
}
|
|
|
|
if (a2[v7])
|
|
{
|
|
a3 = i;
|
|
return 0;
|
|
}
|
|
return -1;
|
|
}
|
|
int acceptID(char const *a1, int &a2)
|
|
{
|
|
if (!id.inited)
|
|
{
|
|
id.nextPos = id_nextPos;
|
|
id.canAccept = id_accept;
|
|
// 0x0051FE20
|
|
memset(id.nextPos, 255, 0x850u);
|
|
int v2 = 0;
|
|
id.nextPos[(0x51FF9C - 0x0051FE20) / 4] = 1;
|
|
id.nextPos[(0x5203C4 - 0x0051FE20) / 4] = 1;
|
|
do
|
|
{
|
|
id.nextPos[(0x51FFA4 - 0x0051FE20) / 4 + v2] = 1;
|
|
id.nextPos[(0x51FF24 - 0x0051FE20) / 4 + v2] = 1;
|
|
id.nextPos[(0x5203CC - 0x0051FE20) / 4 + v2] = 1;
|
|
id.nextPos[(0x52034C - 0x0051FE20) / 4 + v2++] = 1;
|
|
}
|
|
while(v2 != 26);
|
|
id.nextPos[(0x520308 - 0x0051FE20) / 4] = 1;
|
|
id.nextPos[(0x52030C - 0x0051FE20) / 4] = 1;
|
|
id.nextPos[(0x520310 - 0x0051FE20) / 4] = 1;
|
|
id.nextPos[(0x520314 - 0x0051FE20) / 4] = 1;
|
|
id.nextPos[(0x520318 - 0x0051FE20) / 4] = 1;
|
|
id.nextPos[(0x52031C - 0x0051FE20) / 4] = 1;
|
|
id.nextPos[(0x520320 - 0x0051FE20) / 4] = 1;
|
|
id.nextPos[(0x520324 - 0x0051FE20) / 4] = 1;
|
|
id.nextPos[(0x520328 - 0x0051FE20) / 4] = 1;
|
|
id.nextPos[(0x52032C - 0x0051FE20) / 4] = 1;
|
|
|
|
id.inited = true;
|
|
}
|
|
return accept(id.nextPos, id.canAccept, a2, a1);
|
|
|
|
}
|
|
int acceptStr(char const *a1, int & a2)
|
|
{
|
|
if (!str.inited)
|
|
{
|
|
str.nextPos = str_nextPos;
|
|
str.canAccept = str_accept;
|
|
// 0x0051E520
|
|
memset(str.nextPos, 255, 0x18F0u);
|
|
|
|
for (int i = 0; i != 256; ++i )
|
|
{
|
|
str.nextPos[(0x51E948 - 0x0051E520) / 4 + i] = 1;
|
|
str.nextPos[(0x51ED70 - 0x0051E520) / 4 + i] = 2;
|
|
str.nextPos[(0x51F198 - 0x0051E520) / 4 + i] = 1;
|
|
str.nextPos[(0x51F5C0 - 0x0051E520) / 4 + i] = 2;
|
|
}
|
|
str.nextPos[(0x51E5A8 - 0x0051E520) / 4] = 1;
|
|
str.nextPos[(0x51E5BC - 0x0051E520) / 4] = 2;
|
|
str.nextPos[(0x51EAB8 - 0x0051E520) / 4] = 3;
|
|
str.nextPos[(0x51EEE0 - 0x0051E520) / 4] = 4;
|
|
str.nextPos[(0x51E9D0 - 0x0051E520) / 4] = 5;
|
|
str.nextPos[(0x51EE0C - 0x0051E520) / 4] = 5;
|
|
str.inited = true;
|
|
}
|
|
return accept(str.nextPos, str.canAccept, a2, a1);
|
|
}
|
|
int acceptNum(char const *a1, int & a2)
|
|
{
|
|
if (!num.inited)
|
|
{
|
|
num.nextPos = num_nextPos;
|
|
num.canAccept = num_accept;
|
|
// 0x0051D040
|
|
memset(num.nextPos, 255, 0x18F0u);
|
|
int v2 = 0;
|
|
num.nextPos[(0x51D0EC - 0x0051D040) / 4] = 1;
|
|
num.nextPos[(0x51D0F4 - 0x0051D040) / 4] = 1;
|
|
num.nextPos[(0x51D0F8 - 0x0051D040) / 4] = 3;
|
|
num.nextPos[(0x51D520 - 0x0051D040) / 4] = 3;
|
|
num.nextPos[(0x51D948 - 0x0051D040) / 4] = 4;
|
|
do
|
|
{
|
|
num.nextPos[(0x51D100 - 0x0051D040) / 4 + v2] = 2;
|
|
num.nextPos[(0x51D528 - 0x0051D040) / 4 + v2] = 2;
|
|
num.nextPos[(0x51D950 - 0x0051D040) / 4 + v2] = 2;
|
|
num.nextPos[(0x51DD78 - 0x0051D040) / 4 + v2] = 4;
|
|
num.nextPos[(0x51E1A0 - 0x0051D040) / 4 + v2++] = 4;
|
|
}
|
|
while ( v2 != 10 );
|
|
num.inited = true;
|
|
}
|
|
return accept(num.nextPos, num.canAccept, a2, a1);
|
|
}
|
|
int acceptSymbol(char const *a1, int &a2, int &a3)
|
|
{
|
|
const char *v3 = a1;
|
|
int v4 = a2;
|
|
int v5 = a2 - 1;
|
|
a2 = v5;
|
|
switch (a1[1])
|
|
{
|
|
case '(':
|
|
a3 = 3;
|
|
break;
|
|
case ')':
|
|
a3 = 4;
|
|
break;
|
|
case '+':
|
|
a3 = 1;
|
|
break;
|
|
case ',':
|
|
a3 = 6;
|
|
break;
|
|
case '-':
|
|
a3 = 2;
|
|
case '.':
|
|
a3 = 5;
|
|
break;
|
|
|
|
default:
|
|
a2 = v4;
|
|
if (a1[0] == ' ' || a1[0] == '\t')
|
|
{
|
|
while (a2 > 0 && (*v3 == ' ' || *v3 == '\t'))
|
|
{
|
|
v3++;
|
|
a2--;
|
|
}
|
|
a3 = 7;
|
|
}
|
|
else
|
|
{
|
|
a2 = v5;
|
|
a3 = 0;
|
|
}
|
|
break;
|
|
}
|
|
return 0;
|
|
}
|
|
}
|
|
} |