====== Literatura ====== **Niklaus Wirth: Compiler Construction ** \\ http://inf.ethz.ch/personal/wirth/CompilerConstruction/CompilerConstruction1.pdf \\ **Steven Pemberton and Martin Daniels: Pascal Implementation: The P4 Compiler and Interpreter ** \\ http://homepages.cwi.nl/~steven/pascal **Andrew W. Appel: Modern Compiler Implementation in C ** \\ http://www.cs.princeton.edu/~appel/modern/c/ ====== Příklady ====== Příklady v Pythonu http://github.com/zdenekzc/plain-grammar http://github.com/zdenekzc/easy-grammar http://github.com/zdenekzc/simple-view http://gitlab.fjfi.cvut.cz/culikzde/view-2022 http://gitlab.fjfi.cvut.cz/culikzde/view-2023 http://gitlab.fjfi.cvut.cz/culikzde/view https://gitlab.fjfi.cvut.cz/culikzde/ev3comp Dalsi priklady https://gitlab.fjfi.cvut.cz/culikzde/java-parser https://gitlab.fjfi.cvut.cz/culikzde/c-parser https://gitlab.fjfi.cvut.cz/culikzde/pascal-parser/ ====== Letošní příklady ====== Letošní příklady http://gitlab.fjfi.cvut.cz/culikzde/prekl-2024 Loňské příklady http://gitlab.fjfi.cvut.cz/culikzde/prekl-2023 Předloňské příklady http://gitlab.fjfi.cvut.cz/culikzde/prekl-2022 ====== Lexikální analyzátor ====== ===== Lexikální analyzátor pro jazyk podobný jazyku C ( napsaný v jazyce Python ) ====== [[prekl:lexer|lexikální analyzátor]] Video: Lexical Analysis http://www.youtube.com/watch?v=sJKFLcsysVs ( Úvod: http://www.youtube.com/watch?v=0A079QpDAzY ) ====== Syntaktická analýza ====== ===== Syntaktická analýza výrazů ===== [[prekl::expr|syntaktická analýza výrazů]] ===== Gramatika popisující příkazy zjednodušeného jazyka C ===== [[prekl::stat|gramatika popisující příkazy]] ===== Příklady syntaktických analyzátorů ===== [[prekl:mini_parser| Příklad ručně psaného parseru příkazů]] [[prekl:mini_table| Příklad parseru pro popis databázových tabulek]] [[http://kmlinux.fjfi.cvut.cz/~culikzde/prekl/mini-parser.zip|mini-parser.zip]] [[pokus]] Video: Syntax Analysis http://www.youtube.com/watch?v=8nBoVjEOCMI ====== Strojově generované syntaktické analyzátory ====== ===== Gramatika popisující gramatiku ===== [[prekl::gram|gramatika]] ===== Parser pro popis gramatiky ===== [[prekl::gram_parser|Načtení popisu gramatiky a uložení do stromové struktury]] ===== Zobrazení gramatiky ===== [[prekl::gram_html|Zobrazení pomocí HTML]] [[prekl::gram_lout|Zobrazení programem LOUT]] ===== Množiny symbolů, kterými začínají jednotlivá syntaktická pravidla ==== [[prekl::gram_nullable|Vypouštějící pravidla]] [[prekl::gram_symbols|Množiny symbolů]] ===== Syntaktický analyzátor ===== [[prekl::parser|Parser (a také lexer)]] ===== Program ===== http://github.com/zdenekzc/plain-grammar ====== Objektově orientované syntaktické stromy ====== ===== Syntaktický analyzátor vytvářející syntaktický strom ===== [[prekl::parser_tree|parser vytvářející strom]] ===== Tisk programu uloženého v syntaktickém stromu ===== [[prekl::product|product]] ===== Select ==== [[prekl::select|select]] ===== Choose ==== [[prekl::choose|choose]] ===== Program ===== http://github.com/zdenekzc/easy-grammar ====== Příklady ====== ===== Příklady v adresáři tutorial ===== [[prekl::c1|c1 - jednoduchá gramatika pro výrazy a příkazy]] [[prekl::c2|c2 - zobrazení syntaktického stromu]] [[prekl::c3|c3 - gramatika se zjednodušenými deklaracemi]] [[prekl::c3_comp|c3 - zpracování deklarací]] [[prekl::c3_python|c3 - převod do Pythonu]] [[prekl::c4|c4 - syntaktické predikáty, generování instrukcí]] http://github.com/zdenekzc/simple-view ===== C-- ===== [[prekl::cmm_grammar|gramatika C--, sémantické predikáty]] [[prekl::cmm_comp|zpracování deklarací]] [[prekl::cmm_qt|převod do Pythonu, PyQt]] ===== CLang a Python ===== [[cindex]] [[http://kmlinux.fjfi.cvut.cz/~culikzde/prekl/peachpy-fedora34.tgz|peachpy]] ====== TCC ====== http://repo.or.cz/tinycc.git/blob/HEAD:/i386-gen.c#l699 gen_opi /* generate an integer binary operation */ http://repo.or.cz/tinycc.git/blob/HEAD:/x86_64-gen.c#l1705 gen_opi http://repo.or.cz/tinycc.git/blob/HEAD:/tccgen.c#l6370 expr_landor http://repo.or.cz/tinycc.git/blob/HEAD:/tccgen.c#l6943 block http://repo.or.cz/tinycc.git/blob/HEAD:/i386-gen.c#l518 gfunc_prolog https://repo.or.cz/tinycc.git/blob/HEAD:/x86_64-gen.c#l938 gfunc_prolog http://repo.or.cz/tinycc.git/blob/HEAD:/tccgen.c#l8298 gen_function http://repo.or.cz/tinycc.git/blob/HEAD:/tccgen.c#l8436 decl http://repo.or.cz/tinycc.git/blob/HEAD:/tccgen.c#l383 tccgen_compile http://repo.or.cz/tinycc.git/blob/HEAD:/libtcc.c#l776 tcc_compile_string http://repo.or.cz/tinycc.git/blob/HEAD:/tccelf.c#l2809 elf_output_file ====== Poznámky ====== [[dots]] http://tomassetti.me/a-tutorial-on-how-to-write-a-compiler-using-llvm https://mukulrathi.com/create-your-own-programming-language/llvm-ir-cpp-api-tutorial/ http://mlir.llvm.org ( http://www.youtube.com/MLIRCompiler ) http://anoopsarkar.github.io/compilers-class/llvm-practice.html http://llvm.org/docs/tutorial/MyFirstLanguageFrontend/LangImpl03.html http://llvm.org/docs/tutorial/MyFirstLanguageFrontend/LangImpl05.html lldb example http://github.com/llvm/llvm-project/blob/main/lldb/examples/python/disasm.py llvm lite http://llvmlite.readthedocs.io/en/latest/user-guide/index.html cpu0 http://jonathan2251.github.io/lbd/asm.html Gede is a graphical frontend (GUI) to GDB written in C++ and using the Qt4 toolkit https://github.com/Nanoseb/gede gdbgui - A modern, browser-based frontend to gdb https://www.gdbgui.com/ PeachPy - https://github.com/Maratyszcza/PeachPy tcc - https://github.com/C-Chads/tinycc 8cc - https://github.com/rui314/8cc chibicc - https://github.com/rui314/chibicc http://github.com/learn-llvm/awesome-llvm https://assignments.lrde.epita.fr/tools/llvm/irbuilder.html