Skip to content

okmand/UNN-C-Style-Checker

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

20 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Telegram chat

https://t.me/joinchat/GRwjklbJOuYz6a2pY8SWeQ

Установка окружения

Windows 10

Вам потребуется установить WSL. Для этого нужно следовать инструкции.
Обратите внимание что нужно выбрать версию Ubuntu18
После установки запускаем Ubuntu 18.04 LTS у вас должен появиться терминал

Ubuntu18

Пользователям linux можно приступать к следующему шагу

Сборка LLVM & CLang

Находясь в терминале установите следующие зависимости:

sudo apt install git cmake 

Создайте папку для работы с курсом и перейдите в нее

mkdir ~/compiler-course && cd ~/compiler-course

Далее собираем LLVM вместе с Clang из исходников

git clone https://github.com/llvm/llvm-project
cd llvm-project/llvm/
mkdir build && cd build
cmake ../ -DCMAKE_INSTALL_PREFIX=install \
          -DLLVM_TARGETS_TO_BUILD=X86 \
          -DLLVM_ENABLE_PROJECTS=clang
make -j4
make install

Сборка может занять длительное время

Задача

После успешного построения LLVM & Clang можно приступать к выполнению задания.

Вернитесь в корневую папку курса:

cd ~/compiler-course

Для начала сделайте Fork текущего репозитория к себе в профиль. После этого копия репозитория появится у вас в профиле.

Склонируйте и перейдите в локальную копию:

git clone <fork-repo-url>
cd UNN-C-Style-Checker/

Создайте отдельную ветку для работы с репозиторием, которая будет содержать имя, фамилию и направление, пример:

git checkout -b vasya-pupkin-fiit

Собираем проект с заданием

mkdir build && cd build
cmake ../ -DLLVM_DIR=~/compiler-course/workspace/llvm-project/llvm/build/install/lib/cmake/llvm
make -j8

В задаче нужно реализовать с помощью интерфейса clang, tool, который будет находить в исходном коде программы все приведения типов в стиле си и заменять их на соответсвующий аналог из с++ Пример:

double d = 4.5
int i = (int)d; // int i = static_cast<int>(d);

Для замены исходного кода программы будем пользоваться классом Rewriter

Вам нужно будет дописать код в класс CastCallBack, который отвечает за действие, которое нужно совершить при нахождении узла cStyleCastExpr в AST. В данном случае мы хотим понять тип преобразования и заменить исходный код с помощью Rewriter.

class CastCallBack : public MatchFinder::MatchCallback {
public:
	CastCallBack(Rewriter& rewriter) {
		// Your code goes here
	};

	virtual void run(const MatchFinder::MatchResult &Result) {
		// Your code goes here
	}
}

Подробнее о том как достать всю необходимую информацию из MatchFinder::MatchResult можно посмотреть в файле tool.cpp.

После того как вы реализуете CastCallBack , пересоберите проект и запустите.

./c-style-checker ../test/test.cpp --extra-arg=-I/home/<your-root-name>/compiler-course/llvm-project/llvm/build/lib/clang/<version>include/

Если вы все реализовали правильно, то вы увидите на экране

#include <iostream>
int main() {
	float f;
	int i = static_cast<int>(f);
	return 0;
}

Отправка решения

После того как вы сделали заданиe:

  1. Сделайте коммит:
    git add -u
    git commit -m 'Complete c-style-checker task'
    
  2. Отправьте ветку с вашим решением на сервер:
    git push origin HEAD
    
  3. Перейдите на github и откройте pull request из вашей ветки в master главного репозитория

Если необходимо что то исправить после создания pull request нужно просто сделать изменения и повторить шаги 1 и 2. Не нужно открывать новый pull request

Полезные ссылки

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • C++ 62.3%
  • CMake 37.7%