forked from mackyle/sqlite
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Add a simple test case for Lemon. Always include assert.h in the
Lemon-generated parser.
- Loading branch information
D. Richard Hipp
committed
Nov 27, 2018
1 parent
6c7251e
commit 5d9f753
Showing
3 changed files
with
79 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,75 @@ | ||
// A test case for the LEMON parser generator. Run as follows: | ||
// | ||
// lemon lemon-test01.y && gcc -g lemon-test01.c && ./a.out | ||
// | ||
%token_prefix TK_ | ||
%token_type int | ||
%default_type int | ||
%include { | ||
static int nSyntaxError = 0; | ||
static int nAccept = 0; | ||
static int nFailure = 0; | ||
} | ||
|
||
all ::= A B. | ||
all ::= error B. | ||
|
||
%syntax_error { | ||
nSyntaxError++; | ||
} | ||
%parse_accept { | ||
nAccept++; | ||
} | ||
%parse_failure { | ||
nFailure++; | ||
} | ||
%code { | ||
#include <assert.h> | ||
#include "lemon-test01.h" | ||
static int nTest = 0; | ||
static int nErr = 0; | ||
static int testCase(int testId, int shouldBe, int actual){ | ||
nTest++; | ||
if( shouldBe==actual ){ | ||
printf("test %d: ok\n", testId); | ||
}else{ | ||
printf("test %d: got %d, expected %d\n", testId, actual, shouldBe); | ||
nErr++; | ||
} | ||
} | ||
int main(int argc, char **argv){ | ||
yyParser xp; | ||
ParseInit(&xp); | ||
Parse(&xp, TK_A, 0); | ||
Parse(&xp, TK_B, 0); | ||
Parse(&xp, 0, 0); | ||
ParseFinalize(&xp); | ||
testCase(100, 0, nSyntaxError); | ||
testCase(110, 1, nAccept); | ||
testCase(120, 0, nFailure); | ||
nSyntaxError = nAccept = nFailure = 0; | ||
ParseInit(&xp); | ||
Parse(&xp, TK_B, 0); | ||
Parse(&xp, TK_B, 0); | ||
Parse(&xp, 0, 0); | ||
ParseFinalize(&xp); | ||
testCase(200, 1, nSyntaxError); | ||
testCase(210, 1, nAccept); | ||
testCase(220, 0, nFailure); | ||
nSyntaxError = nAccept = nFailure = 0; | ||
ParseInit(&xp); | ||
Parse(&xp, TK_A, 0); | ||
Parse(&xp, TK_A, 0); | ||
Parse(&xp, 0, 0); | ||
ParseFinalize(&xp); | ||
testCase(200, 1, nSyntaxError); | ||
testCase(210, 0, nAccept); | ||
testCase(220, 0, nFailure); | ||
if( nErr==0 ){ | ||
printf("%d tests pass\n", nTest); | ||
}else{ | ||
printf("%d errors out %d tests\n", nErr, nTest); | ||
} | ||
return nErr; | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters