이것은 SQLite의 레몬 파서에서 잠재적 인 버그가 아니라 파서가 어떻게 줄 었는지에 대한 오해 일 수 있습니다. 나는 데이터베이스 입력 파일을위한 간단한 문법을 실험 해왔다. 데이터베이스는 적어도 하나의 엔트리 세트 목록, "명령"또는 "맵"또는 ...으로 구성됩니다.집합에 단 하나의 항목 만있는 경우 레몬 파서 어설 션 오류가 발생했습니다.
다음은 작동하지 않는 문법입니다 - 항목 세트를 작성하기 시작했습니다. 나는이는 "명령"입니다 :
database ::= entrylist.
entrylist ::= entrylist entryset.
entrylist ::= entryset.
entryset ::= command.
/* Commands are in the form %command [arguments] \n */
command ::= CMDNAME cmdargs EOL.
cmdargs ::= cmdargs cmdarg.
cmdargs ::= .
cmdarg ::= INTEGER.
cmdarg ::= TEXT.
난 그냥 토큰에 공급하는 테스트 프로그램이 실행하면 내가 얻을 :
$ test
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 513
나는 entryset에게 추가로 다른 줄 경우
을entryset ::= command.
entryset ::= map.
...
map ::= MAPNAME EOL.
모든 것이 예상대로 작동합니다. 나는 아마 당신이 a = b와 b :: = c 상황을 만들 수 없다고 생각한다. b :: = c |가 있어야합니다. 적어도. 이것이 내 실수인지 이해하고 싶습니다. SQLite는 메일 링리스트에 기록
테스트 프로그램의 출처를 제공 할 수 있습니까? –
사과 - SQLite 사용자 메일 링리스트에 버그를 기록했습니다 (http://www.mail-archive.com/[email protected]/msg99716.html). – carveone