Ejemplo n.º 1
0
void clsAnalysis::AnalyzeBasicBlock(clsBasicBlock * pBasicBlock, clsEvent * pEvent)
{
  vector<clsStatement *>::iterator  it_pStatement;
  
  for (it_pStatement  = pBasicBlock->m_pStatements.begin();
       it_pStatement != pBasicBlock->m_pStatements.end();
       ++it_pStatement)
  {
    AnalyzeStatement(*it_pStatement, pBasicBlock, pEvent);
  }
}
Ejemplo n.º 2
0
void TAsmAnalyze::Analyze(void)
{
	AsmTokenType Token = TOKENERROR;
	AsmTokenType TokenTemp;
	String TokenID;
    int TempHex;

	pHash = new HashTable;

	while (Token!=ENDFILE)
	{
		Token=getToken();
		if (Token==ENDFILE) break;
		//cout<<"Debug: "<<tokenString<<endl;

		if (TokenPos == 1)
		{
			switch (Token)
			{
				case KEYWORDS:
					AnalyzeStatement(CurrentKeyWords);
					// 转到相应处理函数。
				break;

				case ID:
					TokenID = tokenString;
                    TokenTemp = getToken();
					if (TokenTemp == COLON)
					{
						// 发现一个相对地址标示符,存储到符号表中。
						//cout<<"ID - "<<TokenID<<" - "<<hex<<(unsigned int)(BaseAddress+CurrentAddress)<<endl;
						if (!pHash->insert(TokenID,CurrentAddress,true))
						{
							//cout<<"ID Existed!"<<endl;
                            FoundError(ID_DEFINED,lineno,"标示符已存在!");
						}
						//if (getToken()==ENDLINE) break;
						getToken();
						AnalyzeStatement(CurrentKeyWords);
						//cout<<lineno;
						// 转到相应处理函数。
					}
					else if (TokenTemp == EQUAL)
                    {
                        getToken();
                        if (IsHex(tokenString))
                        {
                            // 发现一个绝对标示符,存储到符号表中。
                            if (DebugMode)
                                TempHex = HexStr2Int(tokenString) - DebugAddress;
                            else
                                TempHex = HexStr2Int(tokenString);
                            if (!pHash->insert(TokenID, TempHex, false))
                            {
                                //cout<<"ID Existed!"<<endl;
                                FoundError(ID_DEFINED,lineno,"标示符已存在!");
                            }
                        }
                        else
                        {
                            FoundError(SYNTAX_ERROR,lineno,"语法错误!");
                            //cout<<"Line Error - "<<lineno<<endl;
                        }
                    }
                    else
					{
                        FoundError(SYNTAX_ERROR,lineno,"语法错误!");
						//cout<<"Line Error - "<<lineno<<endl;
					}

				break;

				case ATCHAR:
                    TokenTemp = getToken();
                    if (TokenTemp == TOKENERROR)
                    {
                        FoundError(SYNTAX_ERROR,lineno,"语法错误!");
                    }
                    else if (TokenTemp == STRING)
                    {
                        LinkFileName = tokenString;
                    }
                    else if (TokenTemp == SHARP && IsHex(tokenString))
					{
						// 设置调试模式
                        DebugMode = true;
						// 设置起始地址
                        BaseAddress = HexStr2Int(tokenString);
					}
                    else if (IsHex(tokenString))
					{
						// 设置起始地址
                        BaseAddress = HexStr2Int(tokenString);
					}
                    else
					{
                        FoundError(SYNTAX_ERROR,lineno,"语法错误!");
						//cout<<"Line Error - "<<lineno<<endl;
					}
				break;

				case ENDLINE:
				break;

				default:
                    FoundError(SYNTAX_ERROR,lineno,"语法错误!");
    				//cout<<"Line Error - "<<lineno<<endl;
			}
		}
	}

    // 获取本次汇编的字节数
    TotalSize = CurrentAddress;
}