83 lines · 2.0 KB · C
RawDownload
enum {			/* Lexer Tokens */	Twhite = 0,	Topen,	Tname,	Tclose,	Tequal,	Tendblk,	Tnulblk,	NumToks}; enum {			/* Parser states */	Slost	= 0,	Sopened	= 1,	Snamed	= 2,	Sattred	= 3,	Sequed	= 4,	Sendblk	= 5,	Sclosed	= 6,	NumStates }; enum {			/* Parser Actions */	Aerr	= 0,	Anop	= 1,	Aelem	= 2,	Apcdata	= 3,	Aattr	= 4,	Avalue	= 5,	Aup	= 6,	Adown	= 7,	Acheck	= 8,	NumActions}; static char *tokstr[] = {	/* lexer token names for debug */	[Twhite]	"white",	[Topen]		"open",	[Tname]		"name",		[Tclose]	"close",	[Tequal]	"equal",	[Tendblk]	"endblk",	[Tnulblk]	"nulblk"}; static char *stastr[] = {	/* parser state names for debug */	[Slost]		"lost",		[Sopened]	"opened",	[Snamed]	"named",	[Sattred]	"attred",	[Sequed]	"equed",	[Sendblk]	"endblk",	[Sclosed]	"closed",}; static char *actstr[] = {	/* parser action names for debug */	[Aerr]		"error",	[Anop]		"nop",	[Apcdata]	"pcdata",	[Aattr]		"attr",	[Avalue]	"value",	[Aelem]		"elem",	[Aup]		"up",		[Adown]		"down",	[Acheck]	"check"};  static int statab[7][7] = {	/* Parser state transition table *//* 			Twhite	Topen	Tname	Tclose	Tequal	Tendblk	Tnulblk */ 	[Slost]     {	Slost, 	Sopened,Slost, 	Slost, 	Slost, 	Slost,	Slost },	[Sopened]   {	0, 	0, 	Snamed,	0, 	0, 	0, 	0 },	[Snamed]    {	Snamed, 0, 	Sattred,Sendblk,0, 	Slost,	Slost },            	[Sattred]   {	Sattred, 0, 	0, 	0, 	Sequed, 0, 	0 },	[Sequed]    {	Sequed, 0, 	Snamed,	0, 	0, 	0, 	0 },	[Sendblk]   {	0, 	0, 	Sclosed,0, 	0, 	0, 	0 },	[Sclosed]   {	0,	0,	0,	Slost,	0,	0,	0 },          }; static int acttab[7][7] = {	/* Parser action table *//* 			Twhite	Topen	Tname	Tclose	Tequal	Tendblk	Tnulblk */         	[Slost]     {	Apcdata, Anop, 	Apcdata, Apcdata, Apcdata, Aup,	Apcdata },	[Sopened]   {	0, 	0, 	Aelem,	0, 	0, 	0, 	0 },	[Snamed]    {	Anop,	0, 	Aattr,	Adown,	0, 	Anop,	Anop },            	[Sattred]   {	Anop, 	0, 	0, 	0, 	Anop,	0, 	0 },	[Sequed]    {	Anop, 	0, 	Avalue,	0, 	0, 	0, 	0 },	[Sendblk]   {	0, 	0, 	Acheck, 0, 	0, 	0, 	0 },	[Sclosed]   {	0,	0,	0,	Anop,	0,	0,	0 },          };