youpaw / 42 Goto Github PK
View Code? Open in Web Editor NEWLicense: MIT License
License: MIT License
all usefull functions from libft must be implemented with the same signature as in original libc:
e.g. memcpy() NOT ft_memcpy. lookup cc.h header for info how way make it
История шелл с необходимыми методами для поиска по истории в ридлайне и при раскрытии бэнга
Минимальный набор функций можно расширить засчет стандратных функций libft
up and down returns same element
По сути нужно сделать свою реализацию errno
Строчный граф добавить в libcc (в отдельной ветке), инициализация графа перед ридлайном, подбор в ридлайне
add printing usage for all builtins
add simple expand as $HOME
Заполнить в файле README.md черновое описание нашего проекта(Description), сделать выдержки из сабджекта.
echo -aasdsv
+переподключить в джобах и хэш
Хэш таблица со всеми бинарниками (дополнитьльно необходимо будет реализовать билтин hash)
Обобщенный парсер флагов для билтинов и шелла.
Опираться можно на getopt, обработчик простой без конфликтующих флагов
Полная библиотека для работы с переменными окружения.
Разработка ведется в ветке env
ls | sort | cat -e
не всегда с первого раза
Обязательные по сабджекту и бонусные
Обсудить архитектуру шелл и прийти к общему консенсусу
Лексический анализатор принимает на вход строку, считанную из ридлайна, либо из файла, и строит по данной строке AST-дерево. Дерево строится на основе полного списка лексем. На данный момент из списка лексем убраны лексемы для шелл скриптинга, но в дальнейшем, возможно, будут добавлены. При разработке нужно это учесть.
Прототип дерева, которое должно получится на выходе:
{
char *node_name;
int node_code;
int index;
int length;
left_node;
right_node;
}
где index - это индекс вхождения слова в считанной строке
len - длина слова
right_node и left_node ветви дерева
node_name должно хранить значение одной из лексем из общего списка лексем
node_code код лексемы из списка
верхней нодой дерева всегда будет пайп который имеет хотя бы одного ребенка (в противном случае файл или введеная строка пустые или имеют только пробельные символы)
Разработка в отдельной ветке, на выходе должна получится либа Lexlib, в которой должна присутствовать функция lexer.
Прототип функции
int lexer(char *line, t_ast **ast)
где line это строка из ридлайна или файла
ast - адрес дерева с вышописанным прототипом (на выходе должно содержать построенное дерево либо null в случае ошибки)
int - возвращаемый код ошибки, либо 0
Все возможные ошибки нужно задефайнить в .h файле. При возникновении ошибки печатать на стандартный вывод ошибок соответствующее сообщение об ошибке.
Полный список лексем:
lexem_cutted_list.pdf
#UPD убрал compound_list, пока без него тоже
Мануал по лексическому анализу:
Основы синтаксического разбора.pdf
Расширить библиотеку регулярок
Добавить глоббинг в валидатор
Отдельный сишник с инициализацией tty, отдельный сишник с restore_tty, отдельный сишник с остальной инициализацией (вызывает инициализацию tty)
SHLVL does not change
segfault on: ls !
Узнать как оно инициализируется, откуда берется и что туда попадает
Лексический анализатор принимает на вход строку считанную из ридлайна, либо файловый дескриптор и исходя из списка лексем генерирует из строки массив токенов.
Перед генерацией токенов лексер разбирает все бэкслэши и кавычки в соответствии с posix.
Ссылки на правила формирования и распознание токенов posix.
Разработка ведется в соответствующей ветке lexer.
Для лексера готов прототип .h файла с прототипами функций.
Нужно написать тулзу (не важно на чем) которая будет брать собранный нами бинарь и запускать его в сгенеренной песочнице направляя в него набор команд и сравнивая вывод с выводом той же команды у шелла. Для тестирования можно сравнивать вывод шелла и шелла. Основное требования чтобы было просто добавлять команды для тестирования (каждая команда запускается в новой песочнице, но неплохо было бы сделать запуск последовательный команд в одной песочнице). Фреймворк должен выводить сам тест, пройден он или нет и дифф с шеллом чтобы можно было понять где ошибка, если вылетает сега, то тоже это выводить. В идеале бинари запускать с валгриндом и показывать есть ли утечки.
ls $ or echo $ do nothing
a=b
Разработка ведется в ветке parser
После релиза лексера нужно будет его по нормальному подключить
Прототип .h файла в папке libparse
Узнать все типы лексем и определить какие из них делаем
в редиректах и лексере исправить подключение
ls \
Написать библиотеку калькулятор, разработка ведется в ветке calc, подробности в хедер файле.
cd / вместо $HOME + '/' делает $PWD + '/' + ''
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.