📄 varproc_1.c
字号:
if(temp == NULL) {
printf("mem alloc fail!\n");
exit(0);
}
memset(temp, 0, sizeof (VAR_LVL_RECORD));
temp->parent = CurVarRec;
CurVarRec->child = temp;
CurVarRec = temp;
}
varname = NULL;
line_no = 0;
return Define_check_state3();
break;
case '=':
//变量定义,执行插入操作
{
VAR_USE_REC temp = {0};
temp.line = line_no;
temp.name = varname;
temp.use_type = DEFINE_STATE;
VarInsert(temp);
}
varname = NULL;
line_no = 0;
return Define_check_state9();
break;
case ',':
//变量定义,执行插入操作
{
VAR_USE_REC temp = {0};
temp.line = line_no;
temp.name = varname;
temp.use_type = DEFINE_STATE;
VarInsert(temp);
}
varname = NULL;
line_no = 0;
return Define_check_state7();
break;
case ';':
//变量定义,执行插入操作
{
VAR_USE_REC temp = {0};
temp.line = line_no;
temp.name = varname;
temp.use_type = DEFINE_STATE;
VarInsert(temp);
}
varname = NULL;
line_no = 0;
return Define_check_finish();
break;
default:
return -1;
}
}
int Define_check_state3()
{
int tok = gettok();
if (tok == EOI) {
return -5; // end of file
}
switch(tok)
{
case ')':
return Define_check_state6();
break;
default:
if(istype(tok)){
tok = getTok();
if(tok == ID){
/*此ID为函数定义中的函数参数,执行插入操作*/
varname = token;
line_no = lineno;
{
VAR_USE_REC temp = {0};
temp.line = line_no;
temp.name = varname;
temp.use_type = DEFINE_STATE;
VarInsert(temp);
}
varname = NULL;
line_no = 0;
return Define_check_state4();
}
else
return -1;
break;
} else {
return -1;
}
break;
}
}
int Define_check_state4()
{
int tok = gettok();
if (tok == EOI) {
return -5; // end of file
}
switch(tok)
{
case ')':
return Define_check_state6();
break;
case ',':
return Define_check_state5();
break;
default:
return -1;
}
}
int Define_check_state5()
{
int tok = gettok();
if (tok == EOI) {
return -5; // end of file
}
if(istype(tok)) {
tok = getTok();
if(tok == ID) {
/*此ID为函数定义中的函数参数,执行插入操作*/
varname = token;
line_no = lineno;
{
VAR_USE_REC temp = {0};
temp.line = line_no;
temp.name = varname;
temp.use_type = DEFINE_STATE;
VarInsert(temp);
}
varname = NULL;
line_no = 0;
return Define_check_state4();
}
else
return -1;
} else {
return -1;
}
}
int Define_check_state6()
{
int tok = gettok();
if (tok == EOI) {
return -5; // end of file
}
switch(tok) {
case '{':
return Define_check_Fun1();
break;
case ';':
return Define_check_Fun2();
break;
default:
return -1;
}
}
int Define_check_state7()
{
int tok = gettok();
if (tok == EOI) {
return -5; // end of file
}
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 = DEFINE_STATE;
VarInsert(temp);
}
varname = NULL;
line_no = 0;
return Define_check_state8();
break;
default:
return -1;
}
}
int Define_check_state8()
{
int tok = gettok();
if (tok == EOI) {
return -5; // end of file
}
switch(tok) {
case ',':
return Define_check_state7();
break;
case '=':
return Define_check_state9();
break;
case ';':
return Define_check_finish();
break;
default:
return -1;
}
}
int Define_check_state9()
{
int tok = gettok();
if (tok == EOI) {
return -5; // end of file
}
if (tok == ID) {
varname = token;
line_no = lineno;
{
VAR_USE_REC temp = {0};
temp.line = line_no;
temp.name = varname;
temp.use_type = USE_STATE;
VarInsert(temp);
}
varname = NULL;
line_no = 0;
return Define_check_state10();
} else if (isnum(tok)) {
return Define_check_state10();
} else {
return -1;
}
}
int Define_check_state10()
{
int tok = gettok();
if (tok == EOI) {
return -5; // end of file
}
if (tok == ',') {
return Define_check_state7();
} else if (isoperator(tok)) {
return Define_check_state11();
} else {
return -1;
}
}
int Define_check_state11()
{
int tok = gettok();
if (tok == EOI) {
return -5; // end of file
}
if (tok == ID) {
varname = token;
line_no = lineno;
{
VAR_USE_REC temp = {0};
temp.line = line_no;
temp.name = varname;
temp.use_type = USE_STATE;
VarInsert(temp);
}
varname = NULL;
line_no = 0;
return Define_check_state10();
} else if (isnum(tok)) {
return Define_check_state10();
} else {
return -1;
}
}
int Define_check_Fun1()
{
/*进入函数体,此前函数参数应当已经插入变量表,作用域为整个函数体*/
return 0;
}
int Define_check_Fun2()
{
/*函数定义以';'结束,未进入函数体,
此前函数参数应当已经插入变量表,且此时应当从变量表中删除函数参数,
返回上一层作用域*/
//释放变量使用记录表的资源
//varlistfree(CurVarRec->varlist);
//释放当前层的记录块
CurVarRec = CurVarRec->parent;
free(CurVarRec->child);
CurVarRec->child = NULL;
return 0;
}
int Define_check_finish()
{
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -