C 언어 (초안) 제안서를 활성화하는 제안서 및 C의 매개 변수 유형; 여기에서 프로토 타입을 사용할 수 있습니다.
Psyche-C는 C 언어의 컴파일러 프론트 엔드입니다. 빌드 설정에 대한 이해없이 C 프로그램의 정적 분석 도구를 구현하는 데 중점을 둔 라이브러리로 설계되었습니다. 벨로우는 Psyche-C의 주요 특성입니다.
struct , union , enum 및 typedef 의 선택적 유도 ( #include 고장으로 인해).Psyche-C의 기본 API는 C ++이지만 다른 언어의 API는 계획됩니다.
void analyse ( const SourceText& srcText, const FileInfo& fi)
{
ParseOptions parseOpts;
parseOpts. setAmbiguityMode (AmbiguityMode::DisambiguateAlgorithmically);
auto tree = SyntaxTree::parseText (srcText,
TextPreprocessingState::Preprocessed,
TextCompleteness::Fragment,
parseOpts,
fi. fileName ());
auto compilation = Compilation::create ( " code-analysis " );
compilation-> addSyntaxTree (tree. get ());
AnalysisVisitor analysis (tree. get (), compilation-> semanticModel (tree. get ()));
analysis. run (tree-> translationUnitRoot ());
}SyntaxVisitor::Action AnalysisVisitor::visitFunctionDefinition ( const FunctionDefinitionSyntax* node) override
{
const sym = semaModel-> declaredSymbol (node);
if (sym-> kind () == SymbolKind::Function) {
const FunctionSymbol* funSym = sym-> asFunction ();
// ...
}
return Action::Skip;
}
Psyche-C는 CNIPPET 드라이버와 함께 제공되며 C 스 니펫의 일반 파서로 사용할 수 있습니다. 예를 들어, CNIPPET 으로 아래 스 니펫을 컴파일하면 GCC 또는 Clang에서 볼 수있는 것과 유사한 진단이 표시됩니다.
void f ()
{
int ;
} ~ cnip test.c
test.c:4:4 error: declaration does not declare anything
int ;
^
Psyche-C는 선택적으로 (지금까지 원래 지점에서만 이용 가능)가 누락 된 유형의 C 스 니펫을 추론 할 수 있습니다. 예를 들어, 아래 스 니펫의 경우, PsychE-C는 편집 중에 T 에 대한 (컴파일 가능한) 선언을 유추 할 수 있습니다.
void f ()
{
T v = 0 ;
v -> value = 42 ;
v -> next = v ;
} typedef struct TYPE_2__ TYPE_1__ ;
struct TYPE_2__
{
int value ;
struct TYPE_2__ * next ;
} ;
typedef TYPE_1__ * T ;이 기능을 사용하고 싶을 수도 있습니다.
Haskell에 작성된 유형 추론을 제외하고 Psyche-C는 C ++ 17로 작성됩니다. CNIPPET은 Python 3으로 작성되었습니다.
구축하려면 :
cmake CMakeLists.txt && make -j 4
테스트를 실행하려면 :
./test-suite
Psyche-C 자체 :
C에 대한 수용 추론 : 불완전한 프로그램의 정적 분석에 대한 응용
프로그래밍 언어 및 시스템에 대한 ACM 트랜잭션 - Toplas , Volume 42, Issue 3, 기사 번호 15, 2020 년 12 월.
불완전한 C 프로그램에 대한 정적 의미론의 추론
프로그래밍 언어에 대한 ACM의 절차, Volume 2, Issue Popl , 2018 년 1 월, 기사 29 조.
Psyche-C를 사용합니다.
SLADE : 최적화 된 어셈블리를위한 휴대용 소형 언어 모델 디 컴파일러
코드 생성 및 최적화에 관한 IEEE/ACM 국제 심포지엄의 절차 - CGO , 2024.
Anghabench : 코드 크기 감소를위한 백만 백만 편집 가능한 C 벤치 마크가있는 스위트
코드 생성 및 최적화에 관한 IEEE/ACM 국제 심포지엄의 절차 - CGO , 2021.
메모리-안전 언어의 배열에 대한 내부 입력 생성
코드 생성 및 최적화에 관한 IEEE/ACM 국제 심포지엄의 절차 - CGO , 2019 년 2 월, p. 136-148.
구조화 된 코드에서 작업의 자동 주석
병렬 아키텍처 및 편집 기술에 관한 국제 회의의 절차 - PACT , 2018 년 11 월, 제 31 조.