📄 assembler.cpp
字号:
if(State==7){State=8;break;}
if(State==12){State=13;break;}
else{State=-1;break;}
}
case 'r':
case 'R':
{
if(State==8){State=9;break;}
if(State==10){State=11;break;}
if(State==13){State=14;break;}
if(State==15){State=21;break;}
else{State=-1;break;}
}
case 'x':
case 'X': if(State==0){State=12;break;}else{State=-1;break;}
case 's':
case 'S': if(State==0){State=15;break;}else{State=-1;break;}
case 'l':
case 'L':
{
if(State==15){State=16;break;}
if(State==16){State=19;break;}
if(State==21){State=24;break;}
else{State=-1;break;}
}
case 't':
case 'T': if(State==16){State=17;break;}else{State=-1;break;}
case 'v':
case 'V':
{
if(State==19){State=20;break;}
if(State==22){State=23;break;}
if(State==24){State=25;break;}
else{State=-1;break;}
}
case 'b':
case 'B': if(State==26){State=27;break;}else{State=-1;break;}
// case '\n':
case '\t':
case ' ': if(State==3||State==4||State==6||State==9||State==11||State==14||State==17||State==18||State==20||State==23||State==25||State==27||State==28)
{ret[--i]='\0';TOKEN.TokenID=6;TOKEN.TokenName=ret;return 0;}
else{State=-1;break;}
default: {State=-1;break;}
}
if ( State == -1 )
break;
ch = getc(SourceFileName);
if ( ch == '\n' )
{
No_TxtLine++;
times++;
}
ret[i++] = ch;
}
rewind(SourceFileName);
if ( fseek(SourceFileName, Length, SEEK_CUR) == 1 )
return -1;
i = 0;
ch = ReadOneChar(SourceFileName);
No_TxtLine -= times;
times = 0;
if ( ch == '\n' )
{
No_TxtLine++;
times = 1;
}
ret[i++] = ch;
State = 0;
/**********************SICOM**************************/
while ( 1 )
{
switch ( ch )
{
case 'l':
case 'L': if(State==0){State=1;break;}else{State=-1;break;}
case 'u':
case 'U': if(State==1){State=2;break;}else{State=-1;break;}
case 'i':
case 'I': if(State==2){State=3;break;}else{State=-1;break;}
// case '\n':
case '\t':
case ' ': if(State==3){ret[--i]='\0';TOKEN.TokenID=10;TOKEN.TokenName=ret;return 0;}else{State=-1;break;}
default: {State=-1;break;}
}
if ( State == -1 )
break;
ch = getc(SourceFileName);
if ( ch == '\n' )
{
No_TxtLine++;
times++;
}
ret[i++] = ch;
}
rewind(SourceFileName);
if ( fseek(SourceFileName, Length, SEEK_CUR) == 1 )
return -1;
i = 0;
ch = ReadOneChar(SourceFileName);
No_TxtLine -= times;
times = 0;
if ( ch == '\n' )
{
No_TxtLine++;
times = 1;
}
ret[i++] = ch;
State = 0;
/**********************LWICOM**************************/
while ( 1 )
{
switch ( ch )
{
case 'l':
case 'L': if(State==0){State=1;break;}else{State=-1;break;}
case 's':
case 'S': if(State==0){State=3;break;}else{State=-1;break;}
case 'w':
case 'W':
{
if(State==1){State=2;break;}
if(State==3){State=4;break;}
else{State=-1;break;}
}
// case '\n':
case '\t':
case ' ': if(State==2||State==4){ret[--i]='\0';TOKEN.TokenID=11;TOKEN.TokenName=ret;return 0;}else{State=-1;break;}
default: {State=-1;break;}
}
if ( State == -1 )
break;
ch = getc(SourceFileName);
if ( ch == '\n' )
{
No_TxtLine++;
times++;
}
ret[i++] = ch;
}
rewind(SourceFileName);
if ( fseek(SourceFileName, Length, SEEK_CUR) == 1 )
return -1;
i = 0;
ch = ReadOneChar(SourceFileName);
No_TxtLine -= times;
times = 0;
if ( ch == '\n' )
{
No_TxtLine++;
times = 1;
}
ret[i++] = ch;
State = 0;
/**********************JCOM**************************/
while ( 1 )
{
switch ( ch )
{
case 'j':
case 'J': if(State==0){State=1;break;}else{State=-1;break;}
case 'a':
case 'A': if(State==1){State=2;break;}else{State=-1;break;}
case 'l':
case 'L': if(State==2){State=3;break;}else{State=-1;break;}
// case '\n':
case '\t':
case ' ': if(State==1||State==3){ret[--i]='\0';TOKEN.TokenID=12;TOKEN.TokenName=ret;return 0;}else{State=-1;break;}
default: {State=-1;break;}
}
if ( State == -1 )
break;
ch = getc(SourceFileName);
if ( ch == '\n' )
{
No_TxtLine++;
times++;
}
ret[i++] = ch;
}
rewind(SourceFileName);
if ( fseek(SourceFileName, Length, SEEK_CUR) == 1 )
return -1;
i = 0;
ch = ReadOneChar(SourceFileName);
No_TxtLine -= times;
times = 0;
if ( ch == '\n' )
{
No_TxtLine++;
times = 1;
}
ret[i++] = ch;
State = 0;
//////////////////////////////////NOP//////////
while ( 1 )
{
switch ( ch )
{
case 'n':
case 'N': if(State==0){State=1;break;}else{State=-1;break;}
case 'o':
case 'O': if(State==1){State=2;break;}else{State=-1;break;}
case 'p':
case 'P': if(State==2){State=3;break;}else{State=-1;break;}
// case '\n':
case '\t':
case ' ': if(State==3){TOKEN.TokenID=22;TOKEN.TokenName="NOP";return 0;}else{State=-1;break;}
default: {State=-1;break;}
}
if ( State == -1 ) break;
ch = getc(SourceFileName);
if ( ch == '\n' )
{
No_TxtLine++;
times++;
}
}
break;
}
case 17: //当前栈顶为<N_ORDERS>
{ //应该扫描IDNAME, END; RCOM,SRCOM,SLLRCOM,ICOM,SICOM,LWICOM,JCOM,NOP,ORG_CODE
i = 0;
times = 0; //统计每次循环No_TxtLine加了多少,回退时要用到
int Length = ftell(SourceFileName);
char ch = ReadOneChar(SourceFileName);
if ( ch == '\n' )
{
No_TxtLine++;
times = 1;
}
ret[i++] = ch;
/**********************END**************************/
while ( 1 )
{
switch ( ch )
{
case 'e':
case 'E': if(State==0){State=1;break;}else{State=-1;break;}
case 'n':
case 'N': if(State==1){State=2;break;}else{State=-1;break;}
case 'd':
case 'D': if(State==2){State=3;break;}else{State=-1;break;}
// case '\n':
case '\t':
case ' ': if(State==3){TOKEN.TokenID=13;TOKEN.TokenName="END";return 0;}else{State=-1;break;}
default: {State=-1;break;}
}
if ( State == -1 ) break;
ch = getc(SourceFileName);
if ( ch == '\n' )
{
No_TxtLine++;
times++;
}
}
rewind(SourceFileName);
if ( fseek(SourceFileName, Length, SEEK_CUR) == 1 )
return -1;
i = 0;
ch = ReadOneChar(SourceFileName);
No_TxtLine -= times;
times = 0;
if ( ch == '\n' )
{
No_TxtLine++;
times = 1;
}
ret[i++] = ch;
State = 0;
//////////////////////////////////NOP//////////
while ( 1 )
{
switch ( ch )
{
case 'n':
case 'N': if(State==0){State=1;break;}else{State=-1;break;}
case 'o':
case 'O': if(State==1){State=2;break;}else{State=-1;break;}
case 'p':
case 'P': if(State==2){State=3;break;}else{State=-1;break;}
// case '\n':
case '\t':
case ' ': if(State==3){TOKEN.TokenID=22;TOKEN.TokenName="NOP";return 0;}else{State=-1;break;}
default: {State=-1;break;}
}
if ( State == -1 ) break;
ch = getc(SourceFileName);
if ( ch == '\n' )
{
No_TxtLine++;
times++;
}
}
rewind(SourceFileName);
if ( fseek(SourceFileName, Length, SEEK_CUR) == 1 )
return -1;
i = 0;
ch = ReadOneChar(SourceFileName);
No_TxtLine -= times;
times = 0;
if ( ch == '\n' )
{
No_TxtLine++;
times = 1;
}
ret[i++] = ch;
State = 0;
//////////////////////////////////ORG_CODE//////////
while ( 1 )
{
switch ( ch )
{
case 'o':
case 'O':
{
if(State==0) {State=1;break;}
if(State==5) {State=6;break;}
else break;
}
case 'r':
case 'R':
{
if(State==1) {State=2;break;}
else break;
}
case 'g':
case 'G':
{
if(State==2) {State=3;break;}
else break;
}
case '_':
{
if(State==3) {State=4;break;}
else break;
}
case 'c':
case 'C':
{
if(State==4) {State=5;break;}
else break;
}
case 'd':
case 'D':
{
if(State==6) {State=7;break;}
else break;
}
case 'e':
case 'E':
{
if(State==7) {State=8;break;}
else break;
}
case ' ':
case '\t':
// case '\n':
{
if(State==8){TOKEN.TokenID=5;TOKEN.TokenName="ORG_CODE";return 0;}
else break;
}
default: {State=-1;break;}
}
if ( State == -1 ) break;
ch = getc(SourceFileName);
if ( ch == '\n' )
{
No_TxtLine++;
times++;
}
}
rewind(SourceFileName);
if ( fseek(SourceFileName, Length, SEEK_CUR) == 1 )
return -1;
i = 0;
ch = ReadOneChar(SourceFileName);
No_TxtLine -= times;
times = 0;
if ( ch == '\n' )
{
No_TxtLine++;
times = 1;
}
ret[i++] = ch;
State = 0;
/**********************SRCOM**************************/
while ( 1 )
{
switch ( ch )
{
case 'j':
case 'J': if(State==0){State=1;break;} else{State=-1;break;}
case 'r':
case 'R': if(State==1){State=2;break;} else{State=-1;break;}
case ' ':
// case '\n':
case '\t': if(State==2)
{ret[--i]='\0';TOKEN.TokenID=7;TOKEN.TokenName=ret;return 0;}
else
{State=-1;break;}
default: {State=-1;break;}
}
if ( State == -1 )
break;
ch = getc(SourceFileName);
if ( ch == '\n' )
{
No_TxtLine++;
times++;
}
ret[i++] = ch;
}
rewind(SourceFileName);
if ( fseek(SourceFileName, Length, SEEK_CUR) == 1 )
return -1;
i = 0;
ch = ReadOneChar(SourceFileName);
No_TxtLine -= times;
times = 0;
if ( ch == '\n' )
{
No_TxtLine++;
times = 1;
}
ret[i++] = ch;
State = 0;
/**********************SLLRCOM**************************/
while ( 1 )
{
switch ( ch )
{
case 's':
case 'S': if(State==0){State=1;break;}else{State=-1;break;}
case 'l':
case 'L':
{
if(State==1){State=2;break;}
if(State==2){State=3;break;}
if(State==4){State=6;break;}
else{State=-1;break;}
}
case 'r':
case 'R': if(State==1){State=4;break;}else{State=-1;break;}
case 'a':
case 'A': if(State==4){State=5;break;}else{State=-1;break;}
// case '\n':
case ' ': if(State==3||State==5||State==6){ret[--i]='\0';TOKEN.TokenID=8;TOKEN.TokenName=ret;return 0;}
else{State=-1;break;}
default: {State=-1;break;}
}
if ( State == -1 )
break;
ch = getc(SourceFileName);
if ( ch == '\n' )
{
No_TxtLine++;
times++;
}
ret[i++] = ch;
}
rewind(SourceFileName);
if ( fseek(SourceFileName, Length, SEEK_CUR) == 1 )
return -1;
i = 0;
ch = ReadOneChar(SourceFileName);
No_TxtLine -= times;
times = 0;
if ( ch == '\n' )
{
No_TxtLine++;
times = 1;
}
ret[i++] = ch;
State = 0;
/**********************ICOM**************************/
while ( 1 )
{
switch ( ch )
{
case 's':
case 'S': if(State==0){State=1;break;} else{State=-1;break;}
case 'l':
case 'L': if(State==1){State=2;break;} else{State=-1;break;}
case 't':
case 'T': if(State==2){State=3;break;} else{State=-1;break;}
case 'i':
case 'I':
{
if(State==3){State=4;break;}
if(State==13){State=14;break;}
if(State==17){State=18;break;}
if(State==20){State=21;break;}
if(State==24){State=25;break;}
else{State=-1;break;}
}
case 'u':
case 'U':
{
if(State==4){State=5;break;}
if(State==14){State=15;break;}
else{State=-1;break;}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -