C Language (مسودة) اقتراح تمكين وظائف عامة وأنواع حدودية في C ؛ النموذج الأولي المتاح هنا.
Psyche-C هي واجهة مترجم للغة C. تم تصميمه كمكتبة ، مع التركيز على تنفيذ أدوات التحليل الثابت لبرامج C ، دون الحاجة إلى فهم إعداد البناء الخاص بهم. Bellow هي الخصائص الرئيسية للنفس-C:
struct المفقودة ، union ، enum ، typedef (بسبب فشل #include ).واجهة برمجة تطبيقات Psyche-C الأصلية موجودة في C ++ ، ولكن يتم التخطيط لواجهة برمجة التطبيقات للغات الأخرى.
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 ، المجلد 42 ، العدد 3 ، المادة رقم 15 ، ديسمبر 2020.
استنتاج الدلالات الثابتة لبرامج C غير المكتملة
وقائع ACM على لغات البرمجة ، المجلد 2 ، العدد Popl ، يناير 2018 ، المادة رقم 29.
التي تستخدم Psyche-C:
Slade: نموذج لغة صغير محمول من أجل التجميع الأمثل
وقائع الندوة الدولية IEEE/ACM حول توليد الكود والتحسين - CGO ، 2024.
Anghabench: جناح مع مليون معايير C قابلة للتجميع لخفض حجم الرمز
وقائع الندوة الدولية IEEE/ACM حول توليد الكود والتحسين - CGO ، 2021.
توليد المدخلات الداخلية للمصفوفات في لغات الذاكرة غير الآمنة
وقائع ندوة IEEE/ACM الدولية حول توليد الكود والتحسين - CGO ، فبراير 2019 ، ص. 136-148.
التعليق التوضيحي التلقائي للمهام في الكود المنظم
وقائع المؤتمر الدولي حول البنية المتوازية وتقنيات التجميع - اتفاق ، نوفمبر 2018 ، المادة رقم 31.