📄 scanner.c
字号:
state = 19;
BackSpace(&char1);
}
break;
case 21:
char1 = NextChar();
if (char1 == '=')
state = 23;
else
{
state = 22;
BackSpace(&char1);
}
break;
case 24: case 62: case 66: case 92: //0x11c
state = 0;
value = 0x11c;
AtLast(value,&char1,1);
break; // ~,++,--,!
case 25:
char1 = NextChar();
if (char1 == '=')
state = 28;
else if (char1 == '|')
state = 27;
else
{
state = 26;
BackSpace(&char1);
}
break;
case 26: //0x114
state = 0;
value = 0x114;
AtLast(value,&char1,1);
break; // |
case 27: //0x112
state = 0;
value = 0x112;
AtLast(value,&char1,1);
break; // ||
case 29:
char1 = NextChar();
if (char1 == '&')
state = 31;
else if (char1 == '=')
state = 32;
else
{
state = 30;
BackSpace(&char1);
}
break;
case 30: //0x116
state = 0;
value = 0x116;
AtLast(value,&char1,1);
break; // &
case 31: //0x113
state = 0;
value = 0x113;
AtLast(value,&char1,1);
break; // &&
case 33:
char1 = NextChar();
if (char1 == '=')
state = 35;
else
{
state = 34;
BackSpace(&char1);
}
break;
case 34: //0x115
state = 0;
value = 0x115;
AtLast(value,&char1,1);
break; // ^
case 36:
char1 = NextChar();
if (char1 == '=')
state = 38;
else
{
state = 37;
BackSpace(&char1);
}
break;
case 38: case 40: //0x117
state = 0;
value = 0x117;
AtLast(value,&char1,1);
break; // ==,!=
case 39:
char1 = NextChar();
if (char1 == '=')
state = 40;
else
{
state = 92;
BackSpace(&char1);
}
break;
case 41: // 0x111
state = 0;
value = 0x111;
AtLast(value,&char1,1);
break; // ?:
case 43:
char1 = NextChar();
if (char1 == '=')
state = 45;
else if (char1 == '/')
state = 46;
else if (char1 == '*')
state = 48;
else
{
state = 44;
BackSpace(&char1);
}
break;
case 46:
while (char1 != '\n' && char1 != NULL)
char1 = NextChar();
state = 47;
BackSpace(&char1);
break;
case 47: case 50: //0x101 表示注释
state = 0;
value = 0x101;
AtLast(value,&char1,0);
break; // //,/*
case 48:
char1 = NextChar();
while (char1 != '*' && char1 != NULL)
{
if (char1 == '\n')
line++;
char1 = NextChar();
}
if (char1 == NULL)
{
state = 100;
BackSpace(&char1);
}
else state = 49;
break;
case 49:
char1 = NextChar();
if (char1 == '/')
state = 50;
else state = 48;
if (char1 == '\n')
line++;
break;
case 51: //0x120
state = 0;
value = 0x120;
AtLast(value,&char1,1);
break; // ,
case 52: //0x122
state = 0;
value = 0x121;
AtLast(value,&char1,1);
break; // ;
case 53: //0x121
state = 0;
value = 0x121;
AtLast(value,&char1,1);
break; // {,}
case 54: case 84: //0x11d
state = 0;
value = 0x11d;
AtLast(value,&char1,1);
break; // [,],(,),.
case 55:
char1 = NextChar();
while (char1 != NULL && char1 != '"' && char1 != '\n' && char1 != '\\')
char1 = NextChar();
if (char1 == NULL || char1 == '\n')
{
state = 100;
BackSpace(&char1);
}
else if (char1 == '\\')
{
char1 = NextChar();
if (char1 == NULL || char1 == '\n')
{
state = 100;
BackSpace(&char1);
}
else state = 55;
}
else if (char1 == '"')
state = 56;
break;
case 56: //0x109
state = 0;
value = 0x109;
AtLast(value,&char1,1);
break; // 字符串
case 57:
char1 = NextChar();
if (char1 == '\n' || char1 == NULL || char1 == '\'')
{
state = 100;
BackSpace(&char1);
}
else if (char1 == '\\')
state = 93;
else state = 58;
break;
case 58:
char1 = NextChar();
if (char1 == '\'')
state = 59;
else
{
state = 100;
BackSpace(&char1);
}
break;
case 59: //0x106
state = 0;
value = 0x106;
AtLast(value,&char1,1);
break; // 字符型
case 60:
char1 = NextChar();
if (char1 == '+')
state = 62;
else if (char1 == '=')
state = 63;
else
{
state = 61;
BackSpace(&char1);
}
break;
case 61: case 65: //0x11a
state = 0;
value = 0x11a;
AtLast(value,&char1,1);
break; // +,-
case 64:
char1 = NextChar();
if (char1 == '-')
state = 66;
else if (char1 == '=')
state = 67;
else
{
state = 65;
BackSpace(&char1);
}
break;
case 68:
char1 = NextChar();
if (char1 == 'x' || char1 == 'X')
state = 69;
else if (char1 <= '7' && char1 >= '0')
state = 72;
else if (char1 == '.')
state = 77;
else
{
state = 74;
BackSpace(&char1);
}
break;
case 69:
char1 = NextChar();
if ((char1 >='a' && char1 <= 'f') || isdigit(char1) || (char1 >='A' && char1 <= 'F'))
state = 70;
else
{
state = 100;
BackSpace(&char1);
}
break;
case 70:
char1 = NextChar();
while ((char1 >='a' && char1 <= 'f') || isdigit(char1) || (char1 >='A' && char1 <= 'F'))
char1 = NextChar();
if (char1 == 'L' || char1 == 'l')
state = 85;
else
{
state = 71;
BackSpace(&char1);
}
break;
case 72:
char1 = NextChar();
while (char1 >='0' && char1 <= '7')
char1 = NextChar();
if (char1 == 'L' || char1 == 'l')
state = 87;
else if (char1 == 'f' || char1 == 'F')
state = 88;
else
{
state = 73;
BackSpace(&char1);
}
break;
case 71: case 73: case 74: case 76: case 82: case 85: case 86: case 87: //0x107
state = 0;
value = 0x107;
AtLast(value,&char1,1);
break; // 16进制,8进制,0,长整型
case 75:
char1 = NextChar();
while (isdigit(char1))
char1 = NextChar();
if (char1 == 'L' || char1 == 'l')
state = 76;
else if (char1 == '.')
state = 77;
else if (char1 == 'e' || char1 == 'E')
state = 79;
else if (char1 == 'F' || char1 == 'f')
state = 86;
else
{
state = 82;
BackSpace(&char1);
}
break;
case 77:
char1 = NextChar();
while (isdigit(char1))
char1 = NextChar();
if (char1 == 'e' || char1 == 'E')
state = 79;
else if (char1 == 'f' || char1 == 'F')
state = 89;
else
{
state = 78;
BackSpace(&char1);
}
break;
case 78: case 81: case 88: case 89: case 90: //0x108
state = 0;
value = 0x108;
AtLast(value,&char1,1);
break; // 浮点,E
case 79:
char1 = NextChar();
if (isdigit(char1))
state = 80;
else if (char1 == '+' || char1 == '-')
state = 91;
else
{
state = 100;
BackSpace(&char1);
}
break;
case 80:
char1 = NextChar();
while (isdigit(char1))
char1 = NextChar();
if (char1 == 'F' || char1 == 'f')
state = 90;
else
{
state = 81;
BackSpace(&char1);
}
break;
case 83:
char1 = NextChar();
if (isdigit(char1))
state = 77;
else
{
state = 84;
BackSpace(&char1);
}
break;
case 91:
char1 = NextChar();
if (isdigit(char1))
state = 80;
else
{
state = 100;
BackSpace(&char1);
}
break;
case 93:
char1 = NextChar();
if (char1 == 't' || char1 == 'b' || char1 == 'n' || char1 == 'r' || char1 == '\'' || char1 == '\\' || char1 == 'f')
state = 58;
else if (char1 >= '0' && char1 <= '7')
state = 94;
else if (char1 == 'u')
state = 95;
else
{
state = 100;
BackSpace(&char1);
}
break;
case 94:
char1 = NextChar();
ct = 0;
while (ct <= 2 && char1 >= '0' && char1 <= '7')
{
char1 = NextChar();
ct++;
}
if (char1 == '\'')
state = 59;
else {
state = 100;
BackSpace(&char1);
}
break;
case 95:
char1 = NextChar();
if ((char1 >= '0' && char1 <= '9') || (char1 >= 'a' && char1 <= 'f') || (char1 >= 'A' && char1 <= 'F'))
state = 96;
else
{
state = 100;
BackSpace(&char1);
}
break;
case 96:
ct = 0;
char1 = NextChar();
while ( ct <= 3 && (char1 >= '0' && char1 <= '9') || (char1 >= 'a' && char1 <= 'f') || (char1 >= 'A' && char1 <= 'F'))
{
char1 = NextChar();
ct++;
}
if (char1 == '\'')
state = 59;
else
{
state = 100;
BackSpace(&char1);
}
break;
case 100: //0x100
state = 0;
value = 0x100;
AtLast(value,&char1,1);
break; // error
}
}
if (word_row != 0)
WriteLine();
WriteTotalWord();
}
////////////////////////////////////////////////////////////////////////////////////////////////////
WriteTotalWord()
{ //分析完成,输出总字符数
fprintf(fp_write," Sum of words in this source file is:%d.\n***************************************************\n",word_total);
printf(" Sum of words in this source file is:%d.\n*****************************************************\n",word_total);
fclose(fp_write);
}
/////////////////////////////////////////////////////////////////////////////////////////////////////
main()
{
strcpy(FileName,"Test-Lexcial.java");
OpenFile(); // 打开文件
PassLetter(fp); // 完成分析前的准备工作
Analysis(); // 分析过程
CloseFile(); // 关闭文件
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -