int Grammar::GetGoTo(int iStatus, char cChar) { if (pTable == 0) return -1; int iPos; if ((iPos = Vn.FindPos(cChar)) != -1) iPos += (iStatus * (nVt + 1 + nVn) + nVt + 1); else assert(false); return pTable[iPos].one; }代码详细解释
时间: 2023-06-25 14:07:02 浏览: 115
smtlibv2-grammar:ANTLR SMT-LIB v2语法
这是一个语法分析器中的函数,用于获取某个状态和某个字符(终结符或非终结符)对应的转移动作(GoTo)。
参数说明:
- iStatus:当前状态
- cChar:输入字符
返回值:
- 转移到的状态编号(如果返回-1,表示出错)
函数实现:
首先判断语法分析表是否存在,如果不存在则返回错误(-1)。
然后查找输入字符在非终结符集合中的位置(如果是终结符则返回-1),如果找到了,则计算在语法分析表中的偏移量 iPos,其中:
- nVt:终结符数目
- nVn:非终结符数目
最后返回语法分析表中偏移量为 iPos 的转移动作(即转移到的状态编号),如果计算出的 iPos 不存在或者出错,则会触发断言(assert)。
阅读全文