Git Product home page Git Product logo

unn-c-style-checker's Introduction

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

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

Prebuilt LLVM & Clang

Вы также можете использовать уже собранный llvm & clang, для того что бы получить последнюю версию:

  1. Перейдите в папку с задачей.
  2. Запустите: source download-and-install-llvm.sh Скрипт скачает последний релиз и положит его в папку /tmp/, также выставит переменную LLVM_DIR, поэтому вам больше не нужно ее выставлять во время запуска.
  3. Перейдите в папку с билдом и запустите:
  • cmake ../
  • make -j8

Обратите внимание, что сборка LLVM из исходников потребуется для сдачи дальнейших задач в курсе. Данный workraround поможет сдать только текущую задачу.

Задача

После успешного построения 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

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

unn-c-style-checker's People

Contributors

tolyatalamanov avatar

Watchers

James Cloos avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.