📄 cx.cpp
字号:
#include <cstdio>
#include <string>
using namespace std;
int MAKE_EXE = 0;
void printhelp()
{
puts("Usage: cx [options] file");
puts("Options:");
puts(" --help Display this information");
puts(" -m[sub options] Designate target mode of compilation");
puts(" k Kernel mode, this is the default mode");
puts(" u User mode");
puts(" -s[stacksize] Arrange stack size in user mode, ");
puts(" the default size is 256 words");
puts(" -o[filename] Designate output file name, ");
puts(" the default name is code.cod");
}
int main(int argc, char* argv[])
{
int kernel_mode = 1;
int filecnt = -1;
puts("Compiler of Xaser version 0.6 [2007/12/16] for mips16e by Zhou Yuan");
for (int i = 1; i < argc; i++)
{
if (filecnt == -1 && argv[i][0] != '-')
{
filecnt = i;
}
if (argv[i][0] == '-' && argv[i][1] == '-' && argv[i][2] == 'h' && argv[i][3] == 'e' && argv[i][4] == 'l' && argv[i][5] == 'p' && argv[i][6] == 0)
{
printhelp();
return 0;
}
else for (int i = 1; i < argc; i ++)
{
if (argv[i][0] == '-')
{
if (argv[i][1] == 'm')
{
if (argv[i][2] == 'k')
{
kernel_mode = 1;
}
else if (argv[i][2] == 'u')
{
kernel_mode = 0;
}
else
{
printf("cx: invalid compilation mode controller.\n");
return 1;
}
}
else if (argv[i][1] == 's')
{
int num = -1;
sscanf(argv[i] + 2, "%d", &num);
if (kernel_mode)
{
printf("cx: cannot define stack size in kernel mode.\n");
return 1;
}
if (num < 10)
{
printf("cx: invalid stack size of stack size defined less than 10.\n");
return 1;
}
}
}
}
}
if (filecnt == -1)
{
printf("cx: no input file\n");
return 1;
}
FILE* chkfile = fopen(argv[filecnt], "r");
if (chkfile == NULL)
{
printf("cx: %s: No such file\n", argv[filecnt]);
return 1;
}
fclose(chkfile);
char cmd[1000];
printf("Checking %s...\n", argv[filecnt]);
int ptr = 0;
sprintf(cmd + ptr, "checker"); for (; cmd[ptr]; ptr ++);
for (int i = 1; i < argc; i++)
{
if (!(argv[i][0] == '-' && argv[i][1] == 'E' && argv[i][2] == 0))
{
sprintf(cmd + ptr, " %s", argv[i]); for (; cmd[ptr]; ptr ++);
}
}
if (system(cmd))
{
printf("cx checker: fatal error: compilation aborted\n");
return 1;
}
printf("Compiling %s...\n", argv[filecnt]);
ptr = 0;
sprintf(cmd + ptr, "toTAC"); for (; cmd[ptr]; ptr ++);
for (int i = 1; i < argc; i++)
{
if (!(argv[i][0] == '-' && argv[i][1] == 'E' && argv[i][2] == 0))
{
sprintf(cmd + ptr, " %s", argv[i]); for (; cmd[ptr]; ptr ++);
}
}
if (system(cmd))
{
printf("cx compiler: fatal error: compilation aborted\n");
return 1;
}
printf("Making binary file...\n");
ptr = 0;
sprintf(cmd + ptr, "toBIN"); for (; cmd[ptr]; ptr ++);
for (int i = 1; i < argc; i++)
{
if (argv[i][0] == '-' && (argv[i][1] == 'm' || argv[i][1] == 's' || argv[i][1] == 'o'))
{
sprintf(cmd + ptr, " %s", argv[i]); for (; cmd[ptr]; ptr ++);
}
}
if (system(cmd))
{
printf("cx compiler: fatal error: compilation aborted\n");
return 1;
}
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -