Optimizations to the LEMON parser template. (CVS 1143)

FossilOrigin-Name: 06db29df8f0c1cd29e696537e622f0c5456056f5
This commit is contained in:
drh 2003-12-22 14:53:19 +00:00
parent 2fd2fa0851
commit 3ddfdf7ac6
3 changed files with 32 additions and 31 deletions

View File

@ -1,5 +1,5 @@
C Fix\ssome\sminor\sproblems\swith\sthe\snew\stest4.c\smodule\sused\sfor\sdoing\sthread\ntesting.\s(CVS\s1142)
D 2003-12-20T04:00:53
C Optimizations\sto\sthe\sLEMON\sparser\stemplate.\s(CVS\s1143)
D 2003-12-22T14:53:20
F Makefile.in 0515ff9218ad8d5a8f6220f0494b8ef94c67013b
F Makefile.linux-gcc b86a99c493a5bfb402d1d9178dcdc4bd4b32f906
F README f1de682fbbd94899d50aca13d387d1b3fd3be2dd
@ -144,7 +144,7 @@ F test/view.test 1ee12c6f8f4791a2c0655120d5562a49400cfe53
F test/where.test cb3a2ed062ce4b5f08aff2d08027c6a46d68c47b
F tool/diffdb.c 7524b1b5df217c20cd0431f6789851a4e0cb191b
F tool/lemon.c e37dcb5b8cdb16f4ac98338134bf8d8cd28e399f
F tool/lempar.c 686d85ff4b11a790f52dd033612e6890a2a10f3c
F tool/lempar.c 0b5e7a58634e0d448929b8e85f7981c2aa708d57
F tool/memleak.awk 16ef9493dcd36146f806e75148f4bb0201a123ec
F tool/memleak2.awk 9cc20c8e8f3c675efac71ea0721ee6874a1566e8
F tool/mkopts.tcl 66ac10d240cc6e86abd37dc908d50382f84ff46e x
@ -179,7 +179,7 @@ F www/speed.tcl 2f6b1155b99d39adb185f900456d1d592c4832b3
F www/sqlite.tcl 3c83b08cf9f18aa2d69453ff441a36c40e431604
F www/tclsqlite.tcl b9271d44dcf147a93c98f8ecf28c927307abd6da
F www/vdbe.tcl 9b9095d4495f37697fd1935d10e14c6015e80aa1
P 1e9689672c94e5ab89f07099c1402e157c8b02c1
R a1fd48855a547ffbdcf831309e005755
P 952924084aac4a7fa84a7cb7aaac869d35db1896
R 7ab32ac7ee9a5574dd03ea51da394001
U drh
Z d63babfeaee4d16e2d4a389b00f50ce6
Z bb57c31f5dd8de3fdff4945aa0883461

View File

@ -1 +1 @@
952924084aac4a7fa84a7cb7aaac869d35db1896
06db29df8f0c1cd29e696537e622f0c5456056f5

View File

@ -151,7 +151,6 @@ typedef struct yyStackEntry yyStackEntry;
struct yyParser {
int yyidx; /* Index of top element in stack */
int yyerrcnt; /* Shifts left before out of the error */
yyStackEntry *yytop; /* Pointer to the top stack element */
ParseARG_SDECL /* A place to hold %extra_argument */
yyStackEntry yystack[YYSTACKDEPTH]; /* The parser's stack */
};
@ -274,19 +273,19 @@ static void yy_destructor(YYCODETYPE yymajor, YYMINORTYPE *yypminor){
*/
static int yy_pop_parser_stack(yyParser *pParser){
YYCODETYPE yymajor;
yyStackEntry *yytos = &pParser->yystack[pParser->yyidx];
if( pParser->yyidx<0 ) return 0;
#ifndef NDEBUG
if( yyTraceFILE && pParser->yyidx>=0 ){
fprintf(yyTraceFILE,"%sPopping %s\n",
yyTracePrompt,
yyTokenName[pParser->yytop->major]);
yyTokenName[yytos->major]);
}
#endif
yymajor = pParser->yytop->major;
yy_destructor( yymajor, &pParser->yytop->minor);
yymajor = yytos->major;
yy_destructor( yymajor, &yytos->minor);
pParser->yyidx--;
pParser->yytop--;
return yymajor;
}
@ -325,11 +324,12 @@ static int yy_find_shift_action(
int iLookAhead /* The look-ahead token */
){
int i;
int stateno = pParser->yystack[pParser->yyidx].stateno;
/* if( pParser->yyidx<0 ) return YY_NO_ACTION; */
i = yy_shift_ofst[pParser->yytop->stateno];
i = yy_shift_ofst[stateno];
if( i==YY_SHIFT_USE_DFLT ){
return yy_default[pParser->yytop->stateno];
return yy_default[stateno];
}
if( iLookAhead==YYNOCODE ){
return YY_NO_ACTION;
@ -349,7 +349,7 @@ static int yy_find_shift_action(
return yy_find_shift_action(pParser, iFallback);
}
#endif
return yy_default[pParser->yytop->stateno];
return yy_default[stateno];
}else{
return yy_action[i];
}
@ -368,17 +368,18 @@ static int yy_find_reduce_action(
int iLookAhead /* The look-ahead token */
){
int i;
int stateno = pParser->yystack[pParser->yyidx].stateno;
i = yy_reduce_ofst[pParser->yytop->stateno];
i = yy_reduce_ofst[stateno];
if( i==YY_REDUCE_USE_DFLT ){
return yy_default[pParser->yytop->stateno];
return yy_default[stateno];
}
if( iLookAhead==YYNOCODE ){
return YY_NO_ACTION;
}
i += iLookAhead;
if( i<0 || i>=YY_SZ_ACTTAB || yy_lookahead[i]!=iLookAhead ){
return yy_default[pParser->yytop->stateno];
return yy_default[stateno];
}else{
return yy_action[i];
}
@ -393,12 +394,11 @@ static void yy_shift(
int yyMajor, /* The major token to shift in */
YYMINORTYPE *yypMinor /* Pointer ot the minor token to shift in */
){
yyStackEntry *yytos;
yypParser->yyidx++;
yypParser->yytop++;
if( yypParser->yyidx>=YYSTACKDEPTH ){
ParseARG_FETCH;
yypParser->yyidx--;
yypParser->yytop--;
#ifndef NDEBUG
if( yyTraceFILE ){
fprintf(yyTraceFILE,"%sStack Overflow!\n",yyTracePrompt);
@ -411,9 +411,10 @@ static void yy_shift(
ParseARG_STORE; /* Suppress warning about unused %extra_argument var */
return;
}
yypParser->yytop->stateno = yyNewState;
yypParser->yytop->major = yyMajor;
yypParser->yytop->minor = *yypMinor;
yytos = &yypParser->yystack[yypParser->yyidx];
yytos->stateno = yyNewState;
yytos->major = yyMajor;
yytos->minor = *yypMinor;
#ifndef NDEBUG
if( yyTraceFILE && yypParser->yyidx>0 ){
int i;
@ -452,7 +453,7 @@ static void yy_reduce(
yyStackEntry *yymsp; /* The top of the parser's stack */
int yysize; /* Amount to pop the stack */
ParseARG_FETCH;
yymsp = yypParser->yytop;
yymsp = &yypParser->yystack[yypParser->yyidx];
#ifndef NDEBUG
if( yyTraceFILE && yyruleno>=0
&& yyruleno<sizeof(yyRuleName)/sizeof(yyRuleName[0]) ){
@ -475,7 +476,6 @@ static void yy_reduce(
yygoto = yyRuleInfo[yyruleno].lhs;
yysize = yyRuleInfo[yyruleno].nrhs;
yypParser->yyidx -= yysize;
yypParser->yytop -= yysize;
yyact = yy_find_reduce_action(yypParser,yygoto);
if( yyact < YYNSTATE ){
yy_shift(yypParser,yyact,yygoto,&yygotominor);
@ -573,9 +573,8 @@ void Parse(
if( yymajor==0 ) return;
yypParser->yyidx = 0;
yypParser->yyerrcnt = -1;
yypParser->yytop = &yypParser->yystack[0];
yypParser->yytop->stateno = 0;
yypParser->yytop->major = 0;
yypParser->yystack[0].stateno = 0;
yypParser->yystack[0].major = 0;
}
yyminorunion.yy0 = yyminor;
yyendofinput = (yymajor==0);
@ -600,6 +599,7 @@ void Parse(
}else if( yyact < YYNSTATE + YYNRULE ){
yy_reduce(yypParser,yyact-YYNSTATE);
}else if( yyact == YY_ERROR_ACTION ){
int yymx;
#ifndef NDEBUG
if( yyTraceFILE ){
fprintf(yyTraceFILE,"%sSyntax Error!\n",yyTracePrompt);
@ -628,7 +628,8 @@ void Parse(
if( yypParser->yyerrcnt<0 ){
yy_syntax_error(yypParser,yymajor,yyminorunion);
}
if( yypParser->yytop->major==YYERRORSYMBOL || yyerrorhit ){
yymx = yypParser->yystack[yypParser->yyidx].major;
if( yymx==YYERRORSYMBOL || yyerrorhit ){
#ifndef NDEBUG
if( yyTraceFILE ){
fprintf(yyTraceFILE,"%sDiscard input token %s\n",
@ -640,7 +641,7 @@ void Parse(
}else{
while(
yypParser->yyidx >= 0 &&
yypParser->yytop->major != YYERRORSYMBOL &&
yymx != YYERRORSYMBOL &&
(yyact = yy_find_shift_action(yypParser,YYERRORSYMBOL)) >= YYNSTATE
){
yy_pop_parser_stack(yypParser);
@ -649,7 +650,7 @@ void Parse(
yy_destructor(yymajor,&yyminorunion);
yy_parse_failed(yypParser);
yymajor = YYNOCODE;
}else if( yypParser->yytop->major!=YYERRORSYMBOL ){
}else if( yymx!=YYERRORSYMBOL ){
YYMINORTYPE u2;
u2.YYERRSYMDT = 0;
yy_shift(yypParser,yyact,YYERRORSYMBOL,&u2);