Компилятор

Компиля́ция — сборка программы, включающая трансляцию всех модулей программы, написанных на одном или нескольких исходных языках программирования высокого уровня и/или языке ассемблера, в эквивалентные программные модули на низкоуровневом языке, близком машинному коду (абсолютный код, объектный модуль, иногда на язык ассемблера) или непосредственно на машинном языке или ином двоичнокодовом низкоуровневом командном языке и последующую сборку исполняемой машинной программы. Если компилятор генерирует исполняемую машинную программу на машинном языке, то такая программа непосредственно исполняется физической программируемой машиной (например компьютером). В других случаях исполняемая машинная программа выполняется соответствующей виртуальной машиной. Входной информацией для компилятора (исходный код) является описание алгоритма или программы на предметно-ориентированном языке, а на выходе компилятора — эквивалентное описание алгоритма на машинно-ориентированном языке (объектный код).

Структура компилятора

Процесс компиляции состоит из следующих этапов:

  1. Трансляция программы — трансляция всех или только изменённых модулей исходной программы.
  2. компоновка машинно-ориентированной программы.

В первом случае компилятор представляет собой пакет программ, включающий в себя трансляторы с разных языков программирования и компоновщики. Такой компилятор может компилировать программу, разные части исходно текста которой написаны на разных языках программирования. Нередко такие компиляторы управляются встроенным интерпретатором того или иного командного языка. Яркий пример таких компиляторов — имеющийся во всех UNIX-системах (в частности в Linux) компилятор make.

Во втором случае компилятор де-факто выполняет только трансляцию и далее вызывает компоновщик как внешнюю подпрограмму, который и компонует машинно-ориентированную программу. Этот факт нередко служит поводом считать компилятор разновидностью транслятора, что естественно неверно, — все современные компиляторы такого типа поддерживают организацию импорта программой процедуры (функции) из уже оттранслированого программного модуля, написанного на другом языке программирования. Так в программу на С/С++ можно импортировать функцию написанную например Pascal или Fortran. Аналогично и напротив написанная на С/С++ функция может быть импортирована в Pascal- или Fortran-программу соотвественно. Это как правило было бы невозможно без поддержки многими современными компиляторами организации обработки входных данных в процедуру (функций) в соответствии с соглашениями других языков программирования. Например современные компиляторы с языка Pascal помимо соглашения самого Pascal поддерживает организацию обработки процедурая/функцией входных в соответствии с соглашениями языка С/С++. (Чтобы на уровне машинного кода написанная на Pascal процедура/функция работала с входными параметрами в соответствии с соглашениями языка С/С++, — оператор объявления такой Pascal-процедуры/Pascal-функции должен содержать ключевое слово cdecl.) Примерами таких компиляторов являются компиляторы со всех без исключения языков программирования, используемые непосредственно.

Трансляция программы как неотъемлемая составляющая компиляции включает в себя:

  1. Лексический анализ. На этом этапе последовательность символов исходного файла преобразуется в последовательность лексем.
  2. Синтаксический (грамматический) анализ. Последовательность лексем преобразуется в дерево разбора.
  3. Семантический анализ. Дерево разбора обрабатывается с целью установления его семантики (смысла) — например, привязка идентификаторов к их декларациям, типам, проверка совместимости, определение типов выражений и т. д. Результат обычно называется «промежуточным представлением/кодом», и может быть дополненным деревом разбора, новым деревом, абстрактным набором команд или чем-то ещё, удобным для дальнейшей обработки.
  4. Оптимизация. Выполняется удаление излишних конструкций и упрощение кода с сохранением его смысла. Оптимизация может быть на разных уровнях и этапах — например, над промежуточным кодом или над конечным машинным кодом.
  5. Генерация кода. Из промежуточного представления порождается код на целевом машинно-ориентированном языке.

Компиляторы для Pascal(Паскаль)

Free Pascalhttp://www.freepascal.org/
Lazarushttp://lazarus.freepascal.org/
GNU Pascalhttp://www.gnu-pascal.de/
http://www.microbizz.nl/gpc.html
P4http://homepages.cwi.nl/~steven/pascal/
Flash Pascalhttp://sourceforge.net/projects/flashpascal/
Bero Tiny Pascalhttp://bero.0ok.de/blog/projects/berotinypascal
PPROhttp://www.fortunecity.com/skyscraper/sql/39/
Alice Pascalhttp://www.templetons.com/brad/alice.html
Ultra Pascalhttp://mxm.ticalc.org/up.html
Pascal XSChtttp://www.rz.uni-karlsruhe.de/~iam/…/pxsc.html
http://www.xsc.de/
Z Pascalhttp://tothpaul.free.fr/sources.php?bp7.zpascal
QPascalhttp://sourceforge.net/projects/qpascal/
Turbo Pascal 3http://www.pcengines.ch/tp3.htm
Silhttp://www.kolumbus.fi/larsil/pcomp.htm
DevPashttp://www.bloodshed.net/devpascal.html
Inno Pascalhttp://other.jrsoftware.org/ip/
Mini Compilerhttp://www.schoeffing.de/studium/compiler/
Pascal OS8http://www.dbit.com/pub/pdp8/pascal/compiler/
Pascal FChttp://www-users.cs.york.ac.uk/~burns/pf.html
HP Pascal Studiohttp://www.hppascal.fr.st/
DecWRL Pascalftp://ftp.digital.com/pub/DEC/Modula-2/m2.tar.Z
Mini Compilerhttp://www-2.cs.cmu.edu/…/compiler/0.html
Mindlesshttp://www.pascal-central.com/osp/resources.html
Wayuphttp://www.visopsys.org/andy/wayup/
Pascal —http://ag-kastens.upb.de/eli/examples/eli_pascalE.html
NBS Pascalftp://ftp.iecc.com/pub/file/nbs.tar.gz
ftp://ftp.iecc.com/pub/file/nbsupd.tar.gz
Pascal Robotshttp://digilander.libero.it/oldpumpkin/probots.html
OOPasftp://ftp.cs.brown.edu/pub/oopas.tar.Z
Aribashttp://www.mathematik.uni-muenchen.de/…/aribas.html
Dec System 10
Dec System 20
http://pdp-10.trailing-edge.com/decuslib10-06/
http://pdp-10.trailing-edge.com/decuslib20-01/
PCPhttp://www.lifl.fr/~marquet/ens/pcp/
Mini Pascalhttp://mrl.nyu.edu/~weishao/oldwork/work.html
ZSC Pascalhttp://www.codeguru.com/Cpp/Cpp/cpp_mfc/parsing/article.php/c831
Compil 2000http://www-ensimag.imag.fr/…/present_projet_compil.html
Mini Pascalhttp://ti.fh-bielefeld.de/pv/vorlesung/cpt/begleitmaterial/
Mini Pascalhttp://www.bildung.hessen.de/…/minipascal.htm
Berkeley Pascal PXftp://ftp.win.tue.nl/../4.4BSD-Alpha/
http://docs.freebsd.org/…/px.html
Pascal VUhttp://www.wiretapped.net/…/record0.tar.gz
Zyvai Pascalhttp://www.enseignement.polytechnique.fr/../compil/deux/
Pascal 68khttp://www.hzeeland.nl/…/homepage.htm#SOFTWARE
Vector Pascalhttp://www.dcs.gla.ac.uk/~wpc/…/x25.html
Cabezonhttp://www.tokumaru.org/plang/cabezon/cabezon.htm
PCQ Pascalftp://de.aminet.net/pub/aminet/dev/lang/Pcq12d_1.lha
ftp://de.aminet.net/pub/aminet/dev/lang/Pcq12d_2.lha
ftp://de.aminet.net/pub/aminet/dev/lang/PCQ12src.lzh
ftp://de.aminet.net/pub/aminet/dev/lang/PCQ21A.lha
ftp://de.aminet.net/pub/aminet/dev/lang/PCQ21B.lha
ftp://de.aminet.net/pub/aminet/dev/lang/PCQGuide.lha
CoPascalhttp://www.bloodshed.net/delphi/
Elayahttp://www.elaya.org/
SOS Pascalhttp://sourceforge.net/projects/sospascal/
pascal ucsd I.3 I.4 I.5http://invent.ucsd.edu/technology/cases/1995-prior/SD1991-807.htm
http://www.threedee.com/jcm/psystem/
Simple Interpreter Pascalhttp://siedlcepascal.sourceforge.net/
Mojave Compiler Collectionhttp://mojave.caltech.edu/
Small Pascalhttp://www.brainycreatures.org/download/smallpascal.asp
J Pascalhttp://www.brainycreatures.org/download/jpascal.asp
Dynamic Pascalhttp://www.southern-storm.com.au/libjit.html
BACI Pascalhttp://www.mines.edu/fs_home/tcamp/baci/
Jalhttp://www.voti.nl/jal/
Object Pascal Scripthttp://opascalscript.sourceforge.net/
nemesis pascal Projethttp://npascal.sourceforge.net/
PalmOS Pascalhttp://www.ppcompiler.org/
PéPé Pascalhttp://www.ppcompiler.org/
Pascal GUIhttp://fr.appbrain.com/app/pascalgui-(pascal-compiler)/com.n0n3m4.droidpascal
Biff pascalhttp://biff.sourceforge.net/
Pascal Shttp://www.246.dk/pascals.html
Pascal Shttp://homepage.sunrise.ch/users/gdm/logiciel/paqs.zip
Pascalftp://ftp.wiley.com/public/…/Mak-Writing_Compilers/
pl0http://www.246.dk/pascals.html
Mini Pascalhttp://caml.inria.fr/pub/old_caml_site/Examples/
ppchttp://www.retroarchive.org/…/CPMUG/CPMUG050.ARK
Blaster Master Pascalhttp://www.programmersheaven.com/download/16888/download.aspx
omegasoft pascalhttp://www.bvm.co.uk/os9prods.html
Pascal Phttp://cbfalconer.home.att.net/download/
Orca pascalhttp://store.syndicomm.com/index.php?main_page=product_info&cPath=2&products_id=189
http://store.syndicomm.com/index.php?main_page=product_info&cPath=0&products_id=88
http://store.syndicomm.com/index.php?main_page=product_info&cPath=0&products_id=68
http://www.byteworks.org/
Amityville Pascalhttp://www.simtel.net/pub/pd/57493.html

Поделитесь своим мнением или задайте вопрос