当前位置: 首页>>代码示例>>C++>>正文


C++ SymbolTable::GetItem方法代码示例

本文整理汇总了C++中SymbolTable::GetItem方法的典型用法代码示例。如果您正苦于以下问题:C++ SymbolTable::GetItem方法的具体用法?C++ SymbolTable::GetItem怎么用?C++ SymbolTable::GetItem使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在SymbolTable的用法示例。


在下文中一共展示了SymbolTable::GetItem方法的8个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。

示例1: CheckParalist

void CheckParalist(SymbolTable &table,int num,SymbolTable &callTable)
{
    Emit tmp;
    SymbolItem* item;
    for (int i=0;i!=num;++i) {
        item=table.GetItem(i);
        if (symbol==RPARENT) ErrorHandler("function call doesn't fit defination");//Error paralist doesn't fit defination
        if (item->GetKind()== parask) {
            SymbolItem* tmpitem=callTable.GetItem(token);
            if (!(IsBasicVar(*tmpitem, callTable) || IsArrayVar(*tmpitem))) ErrorHandler("var should pass address not expression");//Error var should pass address
            if (IsBasicVar(*tmpitem, callTable)) tmp.SetD1(token);
            else if (IsArrayVar(*tmpitem)) tmp.SetD1(GetArrayOffset(callTable));
            else ;//Error var pare should have iden to be parameter
            GetNextSym();
            if (symbol!=COMMA && symbol!=RPARENT) ErrorHandler("para not fit defination");//Error para should have iden yo be parameter
            tmp.SetTP( pushet);
            tmp.SetD1(tmp.GetD1()+"[");
            tmp.emitResult();
            GetNextSym();
            continue;
        }
        tmp.SetTP( pushet);
        tmp.SetD1(Expression(callTable));
        tmp.emitResult();
        if (symbol!=COMMA && symbol!=RPARENT) ErrorHandler("para not fit defination");//Error para doesn't fit the defination
        GetNextSym();
    }
    if (num==0) {
        GetNextSym();
    }
}
开发者ID:junpengxiao,项目名称:PL0Compiler,代码行数:31,代码来源:Parser.cpp

示例2: CheckItem

bool CheckItem(string str,bool isArray,SymbolTable &table)
{
    SymbolItem* item = table.GetItem(str);
    if (item==NULL) return false;
    if (isArray) return (item->GetKind()== varsk && IsArrayVar(*item));
    return false;
}
开发者ID:junpengxiao,项目名称:PL0Compiler,代码行数:7,代码来源:Parser.cpp

示例3: Statement

void Statement(SymbolTable &table)
{
    switch (symbol) {
        case IFTK:
            IfStatement(table); break;
        case REPTTK:
            RepeatStatement(table); break;
        case BEGINTK:
            CompoundStatement(table); break;
        case READTK:
            ReadStatement(table); break;
        case WRITETK:
            WriteStatement(table); break;
        case FORTK:
            ForStatement(table); break;
        case ENDTK: break;
        case IDEN:
            if (!IsFunctVar(*table.GetItem(token)) && !IsProceVar(*table.GetItem(token))) AssignStatement(table);
            else FunctionCall(table);
            break;
        default: break;//Warning : find empty statement. programer should comnfirm twice.
    }
}
开发者ID:junpengxiao,项目名称:PL0Compiler,代码行数:23,代码来源:Parser.cpp

示例4: AssignStatement

void AssignStatement(SymbolTable &table)
{
    Emit tmp;
    tmp.SetTP( assignet);
    if (symbol!=IDEN) ErrorHandler("Assign should have iden to be assigned");//Error assign should have iden
    SymbolItem* item = table.GetItem(token);
    if (item==NULL && token!=table.GetName()) ErrorHandler("iden not exist while assign");//Error iden not exist;
    if (IsBasicVar(*item, table)) tmp.SetD1(token);
    else if (IsArrayVar(*item)) tmp.SetD1(GetArrayOffset(table));
    else ;//Error This must be somthing I don't expect.
    GetNextSym();
    if (symbol!=ASSIGN) ErrorHandler("assign must have :=") ;//Error should be assign
    GetNextSym();
    tmp.SetS1(Expression(table));
    tmp.emitResult();
}
开发者ID:junpengxiao,项目名称:PL0Compiler,代码行数:16,代码来源:Parser.cpp

示例5: ForStatement

void ForStatement(SymbolTable &table)
{
    Emit tmp;
    if (symbol!=FORTK) ErrorHandler("for should begin with for");//Error for statement should begin with for
    GetNextSym();
    if (symbol!=IDEN) ErrorHandler("for should have iden as i");//Error for should have an iden to be iterator
    if (!IsBasicVar(*table.GetItem(token), table)) ErrorHandler("iden in for not exist");//Error for iden isn't int the table
    //if (token==table.GetName()) ;//Error function name can not be a iterator. Ok..I will use function name to be a variable
    tmp.SetTP( assignet);
    tmp.SetD1(token);
    string iter(token);
    GetNextSym();
    if (symbol!=ASSIGN) ErrorHandler("for should have :=") ;//Error iden should be assign
    GetNextSym();
    tmp.SetS1(Expression(table));
    tmp.emitResult();
    if (symbol!=TOTK && symbol!=DOWNTOTK) ErrorHandler("for should have to downto");//Error for should have to/downto
    string val = (symbol==TOTK?"1":"-1");
    GetNextSym();
    string cond = Expression(table);
    string labelbegin = "@" + NextTempName(table);
    string labelend = "@" +NextTempName(table);
    interResult<<labelbegin<<endl;
    if (val=="1") tmp.SetTP(greet);
    else tmp.SetTP(lsset);
    tmp.SetS2(cond);
    string desttmp = NextTempName(table);
    tmp.SetS1(tmp.GetD1());
    tmp.SetD1(desttmp);
    tmp.emitResult();
    tmp.SetTP( jzet);
    tmp.SetS1(desttmp);
    tmp.SetD1(labelend);
    tmp.emitResult();
    if (symbol!=DOTK) ErrorHandler("for should have do");//Error for should have do
    GetNextSym();
    Statement(table);
    tmp.SetTP(addet);
    tmp.SetS1(iter);
    tmp.SetS2(val);
    tmp.SetD1(iter);
    tmp.emitResult();
    tmp.SetTP( jmpet);
    tmp.SetD1(labelbegin);
    tmp.emitResult();
    interResult<<labelend<<endl;
}
开发者ID:junpengxiao,项目名称:PL0Compiler,代码行数:47,代码来源:Parser.cpp

示例6: ReadStatement

void ReadStatement(SymbolTable &table)
{
    Emit tmp;
    if (symbol!=READTK) ErrorHandler("read should begin with read");//Error should begin with read
    GetNextSym();
    if (symbol!=LPARENT) ErrorHandler("read should have (");//Error read should have (
    GetNextSym();
    if (symbol!=IDEN) ErrorHandler("read should have at least 1 iden");//Error read should read as least 1 iden
    while (symbol!=RPARENT) {
        if (symbol==LBRACK || symbol==LBRACE || symbol==LPARENT) ErrorHandler("according to syntax, can not read into array or function or procedure");
        if (!IsBasicVar(*table.GetItem(token), table)) ErrorHandler("should read at least 1 symbol");//Error should be iden recorded in symbol list
        //if (table.GetName()==token) ;//Error can not read vaule to a function !!!! This is very important....can function symbol be read when excute this function?
        tmp.SetTP( readet);
        tmp.SetD1(token);
        tmp.emitResult();
        GetNextSym();
        if (symbol==COMMA) GetNextSym();
        if (symbol!=IDEN && symbol!=RPARENT) ErrorHandler("Error while reading");//Error something unknown in read statement
    }
    GetNextSym();
}
开发者ID:junpengxiao,项目名称:PL0Compiler,代码行数:21,代码来源:Parser.cpp

示例7: Factor

string Factor(SymbolTable &table)
{
    string rect="",desttmp;
    Emit tmp;
    tmp.SetTB(&table);
    if (symbol==INTCON) {
        rect=token;
        GetNextSym();
        return rect;
    }
    if (symbol==CONSTTK) {
        ErrorHandler("Can not use char as factor");
    }
    if (symbol==LPARENT)
    {
        GetNextSym();
        rect=Expression(table);
        if (symbol!=RPARENT) ErrorHandler("if factor start with ( then it should end with )");//Error should have )
        GetNextSym();
        return rect;
    }
    if (symbol==IDEN){
        SymbolItem* item = table.GetItem(token);
        bool isfunc=false;//if it is func then should not get next symbol
        if (item==NULL) ;//Error
        if (IsArrayVar(*item)) desttmp=GetArrayOffset(table);
        else if (IsFunctVar(*item)) {
            desttmp=FunctionCall(table);
            isfunc=true;
        }
        else if (IsBasicVar(*item, table)) desttmp=token;
        else if (item->GetKind()==constsk) desttmp=token;
        else ;//Error do not know what it is
        if (!isfunc) GetNextSym();
        return desttmp;
    }
    //Error is not a factor
    return "ERROR";
}
开发者ID:junpengxiao,项目名称:PL0Compiler,代码行数:39,代码来源:Parser.cpp

示例8: FunctionCall

string FunctionCall(SymbolTable &table)
{
    Emit tmp;
    SymbolTable* targetfunc=NULL;
    for (int i=0;i!=ptable;++i) if (symbolTableList[i].GetFather()==&table&&symbolTableList[i].GetName()==token) {
        targetfunc=&symbolTableList[i];
        break;
    }
    tmp.SetTB(targetfunc);
    string desttmp;
    tmp.SetS1(token);
    GetNextSym();
    if (symbol!=LPARENT) ErrorHandler("function call should have (");//Error function call should have (
    SymbolTable* target = GetTableByName(tmp.GetS1());
    SymbolItem* item = table.GetItem(tmp.GetS1());
    GetNextSym();
    CheckParalist(*target,item->GetValue(),table);
    tmp.SetTP( callet);
    tmp.SetS2(IntToString(item->GetValue()));
    desttmp = NextTempName(table);
    tmp.SetD1(desttmp);
    tmp.emitResult();
    return desttmp;
}
开发者ID:junpengxiao,项目名称:PL0Compiler,代码行数:24,代码来源:Parser.cpp


注:本文中的SymbolTable::GetItem方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。