WEB开发网
开发学院软件开发VC PL/0语言词法及语法分析系统的设计与实现 阅读

PL/0语言词法及语法分析系统的设计与实现

 2007-03-15 21:55:30 来源:WEB开发网   
核心提示: DWORD dwThreadID;::CreateThread(0,0,PL/0语言词法及语法分析系统的设计与实现(3),CompileThread,this,&bytesRead,NULL))break;strOut+=buffer;m_pwndOutBar->SetColorRi
DWORD dwThreadID;
::CreateThread(0,0,CompileThread,this,0,&dwThreadID);//创建进程

进程创建后调用进程函数,

//进程函数

DWORD WINAPI CompileThread(LPVOID pParam)
{
  CCompileSysView *pView=(CCompileSysView*)pParam;
  pView->GetCompileResult();
  return 0;
}   
进程函数调用类的自身函数GetCompileResult();得到分析核心的输出结果,这个函数的实现如下:void CCompileSysView::GetCompileResult()
{
SECURITY_ATTRIBUTES sa;
  HANDLE hRead,hWrite;
  CString strFile;
  CString strOut;
  
  strFile.Format("..\pl\pl.exe ");//指定分析核心程序的路径
  
     //当前文件作为参数传给分析核心程序,防止这个文件名中含有空格,故用双引号""将文件名括住
  strFile=strFile+(char)34+m_szCurFile+(char)34;
  sa。nLength=sizeof(SECURITY_ATTRIBUTES);
  sa。lpSecurityDescriptor=NULL;
  sa。bInheritHandle=TRUE;
  if(!CreatePipe(&hRead,&hWrite,&sa,0))//创建管道进行通信
  {
    MessageBox("Error On CreatePipe()");
    return;
  }
  STARTUPINFO si;
  PROCESS_INFORMATION pi;
  si。cb=sizeof(STARTUPINFO);
  GetStartupInfo(&si);
  si。hStdError=hWrite;
  si。hStdOutput=hWrite;//输出重定向到文件
  si。wShowWindow=SW_HIDE;
  si。dwFlags=STARTF_USESHOWWINDOW | STARTF_USESTDHANDLES;
  
     //创建进程启动分析核心程序
  if(!CreateProcess(NULL,(LPSTR)(LPCTSTR)strFile,NULL,NULL,TRUE,NULL,NULL,NULL,&si,&pi))
  {
    MessageBox("Error on CreateProcess()");
    return;
  }
  CloseHandle(hWrite);
  
  char buffer[4096]={0};
  DWORD bytesRead;
  while(true)
  {
    if(!ReadFile(hRead,buffer,4095,&bytesRead,NULL))
      break;
    strOut+=buffer;
    m_pwndOutBar->SetColorRichEditText(strOut);//将输出结果显示出来
    Sleep(500);
  }
}   
  这样就完成了整个分析系统的设计与实现。下面我们来看看整个系统是怎样运行的。我们先来看看这个系统的运行界面:

上一页  1 2 3 4  下一页

Tags:PL 词法

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接