I've been experimenting with some simple rules as I get used to the Lemon
parser. This very simple parser file works correctly. A database consists
of an entrylist which consists of any number of commands:

    database ::= entrylist. { printf("Constructed the root\n"); }

    entrylist ::= command.
    entrylist ::= entrylist command.

    command ::= CMDNAME INTEGER TEXT EOL. { printf("Reducing to command
state\n"); }

For reference, I'm feeding the parser with:
    Parse(pParser, CMDNAME, 0);
    Parse(pParser, INTEGER, 0);
    Parse(pParser, TEXT, 0);
    Parse(pParser, EOL, 0);

However, if I enhance the command slightly to accept any number of optional
arguments:

    database ::= entrylist. { printf("Constructed the root\n"); }

    entrylist ::= command.
    entrylist ::= entrylist command.

    command ::= CMDNAME cmdargs EOL. { printf("Reducing to command
state\n"); }
    cmdargs ::= .
    cmdargs ::= cmdargs cmdarg.

    cmdarg ::= INTEGER.
    cmdarg ::= TEXT.

This causes an assertion failure:

> test.exe
Debug: Input 'CMDNAME'
Debug: Shift 'CMDNAME', go to state 3
Debug: Return. Stack=[CMDNAME]
Debug: Input 'INTEGER'
Assertion failed: stateno <= YY_SHIFT_COUNT, file testpar.c, line 512

I'm trying to figure out if this is a bug or something I'm just not
understanding correctly.

Thanks, Conor.
_______________________________________________
sqlite-users mailing list
sqlite-users@mailinglists.sqlite.org
http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users

Reply via email to