状态转换表和语义操作表求救
状态转换表和语义操作表
小弟在复习中程是遇到这样一个问题
用一个语义识别字符串。将程序可能接受的字符按其作用分类,为记录程序的识别过程引入状态变量,并给所
可能的状态顺序编号,然后建立两个表,一个是状态转换表,反映在某个状态下遇某字符后程序应转入的新状
态。一个是语义操作表,反映在某状态下遇某类字符后程序应执行的识别语义动作。
引入状态变量status表示识别程序所处的状态
status=0时,处理字符列的前导空白字符类,
=1时,处理非空白字符后的空白字符类
=2时,处理非空白字符
=3时,遇到字符串结束符,识别过程结束
/*状态转换表*/
int statbl[][3]={{0,2,3}, //初始状态
{1,2,3}, //中间空白符状态
{1,2,3}}; //非空白符状态
/*语义操作表*/
void(* funtbl[][3])(char * *,char)={NULL,copyach,NULL},//copyach 复制一个非空白字符
{NULL,copybach,NULL},//copybach 复制一个空白符和一个非空白符
{NULL,copyach,NULL}};
提问:1状态转换表看不懂,例如初始状态为什么是0,2,3,后面两个状态为什么是一样
2 void(* funtbl[][3])(char * *,char)到底定义了一个数组还是定义了一个函数还是两个都定义了
怎么结合状态表看这个语义操作表。