Z3 4.1을 사용하고 있으며 프로그램에서 smt lib2 형식 입력을 구문 분석하려고합니다.Z3_parse_smtlib2_file을 사용하여 Z3에 제공된 예제 파일을 구문 분석 할 때 구문 분석 오류가 발생했습니다.
그래서 먼저 Z3_parse_smtlib2_file
을 사용하여 Z3 (Z3-4.1/examples/smtlib 폴더 아래에 있음)에 제공된 예제를 구문 분석하십시오. 그러나 많은 구문 분석 오류를 발견하고 즉시 내 프로그램이 종료됩니다. 입력 형식이 맞아야한다고 생각합니다. 다음
(set-option :auto-config true)
(set-option :produce-models true)
(declare-const a Int)
(declare-fun f (Int Bool) Int)
(assert (> a 10))
(assert (< (f a true) 100))
(check-sat)
결과 :
smt2parser_example
(error "line 1 column 26: error setting ':auto-config', option value cannot be modified after initialization")
Error code: 4
BUG: incorrect use of Z3.
이 API는 다음과 같이 호출 :
fs = Z3_parse_smtlib2_file(ctx, fname, 0, 0, 0, 0, 0, 0);
어디에서 다음 코드를 사용하여 Z3.2.smt2을 구문 분석하려고 문제는 무엇입니까? 입력 파일은 OK 여야합니다. Z3_parse_smtlib2_file의 인수에 문제가 있습니까?
Christoph, 당신 말이 맞습니다. 파서 API는 "(set-option : auto-config true)"행을 제거하면 잘 작동합니다. 그러나 나는 새로운 문제를 겪는다. Z3_parse_smtlib2_file은 입력 파일의 끝에 "(get-model)"줄을 추가 할 때 오류가 발생합니다. 오류 메시지 : smt2parser_example (오류 "줄 9 열 10 : 모델을 사용할 수 없습니다.") 오류 코드 : 4 BUG : 잘못된 Z3 사용. –
사실 저도 마찬가지입니다. : produce-models 옵션은 여기에서 무시됩니다. 컨텍스트 생성시 설정되어야합니다. 일반적으로 구문 분석 함수 Z3_parse_smtlib *는 주로 구문 분석 구문을위한 것입니다. SMT2 스크립트는 Z3 바이너리로 전달하여 명령 행에서 직접 실행할 수 있습니다. –