EDG C++ Kompyuteri Ochiq Manba Kodga Aylandi
EDG C/C++ kompyuteri ochiq manba kodga aylandi. Bu loyihada EDG front endi, uzoq muddatli konfiguratsiya va keng qamrovli hujjatlashtirish bilan ajralib turadi.

Yantra — bu C++ uchun yangi LALR(1) parser generatori boʻlib, lexer, parser va AST walkerlarni bir xil vosita orqali yaratadi. Bu vosita butun sintaksis daraxtini (AST) dastlab yaratadi, keyin uni topdan pastga qarab o'tadi. Bu yondashuv boshqa parser generatorlariga nisbatan bir nechta afzalliklarga ega.
Yantra butun sintaksis daraxtini (AST) dastlab yaratadi, keyin uni topdan pastga qarab o'tadi. Bu yondashuv boshqa parser generatorlaridan farqli oʻlaroq, semantik harakatlarni dastlabki parsdan keyin bajaradi. Bu esa grammatikalarni qoʻl bilan yaratilgan AST sinflari va ajratilgan o'tish bosqichlariga muhtoj boʻlmasligini anglatadi.
Yantra bir nechta walkerlarni bir xil grammatikadan yaratish imkonini beradi. Masalan, bir walker C++ kodini chiqarishi mumkin, ikkinchisi esa Java kodini chiqarishi mumkin. AST va walker sinflari avtomatik ravishda yaratiladi.
Yantra ning oddiy misoli quyidagicha:
start := expr;
expr := expr(a) PLUS expr(b)
%{
std::cout << "Adding" << std::endl;
%}
expr := NUMBER(N)
%{
std::cout << "Number: " << N.text << std::endl;
%}
NUMBER := "\\d+";
PLUS := "\\+";
WS := "\\s+"!;
Bu misolni "1 + 2 + 3" matniga qoʻllash natijasida quyidagilar chiqadi:
git clone git@github.com:TantrixAuto/yantra.git
cd yantra
mkdir build && cd build
cmake ..
cmake --build .
Adding Number: 1 Adding Number: 2 Number: 3
Bu natijada, tashqi "Adding", daraxtning ildizi, dastlabki chiqadi, undan keyin uning farzandlari chiqadi. Bu faqat butun daraxt mavjud boʻlganda mumkin.
start := stmts;
stmts := stmts stmt;
stmts := stmt;
stmt := ID;
ID := "[A-Za-z]+";
WS := "\s"!;
Yantra hali ham yosh (0.5.1, pre-1.0) va bir nechta cheklovlarga ega. Ushbu cheklovlar shu manzilda ro'yxatga olingan.
bin/ycc -c ascii -f hello.y -a
Yantra ning manba kodlari GitHub da mavjud. Feedback va savollarni xush kelibsiz.
# clang
clang++ --std=c++23 -o hello hello.cpp
# gcc
g++ --std=c++23 -o hello hello.cpp
# MSVC (cl.exe, from a Developer Command Prompt)
cl /std:c++23 /EHsc /nologo hello.cpp
Asl manba: github.com