2013-11-14 3 views
0

자바 부울 표현식을 Z3이 이해할 수있는 형식으로 변환하는 데 문제가 있습니다. 프로젝트의 요구 사항 중 일부로 인해 표현을 평가하는 데 다른 도구를 사용할 수 없습니다. 표현식에는 식별자 만 사용할 수 있고 함수 나 복잡한 유형은 사용할 수 없습니다. 나는 생각했다자바 부울 표현식을 SMTlib으로 변환

가능성은 다음과 같습니다

  • 는 살짝 데친 또는 유사한 도구를 사용하여 파서를 구축 할 수 있습니다. 이것에 대한 단점은 연산자를 SMT와 동등한 것으로 변환 한 다음에 괄호를 추가 한 후에 이동해야한다는 것입니다. 따라서이 솔루션과 AST 처리와 관련된 작업이 나에게 과로한 것처럼 보입니다. 또한 중첩 된 레벨에 모두 맞을 수있는 문법을 정의하는 것이 다소 복잡한 것으로 나타났습니다.

  • 토큰을 가져오고 Shunting-yard algorithm과 유사한 알고리즘으로 재정렬하려면 렉서 또는 다른 종류의 도구를 사용하십시오. 이 경우 입력에 문제가 발생하지 않도록 모든 괄호를 사용해야 할 수도 있습니다.

  • 표현식을 구문 분석하여 편집 할 수있는 라이브러리를 사용하십시오. 지금까지는 표현식을 평가할 수있는 도구 외에는 아무것도 찾지 못했습니다.

  • 표기법을 직접 변환 할 수있는 것을 사용하십시오. 나는 찾고 있었지만 나는 그것을 발견 할 수 없었다. 그것은 내 하루를 만들 것입니다.

나는 비슷한 질문을 찾았지만 아무 것도 발견하지 못했습니다. 나는 당신이 가질 수있는 어떤 아이디어에 감사 할 것입니다. 미리 감사드립니다!

답변

1

TXL을 고려하셨습니까? TXL은 파일 구문 분석, 추상 구문 트리에 변환 적용 및 결과 인쇄를 지원합니다. 사용하기 쉽고 많은 문서와 문법 (Java 포함)이 큰 library입니다.

+0

감사합니다! 나는 그 프로젝트에 관해 몰랐다. 그러나 나는 그것이 내가 필요로하는 것을 정확하게한다라고 생각한다. – sui

1

무료 소프트웨어 도구 bc2ncf을 사용하면 부울 식을 SMT가 아닌 CNF (결합 표준 형식)으로 변환 할 수 있습니다. Z3CNF을 입력하고 포함 된 적합성 문제를 해결할 수 있습니다.

Z3의 명령 줄 구문이 변경되는 경향이 있습니다. 얼마 전에 다음과 같이 사용했습니다.

bc2cnf.exe -v test.bc.txt test.dimacs.txt 

z3.exe /dimacs /v:1 test.dimacs.txt > test.solution.txt