Ағылшыншамен салыстырыңыз: абзацты басыңыз — түпнұсқа терезеде ашылады. Абзац астындағы EN түймесі оны мәтін ішінде көрсетеді.
Мазмұны
Кіріспе
Camlp4 - бағдарламалау тілдері үшін кеңейтілетін талдағыштарды (парсерлерді) жазуға арналған бағдарламалық жүйе. Ол грамматикаларды, сондай-ақ мұндай грамматикалардың жүктелетін синтаксистік кеңейтімдерін анықтау үшін OCaml кітапханалары жиынтығын ұсынады. Camlp4 – «Caml Preprocessor and Pretty Printer» деген сөздердің аббревиатурасы және оның ең маңызды қолданыстарының бірі OCaml синтаксисіне арналған домендік ерекше кеңейтімдерді анықтау болды. Camlp4 INRIA-да жасалған ресми OCaml тарату бөлігі болды. Оның бастапқы авторы – Дэниел де Роглаудр. 2007 жылдың мамыр айында шыққан OCaml 3.10.0 нұсқасы Camlp4-тің маңызды өзгертілген және бұрынғы нұсқалармен үйлесімсіз жаңа нұсқасын енгізді. Де Роглаудр Camlp5 деп аталған бұрынғы нұсқалармен үйлесімді жеке нұсқаны қолдайды. Төмендегі барлық мысалдар Camlp5 немесе Camlp4-тің бұрынғы нұсқаларына (3.09 және одан ертерек нұсқалар) арналған. 2019 жылдың жазында шыққан 4.08 нұсқасы осы кітапхананың соңғы ресми нұсқасы болды. Қазіргі уақытта ол қолданыстан шығарылды (қолданылмайды); оның орнына PPX (PreProcessor eXtensions) кітапханаларын пайдалану ұсынылады.
Camlp4 is a software system for writing extensible parsers for programming languages. It provides a set of OCaml libraries that are used to define grammars as well as loadable syntax extensions of such grammars. Camlp4 stands for Caml Preprocessor and Pretty Printer and one of its most important applications was the definition of domain specific extensions of the syntax of OCaml. Camlp4 was part of the official OCaml distribution which is developed at the INRIA. Its original author is Daniel de Rauglaudre. OCaml version 3.10.0, released in May 2007, introduced a significantly modified and backward incompatible version of Camlp4. De Rauglaudre maintains a separate backward compatible version, which has been renamed Camlp5. All of the examples below are for Camlp5 or the previous version of Camlp4 (versions 3.09 and prior). Version 4.08, released in the summer of 2019, was the last official version of this library. It is currently deprecated; instead, it is recommended to use the PPX (PreProcessor eXtensions) libraries.
Нақты және абстрактіл синтаксис
Camlp4 препроцессорлары компиляцияланған модульдер жиынтығын жүктейді, олар парсерді және әдемі басып шығару құралын анықтайды: парсер кіріс бағдарламасын ішкі өрнеуге айналдырады. Бұл ішкі өрнеу абстрактілі синтаксистік ағашты (AST) құрайды. Ол екілік форматта шығарылуы мүмкін, мысалы, тікелей OCaml компиляторларының біріне жіберілуі мүмкін немесе оны түсінікті мәтіндік бағдарламаға қайта айналдыруға болады. Конкретті синтаксис түсінігі абстрактілі синтаксистің көрсетілген форматын білдіреді. Мысалы, OCaml-дегі (1 + 2) өрнегі ((+) 1 2) немесе (((+) 1) 2) деп те жазылуы мүмкін. Айырмашылық тек нақты синтаксис деңгейінде, себебі бұл үш нұсқа да бір абстрактілі синтаксистік ағастың эквивалентті өрнеулері. OCaml үшін қайта қарастырылған синтаксис анықтамасы көрсеткендей, бір бағдарламалау тілі әртүрлі нақты синтаксистерді пайдалана алады. Олардың барлығы компилятор өңдей алатын бірегей форматтағы абстрактілі синтаксистік ағашта бірігеді. Абстрактілі синтаксистік ағаш – синтаксистік кеңейтулердің ядросы, олар шын мәнінде OCaml бағдарламалары. Грамматиканың анықтамасы OCaml-де жасалса да, анықталатын немесе кеңейтілетін парсер міндетті түрде OCaml-мен байланысты емес, сондықтан өңделіп жатқан синтаксистік ағаш OCaml-дің синтаксисі болмауы мүмкін. OCaml синтаксистік ағаштарымен жұмысты жеңілдететін бірнеше кітапханалар ұсынылады.
A Camlp4 preprocessor operates by loading a collection of compiled modules which define a parser as well as a pretty printer: the parser converts an input program into an internal representation. This internal representation constitutes the abstract syntax tree (AST). It can be output in a binary form, e. g. it can be passed directly to one of the OCaml compilers, or it can be converted back into a clear text program. The notion of concrete syntax refers to the format in which the abstract syntax is represented. For instance, the OCaml expression (1 + 2) can also be written ((+) 1 2) or (((+) 1) 2). The difference is only at the level of the concrete syntax, since these three versions are equivalent representations of the same abstract syntax tree. As demonstrated by the definition of a revised syntax for OCaml, the same programming language can use different concrete syntaxes. They would all converge to an abstract syntax tree in a unique format that a compiler can handle. The abstract syntax tree is at the center of the syntax extensions, which are in fact OCaml programs. Although the definition of grammars must be done in OCaml, the parser that is being defined or extended is not necessarily related to OCaml, in which case the syntax tree that is being manipulated is not the one of OCaml. Several libraries are provided which facilitate the specific manipulation of OCaml syntax trees.
Қолданылу салалары
Домендік тілдер Camlp4-тің маңызды қолданылу саласы болып табылады. OCaml – интерактивті жоғарғы деңгейі мен түпнұсқа кодты компиляциялайтын мүмкіндігі бар көп парадигмалы тіл болғандықтан, оны кез келген жаңа тіл үшін артқы соңғы құрал ретінде пайдалануға болады. Дамыланушының жасауы керек жалғыз нәрсе – сұранысқа берілген домендік тілді стандартты OCaml бағдарламасына түрлендіретін Camlp4 грамматикасын жазу. C сияқты басқа да мақсатты тілдерді де қолдануға болады. Егер мақсатты тіл OCaml болса, OCaml тілінің стандартты мүмкіндіктерін пайдаланып оңай қол жеткізе алмайтын экспрессивтілікті қамтамасыз ету үшін қарапайым синтаксистік қосымшалар немесе синтаксистік қант қолданылуы мүмкін. Синтаксистік кеңейтім компиляцияланған OCaml модулімен анықталады, ол өңделетін бағдарламамен бірге camlp4o атқарылатын файлына жіберіледі. Camlp4 өзі де домендік тіл болып табылады, себебі ол синтаксистік кеңейтімдерді жасауды жеңілдететін синтаксистік кеңейтімдерді ұсынады. Бұл кеңейтімдер грамматиканы (EXTEND операторлары) және <:expr< 1 + 1 >> сияқты цитаталарды ықшам түрде анықтауға мүмкіндік береді, яғни абстрактілі синтаксистік ағаштарды нақты синтаксис арқылы құруға және өзгертуге болады.
Domain specific languages are a major application of Camlp4. Since OCaml is a multi paradigm language, with an interactive toplevel and a native code compiler, it can be used as a backend for any kind of original language. The only thing that the developer has to do is write a Camlp4 grammar which converts the domain specific language in question into a regular OCaml program. Other target languages can also be used, such as C.
If the target language is OCaml, simple syntax add ons or syntactic sugar can be defined, in order to provide an expressivity which is not easy to achieve using the standard features of the OCaml language. A syntax extension is defined by a compiled OCaml module, which is passed to the camlp4o executable along with the program to process. Camlp4 includes a domain specific language as it provides syntax extensions which ease the development of syntax extensions. These extensions allow a compact definition of grammars (EXTEND statements) and quotations such as <:expr< 1 + 1 >>, i. e. deconstructing and constructing abstract syntax trees in concrete syntax.