]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
Add a simple test case for Lemon. Always include assert.h in the
authordrh <drh@noemail.net>
Tue, 27 Nov 2018 14:34:33 +0000 (14:34 +0000)
committerdrh <drh@noemail.net>
Tue, 27 Nov 2018 14:34:33 +0000 (14:34 +0000)
Lemon-generated parser.

FossilOrigin-Name: 9c9c46dcbe92aeabe3d5675bb69681b6dfd53798bc67e6a2ceba67ed3c4fb0af

doc/lemon.html
manifest
manifest.uuid
test/lemon-test01.y [new file with mode: 0644]
tool/lempar.c

index 4f0849e6d6e10ee601a2b8e2998230575fa43686..056ae5f5b25f937e5eb6b4510d012f863c593e08 100644 (file)
@@ -777,6 +777,9 @@ For example:</p>
 <p>This might be needed, for example, if some of the C actions in the
 grammar call functions that are prototyped in unistd.h.</p>
 
+<p>Use the <tt><a href="#pcode">%code</a></tt> directive to add code to
+the end of the generated parser.</p>
+
 <a name='pleft'></a>
 <h4>The <tt>%left</tt> directive</h4>
 
index 657aacc736059f77d993029b0a662c1ed74c3f79..7f6626f4a76958c2b78d3c8a6283b967b31ec07a 100644 (file)
--- a/manifest
+++ b/manifest
@@ -1,5 +1,5 @@
-C Fix\sto\sthe\serror\shandling\slogic\sin\sthe\sLemon\sparser\stemplate.\s\sThis\sdoes\nnot\saffect\sSQLite\ssince\sSQLite\sdoes\snot\suse\sthat\spart\sof\sthe\sLemon\sparser\ntemplate.
-D 2018-11-27T14:03:11.052
+C Add\sa\ssimple\stest\scase\sfor\sLemon.\s\sAlways\sinclude\sassert.h\sin\sthe\nLemon-generated\sparser.
+D 2018-11-27T14:34:33.784
 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
 F Makefile.in 15f0851eb3754e37de848d5f8ab24146cf677b44ac38353a2c23e39c999aa422
@@ -37,7 +37,7 @@ F configure 5811ffcd4866902d1706dcf8e0527f89165ec52859659942c9649bb1d3e4cc7b x
 F configure.ac 3552d3aecade98a9d4b64bceb48ffb7726cbc85902efde956812942f060fbd0a
 F contrib/sqlitecon.tcl 210a913ad63f9f991070821e599d600bd913e0ad
 F doc/F2FS.txt c1d4a0ae9711cfe0e1d8b019d154f1c29e0d3abfe820787ba1e9ed7691160fcd
-F doc/lemon.html ac63db056bce24b7368e29319cd1a7eb5f1798cc85922d96a80b6c3a4ff9f51b
+F doc/lemon.html 24956ab2995e55fe171e55bdd04f22b553957dc8bb43501dbb9311e30187e0d3
 F doc/pager-invariants.txt 27fed9a70ddad2088750c4a2b493b63853da2710
 F doc/vfs-shm.txt e101f27ea02a8387ce46a05be2b1a902a021d37a
 F ext/README.md fd5f78013b0a2bc6f0067afb19e6ad040e89a10179b4f6f03eee58fac5f169bd
@@ -1061,6 +1061,7 @@ F test/keyword1.test 37ef6bba5d2ed5b07ecdd6810571de2956599dff
 F test/kvtest.c 94da54bb66aae7a54e47cf7e4ea4acecc0f217560f79ad3abfcc0361d6d557ba
 F test/lastinsert.test 42e948fd6442f07d60acbd15d33fb86473e0ef63
 F test/laststmtchanges.test ae613f53819206b3222771828d024154d51db200
+F test/lemon-test01.y 58b764610fd934e189ffbb0bbfa33d171b9cb06019b55bdc04d090d6767e11d7
 F test/like.test 11cfd7d4ef8625389df9efc46735ff0b0b41d5e62047ef0f3bc24c380d28a7a6
 F test/like2.test 3b2ee13149ba4a8a60b59756f4e5d345573852da
 F test/like3.test 430691e6057e11a59e934be74c06b85605b80061d45af5714d52886a811efeb7
@@ -1698,7 +1699,7 @@ F tool/genfkey.test b6afd7b825d797a1e1274f519ab5695373552ecad5cd373530c63533638a
 F tool/getlock.c f4c39b651370156cae979501a7b156bdba50e7ce
 F tool/kvtest-speed.sh 4761a9c4b3530907562314d7757995787f7aef8f
 F tool/lemon.c 60d1e1eb0f7ebae709f68f1472d77fbf291c5345cd98ff417219da7e74fd09e9
-F tool/lempar.c 7af7e9fffbbbb7a30e60d0f1692ba2730ac23847705c3b09eefd68c010b5755b
+F tool/lempar.c 452f12d40229847634a160e5666b6c4ec4392fd81941c3443861b48d497054cc
 F tool/libvers.c caafc3b689638a1d88d44bc5f526c2278760d9b9
 F tool/loadfts.c c3c64e4d5e90e8ba41159232c2189dba4be7b862
 F tool/logest.c 11346aa019e2e77a00902aa7d0cabd27bd2e8cca
@@ -1778,7 +1779,7 @@ F vsixtest/vsixtest.tcl 6a9a6ab600c25a91a7acc6293828957a386a8a93
 F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc
 F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e
 F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0
-P 6f4b0d0494446d46ac22b17650a25b025995cc545cac8fbc4776cf9dd388bcd8
-R 342594cf6238112e53e9e7ed351aeaf5
+P c6dfc59eb12a02d35b708b5d94239377c79f688fa572f72bad51a157b1bf599c
+R 2339dd4ac4a954f22713351e7a3601c7
 U drh
-Z 367fb09364f4bfdf7228e4b27799d518
+Z 4edb575ad89b443e91df3129c4c760e1
index 8786169df10e772b85cb0e219f4402ef78af235d..bb86762c48044b6b3c22ad75941ed456eff134cb 100644 (file)
@@ -1 +1 @@
-c6dfc59eb12a02d35b708b5d94239377c79f688fa572f72bad51a157b1bf599c
\ No newline at end of file
+9c9c46dcbe92aeabe3d5675bb69681b6dfd53798bc67e6a2ceba67ed3c4fb0af
\ No newline at end of file
diff --git a/test/lemon-test01.y b/test/lemon-test01.y
new file mode 100644 (file)
index 0000000..0fd514f
--- /dev/null
@@ -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;
+  }
+}
index 6a39603be7eecb2c8ef1fbf0d520e12c8abfa265..325b0e541834fb686f96e60e65836eb5ac19c9c9 100644 (file)
@@ -23,6 +23,7 @@
 ** input grammar file:
 */
 #include <stdio.h>
+#include <assert.h>
 /************ Begin %include sections from the grammar ************************/
 %%
 /**************** End of %include directives **********************************/