📄 varproc.cpp
字号:
CurVarRec->child = NULL;
return 0;
}
static int Define_check_finish()
{
return 0;
}
/*
FOR 状态转移图
; )
/---------------------\ /------------------\
| | | |
| | | |
FOR ( | EXPRESS + ; \/ EXPRESS + ; | EXPRESS + ) \/
[START]-------->[S1]------->[S2]------------------>[S3]---------------->[S4]---------------->[F]
| /\
| |
| ; |
\--------------------/
*/
//int For_check_finish();
//int For_check_finish()
//{
// return 0;
//}
int For_proc()
{
return For_check_state1();
}
static int For_check_state1()
{
int tok = -1;
tok = gettok();
if(tok == EOI) {
return -5;//end of file
}
if(tok == '(')
return For_check_state2();
else
return -1;
}
static int For_check_state2()
{
int tok = -1;
tok = gettok();
if(tok == EOI) {
return -5;//end of file
}
if(tok == ';')
return For_check_state3();
else if(Expr_proc(tok)==';')
return For_check_state3();
else
return -1;
}
static int For_check_state3()
{
int tok = -1;
tok = gettok();
if(tok == EOI) {
return -5;//end of file
}
if(tok == ';')
return For_check_state4();
else if(Expr_proc(tok)==';')
return For_check_state4();
else
return -1;
}
static int For_check_state4()
{
int tok = -1;
tok = gettok();
if(tok == EOI) {
return -5;//end of file
} else if (tok == ')') {
return 0;//return For_check_finish();
} else if (tok == ID) {
if (Expr_proc(tok) == ')') {
return 0;
} else {
return -1;
}
} else {
return -1;
}
//if(Expr_proc(tok)==')')
// return 0;//return For_check_finish();
//else
// return -1;
}
/*
IF 状态转意图
IF ( EXPRESS + )
[START]---------->[S1]----------->[S2]-------------->[F]
| /\
| |
| ) |
\------------------/
*/
//int If_check_finish()
//{
// return 0;
//}
int If_proc()
{
return If_check_state1();
}
static int If_check_state1()
{
int tok = -1;
tok = gettok();
if(tok == EOI) {
return -5;//end of file
}
if(tok == '(')
return If_check_state2();
else
return -1;
}
static int If_check_state2()
{
int tok = -1;
tok = gettok();
if(tok == EOI) {
return -5;//end of file
}
if(Expr_proc(tok) == ')')
return 0; //return If_check_finish();
else
return -1;
}
/*
while 状态转移图
WHILE ( EXPRESS + )
[START]---------->[S1]----------->[S2]--------------->[F]
| /\
| |
| ) |
\-------------------/
*/
int While_proc()
{
return While_check_state1();
}
static int While_check_state1()
{
int tok = -1;
tok = gettok();
if(tok == EOI) {
return -5;//end of file
}
if(tok == '(')
return While_check_state2();
else
return -1;
}
static int While_check_state2()
{
int tok = -1;
tok = gettok();
if(tok == EOI) {
return -5;//end of file
} else if (tok == ID) {
if(Expr_proc(tok) == ')')
return 0;
else
return -1;
} else {
return -1;
}
//if(Expr_proc(tok) == ')')
// return 0;
//else
// return -1;
}
/*
语句状态转移图
/-----------------------------------------------\
| |
| |
ID ; \/ |
[START]-------->[ S1 ]--------->[FINISH]<----------------\ |
| | /\ | |
| | | ; | |
| =| | | |
| | [ S8 ] | ; |
( | | | /\ | |
| | OP| | NUM | |
| | \/ | ID | OP |
| \---------->[ S2 ]------------->[ S3 ]-------->[S4] |
| | /\ | |
\-----------------------------------\ | | | |
ID/NUM | ( | | ID/NUM | |
/---------------\ | | \------------/ |
| | | | |
| | | | |
| , \/ ID/NUM \/ \/ ) ; |
[S7]<------------[S6]<------------[ S5 ]--------->[S8]----------/
| /\
| |
| ) |
\----------------------------------/
*/
int Clause_proc()
{
return Clause_Start();
}
static int Clause_Start()
{
//开始前保存了上一个tok
varname = token;
line_no = lineno;
return Clause_check_state1();
}
static int Clause_check_state1()
{
int tok = -1;
tok = gettok();
if (tok == EOI) {
return -5;//end of file
}
switch(tok) {
case ';':
case '=':
//变量使用,把变量插入变量表
{
VAR_USE_REC temp = {0};
temp.line = line_no;
temp.name = varname;
if (tok == ';') {
temp.use_type = REF_STATE;
} else if (tok == '=') {
temp.use_type = ASS_STATE;
}
VarInsert(temp);
}
varname = NULL;
line_no = 0;
if (tok == ';') {
return Clause_check_finish();
} else if (tok == '='){
return Clause_check_state2();
}
case '(':
//函数调用
varname = NULL;
line_no = 0;
return Clause_check_state5();
default:
return -1;
}
}
static int Clause_check_state2()
{
int tok = -1;
tok = gettok();
if (tok == EOI) {
return -5; //End of file
}
if (tok == ID) {
varname = token;
line_no = lineno; //保存ID名称,因为不确定此ID是变量还是函数名
return Clause_check_state3();
} else if (isnum(tok)) {
return Clause_check_state8();
//return Clause_check_state3();
} else {
return -1;
}
/*
switch(tok)
{
case ID:
varname = token;
line_no = lineno; //保存ID名称,因为不确定此ID是变量还是函数名
case NUM:
return Clause_check_state3();
default:
return -1;
}
*/
}
static int Clause_check_state3()
{
int tok = -1;
tok = gettok();
if (tok == EOI) {
return -5;//end of file
} else if (isoperator(tok)){
tok = OPERATOR;
}
switch(tok) {
case ';':
if(varname) {
//变量使用,把变量插入变量表
{
VAR_USE_REC temp = {0};
temp.line = line_no;
temp.name = varname;
temp.use_type = REF_STATE;//USE_STATE
VarInsert(temp);
}
varname = NULL;
line_no = 0;
}
return Clause_check_finish();
case '(':
//函数调用
varname = NULL;
line_no = 0;
return Clause_check_state5();
case OPERATOR:
if(varname) {
//变量使用,把变量插入变量表
{
VAR_USE_REC temp = {0};
temp.line = line_no;
temp.name = varname;
temp.use_type = REF_STATE;//USE_STATE
VarInsert(temp);
}
varname = NULL;
line_no = 0;
}
return Clause_check_state4();
default:
return -1;
}
}
static int Clause_check_state4()
{
int tok = -1;
tok = gettok();
if (tok == EOI) {
return -5;//end of file
} else if (isnum(tok)) {
tok = NUM;
}
switch(tok) {
case ID:
//保存token,因为当前不确定此ID是变量还是函数名
varname = token;
line_no = lineno;
case NUM:
return Clause_check_state3();
default:
return -1;
}
}
static int Clause_check_state5()
{
int tok = -1;
tok = gettok();
if (tok == EOI) {
return -5;//end of file
} else if (isnum(tok)) {
tok = NUM;
}
switch(tok) {
case ')':
return Clause_check_state8();
case ID:
//变量作为函数参数使用,把变量插入变量表
varname = token;
line_no = lineno;
{
VAR_USE_REC temp = {0};
temp.line = line_no;
temp.name = varname;
temp.use_type = REF_STATE;//USE_STATE;
VarInsert(temp);
}
varname = NULL;
line_no = 0;
case NUM:
return Clause_check_state6();
default:
return -1;
}
}
static int Clause_check_state6()
{
int tok = -1;
tok = gettok();
if (tok == EOI) {
return -5; //end of file
}
switch(tok) {
case ',':
return Clause_check_state7();
case ')':
return Clause_check_state8();
default:
return -1;
}
}
static int Clause_check_state7()
{
int tok = -1;
tok = gettok();
if (tok == EOI) {
return -5;//end of file
} else if (isnum(tok)) {
tok = NUM;
}
switch(tok) {
case ID:
//变量作为函数参数使用,把tok插入变量表
varname = token;
line_no = lineno;
{
VAR_USE_REC temp = {0};
temp.line = line_no;
temp.name = varname;
temp.use_type = REF_STATE;//USE_STATE;
VarInsert(temp);
}
varname = NULL;
line_no = 0;
case NUM:
return Clause_check_state6();
default:
return -1;
}
}
static int Clause_check_state8()
{
int tok = -1;
tok = gettok();
if (tok == EOI) {
return -5;//end of file
} else if (isoperator(tok)) {
tok = OPERATOR;
}
switch(tok)
{
case ';':
return Clause_check_finish();
case OPERATOR:
return Clause_check_state2();
default:
return -1;
}
}
static int Clause_check_finish()
{
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -