저는 사용자가 C++로 작성된 알고리즘을 검증하도록 정의한 프로그램의 공식 검증 소프트웨어로 작업하고 있습니다. 주제의 세부 사항에 지나치게 집중하지 않고 가능한 한 명확하게 표현하려고 노력할 것입니다.C++ 문 토큰 화
사용자가 양식의 뭔가를 입력하는 경우 :
int foo ([arg1,...,argN]) {
if (T_CONDITION) {
T_EXEC;
}
else {
T_EXEC';
}
}
가 그럼 난 T_CONDITION
을하고 싶지을 모두 T_EXEC
및 T_EXEC'
, T_CONDITION
전체 상태이며 T_EXEC
은 문장 그있는 형태 Parts = [ COND => T_CONDITION, EXEC => [ T_EXEC, T_EXEC' ] ]
에 조건이 참이면 프로그램이 실행되고 프로그램이 else
문으로 들어가면 T_EXEC'
이 실행됩니다. 나는 이것을 "토큰 화기"라고하고 파서의 기능이라고 생각하지만, 나는 확실하지 않다.. 문제는 내가 파서에 대해 아무것도 모른다는 것이다. 문제는 조건과 실행이 어디서 시작되고 끝나는 지 모르겠다. 그렇다면 문자열 연산을 처리 할 수 없다.
일단 내가 T_CONDITION을 갖게되면, 몇 가지 원자 논리 수식을 얻으려면 그런 식으로 분해해야합니다. 뭔가 같은 :
T_CONDITION = ((A OR N) OR (B AND C) OR (D AND (E OR F)))
가 그럼 난
CONDITION_PARTS = [ [ A ], [ N ], [ B , C ], [ D, [ [ E ], [ F ] ] ] ]
을 얻으려면 이것이다 : 나는
A or B
를 얻을 수 있다면, 나는
PART = [[A],[B]]
이 필요하고 난 다음
PART = [A,B]
A and B
을 얻을합니다. 그러나 조건의 어느 부분이 각 닫는 괄호에 속하는지 어떻게 알 수 있습니까?
이것이 가능합니까?, 어떤 도구를 사용해야합니까?, 이에 대한 가이드가 있습니까?
[Clang tooling] (http://clang.llvm.org/docs/Tooling.html) 휠을 다시 발명하지 마십시오. – Angew
이것은 오프 사이트 리소스 (오프 토픽)에 대한 요청이 아닙니다. 이것은 도구의 ** category ** 이름이 ** 어떻게 ** 객관적인 답을 가지고 있는지 물어 보는 것입니다. 질문에 이미 잠재적 인 (그러나 틀린) ansswer 인 "tokenizer"가 있기 때문에이 내용을 볼 수 있습니다. – MSalters