21. Идея за проект: интерпретатор
3 януари 2018
Административни неща
- Днес и следващите два пъти ще разглеждаме примерни проекти
- Имате домашно 4 : 'Search', до петък, точно в 5
- Предизвикани сте
- Мислете за проекти
Преговор
- Слушахме за Foreign Function Interface (ffi)
- Плюскахме
- Пихме
- Възкръснахме за да се видим днес!
- Време е за бира!
- But first...
Идея за проект - прост интерпретатор
- Има много начини да напишем интерпретатор с REPL (Read–eval–print loop)
- Алтернатива е да напишем и frontend към нещо като LLVM
- Или наша си абстрактна машина :)
- Но за проект прост интерпретатор, който чете, пресмята резултат и го принтира върши работа.
Meddling with Rust
- За мен оптималното решение не е важно
- Важно е да използваме езика по предназначение и да имаме сравнително добре работещ резултат
- Прост динамично-типизиран език за пример е scheme.
- Под-множество на scheme...
Проект и структура
- Най-простият вид интерпретатор има:
- Lexer - чете input и определя кои части от инпута вършат работа и какво значат
- Parser - Строи AST
- Interpreter/Evaluator - Пресмята изхода на програмата, обхождайки и опростявайки AST-то от парсъра.
- REPL - Чака за input и ползва горните 3 за да го eval-не и изведе резултата
Проект и структура
input(string) -> Lexer -> tokens -> Parser -> Terms/Nodes -> Interpreter -> values -> output
The Lexer
Ще гледаме код и ще помислим защо и как
The parser
Ще гледаме код и ще помислим защо и как
The Interpreter
Ще гледаме код и ще помислим защо и как
REPL
Ще гледаме код и ще помислим защо и как