当前位置:七道奇文章资讯编程技术VC/C++编程
日期:2011-03-22 13:54:00  来源:本站整理

肯定有穷自动机解析内核[VC/C++编程]

赞助商链接



  本文“肯定有穷自动机解析内核[VC/C++编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:

前些时刻学习编译原理,同时也为 DocWizard 做词法解析技术的预备,于是便想出了一种词法解析内核.这个解析内核可以在不改变代码的情形下解析差别的 DFA.

解析器的基本构造

如图一所示,脚本 Scripts 进入解析内核 ParsingKernel,解析内核按照 DFA 法则作词法解析,生成单词序列 WordsSequence.

图一

此中的 DFA Rules 其实就是 DFA 中的状况转换法则.解析内核在工作时需求查阅法则表.只要改换这个法则表,便可以解析差别的词法.

工作原理

例子程序中的 CStateChangeRule 代表一条转换法则.它由以下三个数据构成:

当前状况编号:int nCurState

下一个状况编号:int nNextState

需求匹配的字符:CHAR_RANGE route[ROUTE_BUF_LEN]

  内核在刚开始工作的时刻,设定当前状况为 0,然后对输入字符串 pszLine 举行扫描.Route()函数按照当前需求处理的字符和当前状况,计算出下一个状况.Accept()函数负责接纳一个单词.

void CAjaxParserDlg::OnParse()
{
  char *pszLine = " void CAjaxParserDlg::OnParse() +12.3 12.3 -12.3 -.12 +.12 .12 +12. -12. 12. .023 ";
  int i=0, nLen, nState=0, nNext=-1, nStart;
  nLen = strlen(pszLine);
  while(i<nLen)
  {
    if(nState==0)
    {
      nStart = i;
    }
    nNext = Route(nState, *(pszLine+i));
    Accept(nState, nNext, pszLine+nStart, i-nStart);
    if(!(nState!=0 && nNext==0))
      i++;
    nState = nNext;
  }
  Accept(nState, 0, pszLine+nStart, i-nStart);
}


  以上是“肯定有穷自动机解析内核[VC/C++编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:

  • 肯定有穷自动机解析内核
  • 本文地址: 与您的QQ/BBS好友分享!
    • 好的评价 如果您觉得此文章好,就请您
        0%(0)
    • 差的评价 如果您觉得此文章差,就请您
        0%(0)

    文章评论评论内容只代表网友观点,与本站立场无关!

       评论摘要(共 0 条,得分 0 分,平均 0 分) 查看完整评论
    Copyright © 2020-2022 www.xiamiku.com. All Rights Reserved .