📄 myplx.txt
字号:
void AnalyzePROG() //分析program
{
if(IsKeyword(KW_PROGRAM))
GetToken();
else
{
ErrMsg("缺少“PROGRAM”");
while(!(IsKeyword(KW_INTEGER) || IsKeyword(KW_LOGICAL) || IsKeyword(KW_BEGIN)))
GetToken();
}
AnalyzeDS();
NewInst(OP_INT, VarTab.size());
if(IsKeyword(KW_BEGIN))
GetToken();
else
ErrMsg("缺少“BEGIN”");
AnalyzeSS(KW_END);
NewInst(OP_HLT, 0);
if(IsKeyword(KW_END))
GetToken();
else
{
ErrMsg("缺少“END”");
while(!IsSymbol('.'))
GetToken();
}
if(!IsSymbol('.'))
ErrMsg("缺少“.”");
}
void AnalyzeDS()//分析DS
{
for(;;)
{
if(IsKeyword(KW_BEGIN)) break;
if(IsKeyword(KW_INTEGER) || IsKeyword(KW_LOGICAL))
{
bool logic = IsKeyword(KW_LOGICAL);
GetToken();
for(;;)
{
if(Token.type == TT_IDENT)
{
if(FindVar(Token.ident) >= 0)
ErrMsg("标识符重定义");
else
{
VAR v = { Token.ident, logic };
VarTab.push_back(v);
}
GetToken();
}
else
{
ErrMsg("缺少标识符");
while(!(IsSymbol(',') || IsSymbol(';')))
GetToken();
}
if(!IsSymbol(',')) break;
GetToken();
}
if(IsSymbol(';'))
GetToken();
else if(IsKeyword(KW_INTEGER) || IsKeyword(KW_LOGICAL))
ErrMsg("缺少“;”");
}
else
{
ErrMsg("缺少类型说明符");
while(!(IsKeyword(KW_INTEGER) || IsKeyword(KW_LOGICAL) || IsKeyword(KW_BEGIN)))
GetToken();
}
}
}
void AnalyzeD()
{
if(IsKeyword(KW_INTEGER) || IsKeyword(KW_LOGICAL))
{
bool logic = IsKeyword(KW_LOGICAL);
GetToken();
for(;;)
{
if(Token.type == TT_IDENT)
{
if(FindVar(Token.ident) >= 0)
ErrMsg("标识符重定义");
else
{
VAR v = { Token.ident, logic };
VarTab.push_back(v);
}
GetToken();
}
else
{
ErrMsg("缺少标识符");
while(!(IsSymbol(',') || IsSymbol(';')))
GetToken();
}
if(!IsSymbol(',')) break;
GetToken();
}
if(IsSymbol(';'))
GetToken();
else if(IsKeyword(KW_INTEGER) || IsKeyword(KW_LOGICAL))
ErrMsg("缺少“;”");
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -