From 6cdef34073f27af35746d9f8866a38e25724d1d2 Mon Sep 17 00:00:00 2001 From: Mattia Mascarello Date: Tue, 18 Apr 2023 22:55:48 +0200 Subject: [PATCH] Paccianizing --- CMakeLists.txt | 2 +- Doxyfile.in | 2 +- README.md | 279 ++++++++++++++-------------------- Specification.txt | 220 --------------------------- cmake/Doxycelli.cmake | 8 +- cmake/FindRagel.cmake | 2 +- examples/Makefile | 4 +- examples/factorial.mc | 26 ---- examples/factorial.pc | 26 ++++ examples/fibonacci.beauty.mc | 14 -- examples/fibonacci.beauty.pc | 14 ++ examples/fibonacci.mc | 8 - examples/fibonacci.pc | 8 + examples/float.mc | 12 -- examples/float.pc | 12 ++ examples/hello-world.mc | 15 -- examples/hello-world.pc | 15 ++ examples/mandelbrot.beauty.mc | 63 -------- examples/mandelbrot.beauty.pc | 63 ++++++++ examples/mandelbrot.mc | 40 ----- examples/mandelbrot.pc | 63 ++++++++ examples/primes.beauty.mc | 20 --- examples/primes.beauty.pc | 20 +++ examples/primes.mc | 11 -- examples/primes.pc | 11 ++ examples/return.mc | 5 - examples/return.pc | 5 + examples/syntax.beauty.mc | 46 ------ examples/syntax.beauty.pc | 46 ++++++ examples/syntax.mc | 14 -- examples/syntax.pc | 14 ++ examples/turtle/Makefile | 4 +- examples/turtle/turtle.mc | 10 -- examples/turtle/turtle.pc | 10 ++ src/CMakeLists.txt | 30 ++-- src/asmgen.cpp | 8 +- src/asmgen.h | 10 +- src/ast-printer.cpp | 6 +- src/ast-printer.h | 8 +- src/ast-visitor.h | 8 +- src/ast.cpp | 4 +- src/ast.def | 4 +- src/ast.h | 8 +- src/codegen.cpp | 6 +- src/codegen.def | 4 +- src/codegen.h | 8 +- src/errors.cpp | 4 +- src/errors.h | 8 +- src/iterators.h | 8 +- src/lexer.cpp | 4 +- src/lexer.def | 4 +- src/lexer.h | 8 +- src/lexer.rl | 53 ++++--- src/location.h | 8 +- src/main.cpp | 8 +- src/operators.def | 4 +- src/options.cpp | 10 +- src/options.h | 8 +- src/parser.cpp | 4 +- src/parser.h | 8 +- src/support.cpp | 4 +- src/support.h | 8 +- src/types.def | 14 +- 63 files changed, 568 insertions(+), 813 deletions(-) delete mode 100644 Specification.txt delete mode 100644 examples/factorial.mc create mode 100644 examples/factorial.pc delete mode 100644 examples/fibonacci.beauty.mc create mode 100644 examples/fibonacci.beauty.pc delete mode 100644 examples/fibonacci.mc create mode 100644 examples/fibonacci.pc delete mode 100644 examples/float.mc create mode 100644 examples/float.pc delete mode 100644 examples/hello-world.mc create mode 100644 examples/hello-world.pc delete mode 100644 examples/mandelbrot.beauty.mc create mode 100644 examples/mandelbrot.beauty.pc delete mode 100644 examples/mandelbrot.mc create mode 100644 examples/mandelbrot.pc delete mode 100644 examples/primes.beauty.mc create mode 100644 examples/primes.beauty.pc delete mode 100644 examples/primes.mc create mode 100644 examples/primes.pc delete mode 100644 examples/return.mc create mode 100644 examples/return.pc delete mode 100644 examples/syntax.beauty.mc create mode 100644 examples/syntax.beauty.pc delete mode 100644 examples/syntax.mc create mode 100644 examples/syntax.pc delete mode 100644 examples/turtle/turtle.mc create mode 100644 examples/turtle/turtle.pc diff --git a/CMakeLists.txt b/CMakeLists.txt index 059add0..87fbe26 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -2,7 +2,7 @@ # Use of this source code is governed by a GPLv3 license, see LICENSE.txt. cmake_minimum_required(VERSION 3.14) -project(Monicelli VERSION 2.1.0 LANGUAGES C CXX) +project(Pacciani VERSION 2.1.0 LANGUAGES C CXX) list(APPEND CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake") diff --git a/Doxyfile.in b/Doxyfile.in index 99b1117..df14fe6 100644 --- a/Doxyfile.in +++ b/Doxyfile.in @@ -4,7 +4,7 @@ # Project related configuration options #--------------------------------------------------------------------------- DOXYFILE_ENCODING = UTF-8 -PROJECT_NAME = "Monicelli" +PROJECT_NAME = "Pacciani" PROJECT_NUMBER = PROJECT_BRIEF = PROJECT_LOGO = diff --git a/README.md b/README.md index 09cd20b..847d0e7 100644 --- a/README.md +++ b/README.md @@ -1,68 +1,35 @@ -# Monicelli 2.x "Cofandina" +# The Pacciani programming language -This all-new release mainly brings several improvements to the code that make -it easier to hack and build new features. In addition to that: -* `mcc` now produces an executable by default, no need to use (or install) - `lcc`, as it was previously the case. `mcc cofandina.mc -o cofandina` and - that's it! This feature currently requires a POSIX system (like Linux or - Mac OS X) with a C compiler installed (anything reasonably recent will do). +Pacciani is an esoteric language largely based on the [Monicelli Programming Language](https://github.com/esseks/monicelli), which you should definitely check out! -* `mcc` does not depend on Boost anymore. +# What's Pacciani anyway? -* `mcc` has a new hand-written parser that should provide better error - messages. Now it's easier to stuzzicate your prematurated supercazzole. - Error messages are in plain English and not very antani. Apologies for that. +Pacciani is an esoterical programming language based on the so-called +"compagni di merende" from the Italian [Monster of Florence](https://en.wikipedia.org/wiki/Monster_of_Florence) trial. -* `mcc` now generates code that directly calls the C standard library. This - allows you to seamlessly link Monicelli object files with C/C++ code, without - any extra dependency on a Monicelli standard library. - -* The code generator in `mcc` has been ported to LLVM 6.0 and will continue - to be updated with new releases. - -* Modules are gone. This was a rather obscure feature that allowed to expose - functions implemented in C/C++ to Monicelli code using a YAML-based language. - Instead, it's now possible to declare a function with an empty body to signal - that it will be implemented in another file, be it in Monicelli or C/C++. - See the updated Turtle example. - -* The C++ transpiler is gone. It might come back again, though. - -# What's Monicelli anyway? - -Monicelli is an esoterical programming language based on the so-called -"supercazzole" from the movie Amici Miei, a masterpiece of the Italian -comedy. - -Over the past few years I have tried to render the idea of "supercazzola" to -non-Italian speakers, with little success. The closest I got was by describing -it as "comically deceptive gibberish", which sadly does not capture the true -essence of what a "supercazzola" (spelled "supercazzora" according to some) is. -I'm still open to suggestions on how to better present Monicelli (the language) -to the international public. # Compilation -A part of the Monicelli compiler (the lexer) is generated using `ragel`, which +A part of the Pacciani compiler (the lexer) is generated using `ragel`, which you will need to have installed. If this is not the case, the configuration -script will warn you. Monicelli is developed with version 6.8, but any +script will warn you. Pacciani is developed with version 6.8, but any sufficiently recent release should do just fine. You will also need to have LLVM development libraries installed, version 14. Newer versions might or might not work. CMake looks for version 14 by default, you -can override this by setting the `MONICELLI_LLVM_VERSION` variable: +can override this by setting the `PACCIANI_LLVM_VERSION` variable: - $ cmake -DMONICELLI_LLVM_VERSION=15 + $ cmake -DPACCIANI_LLVM_VERSION=15 Finally, you will need CMake, version 3.14 or higher. A typical Makefile-based build workflow would be: - $ cd monicelli/ + $ cd pacciani/ $ mkdir build/ $ cd build/ - $ cmake .. -DCMAKE_INSTALL_PREFIX="$HOME/mcc" + $ cmake .. -DCMAKE_INSTALL_PREFIX="$HOME/pcc" $ make all install If your tools are installed in non-standard locations @@ -70,7 +37,7 @@ If your tools are installed in non-standard locations $ PATH=/path/to/ragel cmake .. -`mcc` statically links LLVM, once compiled it will only depend on the C++ +`pcc` statically links LLVM, once compiled it will only depend on the C++ runtime and on `libz`. ## Note for non-POSIX platforms (like Windows) @@ -81,45 +48,36 @@ Windows. There, you will need to disable this feature at build time. You will only get object files (.o) that you will have to link, including a C runtime library, by yourself. -You can disable the invocation of an external linker and make `mcc` compilable +You can disable the invocation of an external linker and make `pcc` compilable on Windows during CMake configuration by forcing the appropriate flag to OFF: - $ cmake .. -DMONICELLI_LINKER=OFF + $ cmake .. -DPACCIANI_LINKER=OFF ## Tested platforms -The reference OS for building and testing Monicelli is the most recent Ubuntu LTS. +The reference OS for building and testing Pacciani is the most recent Ubuntu LTS. If the build is broken there, then it's a bug. It _should_ also compile on Windows, as well as many more POSIX systems, including Mac OS X. If you needed a patch to compile -Monicelli on your favourite platform, please send us a pull request! +Pacciani on your favourite platform, please send us a pull request! # Usage -Monicelli build an executable by default on POSIX systems +Pacciani build an executable by default on POSIX systems (such as Linux, Mac OS X). Linking requires an external C compiler, anything decently modern and standard-conformant should do. A typical invocation is very similar to what you would expect from your C compiler: - $ mcc example.mc -o example + $ pcc example.pc -o example $ ./example -Please be aware that the Monicelli compiler depends on the availability of a C +Please be aware that the Pacciani compiler depends on the availability of a C compiler and stdlib, although this dependency should be available on virtually -all platforms where you might think to run `mcc`. +all platforms where you might think to run `pcc`. # Language overview -The original specification can be found in `Specification.txt`, and was -initially conceived by my colleagues and dear friends Alessandro Barenghi, -Michele Tartara and Nicola Vitucci, to whom goes my gratitude. - -Their proposal was meant to be an elaborate joke and is not complete. -This project is an ongoing effort to produce a rigorous specification for the -language and implement a compiler, which implies filling gaps and ambiguities -with sensible choices. - Statements have no terminator, i.e. no semicolon `;` or the like. A single statement can be split across multiple lines and multiple statements can be grouped on the same line. However, keywords consisting of multiple space-separed @@ -129,7 +87,7 @@ A comma might be inserted after each statement, if it fits the sentence ;) Accented letters can be replaced by the non-accented letter followed by a backtick `` ` ``, although the use of the correct Italian spelling is strongly -encouraged for maximizing the antani effect. +encouraged for maximizing the firenze effect. ## Getting started real quick @@ -141,17 +99,17 @@ folder contains a set of programs covering most of the features of the language. The entry point of the program (the "main") is identified by the phrase: - Lei ha clacsonato + Tutti in piedi -which marks the beginning of the _supercazzola_ (i.e. of the program). +which marks the beginning of the _processo_ (i.e. of the program). A value can be returned by using the the following statement: - vaffanzum ! + seduti ! optionally, no value might be returned with: - vaffanzum! + seduti! ## Expressions @@ -181,7 +139,7 @@ This ensures that no loss takes place when evaluating an expression. Binary shift operators have a slighly different syntax: - con scappellamento a per + con saluto romano a per which is equivalent to `what >> bits` or `what << bits`, depending on the direction, which is specified as follows: @@ -194,14 +152,14 @@ direction, which is specified as follows: as you might have noticed, those are simply the translation in Italian of "left" and "right". For instance: - antani con scappellamento a sinistra per 2 + testimone con saluto romano a sinistra per 2 -maps to `antani << 2`. +maps to `testimone << 2`. It goes without saying, other expression can be used instead of numbers. Also, the usual precedence rules apply. -**There is no syntax for braces in Monicelli**. +**There is no syntax for braces in Pacciani**. ## Variables @@ -220,9 +178,9 @@ Consequently, the articles above cannot be used as variable names. A value can be assigned to a variable with the following statement: - come fosse + è amico di + -the alternate spelling `come se fosse` can be used as well. The `` initializer is casted to the declared type of the variable, even if the cast will cause some loss. This feature can be (ab)used to introduce @@ -235,61 +193,61 @@ directly mapped on C++/C99 types as follows: | Type name | Mapped C type | Size | |-----------|---------------|-------| -| Necchi | `int` | 64bit | -| Mascetti | `char` | 8bit | -| Perozzi | `float` | 32bit | -| Melandri | `bool` | - | -| Sassaroli | `double` | 64bit | +| Pacciani | `int` | 64bit | +| Vanni | `char` | 8bit | +| Pucci | `float` | 32bit | +| Lotti | `bool` | - | +| Canessa | `double` | 64bit | A variable is declared with the following statement: - voglio , + venga , an initialization value can be provided: - voglio , come se fosse + venga , è amico di for instance: - voglio antani, Necchi come se fosse 4 + venga l'imputato, Pacciani è amico di 4 -declares a variables called `antani` of type `Necchi` (`int`) and initializes +declares a variables called `testimone` of type `Pacciani` (`int`) and initializes it to 4. ## Input/Output Variables and expressions can be printed with the statement: - a posterdati + è espulso dall'aula Conversely, a variable might be read from input using: - mi porga + chiamo a testimoniare ## Loop There is only one loop construct, equivalent to a C `do {} while();`, which is defined as follows: - stuzzica + allora - e brematura anche, se + si calmi, se For example: - voglio antani, Necchi come se fosse 10 - stuzzica - antani come fosse antani meno 1 - e brematura anche, se antani maggiore di 0 + venga il mostro, Pacciani è amico di 10 + allora + il mostro è amico di mostro meno 1 + si calmi, se il mostro è maggiore di 0 maps to: - int antani = 10; + int mostro = 10; do { - antani = antani - 1; - } while (antani > 0); + mostro = mostro - 1; + } while (mostro > 0); -`brematura` might be replaced by its alternate form `prematura` +`si calmi` might be replaced by its alternate form `perfavore` ## Branch @@ -299,115 +257,112 @@ C translation. This is the general form: - che cos'è ? + lei conosce ? : - o magari : + o merenda : - o tarapia tapioco: + insomma: - e velocità di esecuzione + e facevate le merende insieme where `` might be either a value or a semi-expression, that is an operator followed by any expression. For instance: - che cos'è il genio? - intuizione: - genio come se fosse genio meno 1 - o magari intuizione diviso 2: - genio come se fosse genio più 1 - o magari maggiore di mobiletto per due: - genio come se fosse genio per 2 - o tarapia tapioco: - genio come se fosse 2 - e velocità di esecuzione - + lei conosce il testimone? + giulio: + testimone è amico di testimone meno 1 + o merenda giulio diviso 2: + testimone è amico di testimone più 1 + o merenda maggiore di mobiletto per due: + testimone è amico di testimone per 2 + insomma: + testimone è amico di 2 + e facevate le merende insieme maps to: - if (genio == intuizione) { - genio = genio - 1; - } else if (genio == (intuizione / 2)) { - genio = genio + 1; - } else if (genio > (mobiletto * 2)) { - genio = genio * 2; + if (testimone == giulio) { + testimone = testimone - 1; + } else if (testimone == (giulio / 2)) { + testimone = testimone + 1; + } else if (testimone > (mobiletto * 2)) { + testimone = testimone * 2; } else { - genio = 2; + testimone = 2; } The statement can emulate an `if () {} else {}`: - che cos'è il genio? + lei conosce il genio? maggiore di mobiletto: - genio come se fosse 2 - o tarapia tapioco: - genio come se fosse 0 - e velocità di esecuzione + genio è amico di 2 + insomma: + genio è amico di 0 + e facevate le merende insieme Placing multiple `o :` block is similar to a chain of `else if` in C. -The `o tarapia tapioco` block can be omitted: +The `insomma` block can be omitted: - che cos'è il genio? + lei conosce il genio? maggiore di mobiletto: - genio come se fosse 2 - e velocità di esecuzione + genio è amico di 2 + e facevate le merende insieme Finally, here is the equivalent of a `switch () {}`: - che cos'è il genio? + lei conosce il genio? 1: - genio come se fosse 2 - o magari 2: - genio come se fosse 7 - o tarapia tapioco: - genio come se fosse 9 - e velocità di esecuzione + genio è amico di 2 + o merenda 2: + genio è amico di 7 + insomma: + genio è amico di 9 + e facevate le merende insieme -where the `o tarapia tapioco` part is like the `default` block. +where the `insomma` part is like the `default` block. ## Functions -**Note**: the alternate spelling `supercazzora` might be used in place - of `supercazzola` wherever the latter appears. ## Declaration -A function is declared with the `blinda la supercazzola` statement: +A function is declared with the `idromassaggiatore` statement: - blinda la supercazzola [] [con [, ...]] o scherziamo? + idromassaggiatore [] [con [, ...]] innocente Where `` can be omitted for a void function. For instance: - blinda la supercazzola Necchi antanizzata con alfio Mascetti o scherziamo? - vaffanzum alfio meno 2! + idromassaggiatore Pacciani merendivoro con mario Vanni innocente + seduti mario meno 2! -is a function of type `Necchi`, taking one argument of type `Mascetti`. +is a function of type `Pacciani`, taking one argument of type `Vanni`. Multiple arguments must be comma-separed, like in: - blinda la supercazzola Necchi antanizzata con alfio Mascetti, barilotto Necchi o scherziamo? - vaffanzum alfio meno 2! + idromassaggiatore Pacciani merendivoro con mario Vanni, barilotto Pacciani innocente + seduti mario meno 2! -which is a function of type `Necchi`, taking two arguments of type `Mascetti` -and `Necchi`. It maps to: +which is a function of type `Pacciani`, taking two arguments of type `Vanni` +and `Pacciani`. It maps to: - int antanizzata(char alfio, int barilotto) { - return alfio - 2; + int merendivoro(char mario, int barilotto) { + return mario - 2; } Finally, this: - blinda la supercazzola antanizzata o scherziamo? - vaffanzum! + idromassaggiatore merendivoro innocente + seduti! is a `void` function taking no arguments and becomes: - void antanizzata() { + void merendivoro() { return; } Functions cannot be nested and can be declared before or after the main in any -order. `mcc` will not check that a return statement is always reachable inside +order. `pcc` will not check that a return statement is always reachable inside a non-void function. Failing to return a value leads to undefined behaviour. A function might be declared with no body, in which case it's treated as a @@ -416,23 +371,23 @@ it signals that the function is implemented in another file. ## Invocation -A function is called with the `brematurata la supercazzola` statement: +A function is called with the `noi condividiamo` statement: - brematurata la supercazzola [con [, ...] o scherziamo? + noi condividiamo [con [, ...] innocente Functions might be called inside expressions. For instance, this: - antani come se fosse brematurata la supercazzola alfio con barilotto diviso 3 o scherziamo? per 2 + il giudice è amico di noi condividiamo poeticamente con merende diviso 3 innocente per 2 maps to: - antani = alfio(barilotto / 3) * 2; + giudice = poeticamente(merende / 3) * 2; ## Exceptions The program might be aborted immediately with the statement: - avvertite don ulrico + viva idduce there are no arguments. @@ -441,16 +396,16 @@ there are no arguments. An assertion block will evaluate its expression and trigger an error message if it is found to be 0 (logical false). An assertion is stated as: - ho visto ! + ma cosa dice ! ## Comments -Any character after `bituma` is ignored until a line break is encountered. For +Any character after `il nostro signore Gesù` is ignored until a line break is encountered. For instance, in: - antani come se fosse 4 bituma, scusi, noi siamo in quattro + il testimone è amico di 4 il nostro signore Gesù è mio amico -`, scusi, noi siamo in quattro` is ignored. +`il nostro signore Gesù` is ignored. Comments are useful to fill the "supercazzola" and make it more readable, since any word (including reserved words) can be inserted into it. @@ -462,7 +417,7 @@ with an hash sign `#` and continues until a line break is encountered, as an ordinary comment. They have a different graphical symbol, which can be immediately spotted inside -a long "supercazzola". Also, ordinary comments can and should be used in an +a long "processo". Also, ordinary comments can and should be used in an improper way to fill the sentence, meta comments provide a mechanism for distiguishing "real" comments. @@ -472,6 +427,4 @@ The following phrases are currently reserved with no assigned usage. They cannot be used as variable identifiers, even if they do not serve any other purpose in the current language revision. -* `conte` -* `scusi noi siamo in` -* `con rinforzino` +* `lei la picchiava` diff --git a/Specification.txt b/Specification.txt deleted file mode 100644 index f0ef8ed..0000000 --- a/Specification.txt +++ /dev/null @@ -1,220 +0,0 @@ -------------------------------------------------------------------------- - -NOTE: this document was left here only for historical purposes, - refer to REAMDE.md for the current spec. - -NOTA: questo documento è obsoleto ed è qui solo per memoria storica, in - quanto rappresenta la prima specifica proposta per il linguaggio. - README.md contiene l'attuale versione. - -------------------------------------------------------------------------- - -Proposte per la definizione di un linguaggio di programmazione esoterico "Monicelli" - -Il "main" del programma inizia in corrispondenza di: - Lei ha clacsonato -che da il via alla supercazzola (cioè al programma) - - -Il programma termina con l'istruzione - vaffanzum -che equivale a - return -Può essere usato anche per terminare le funzioni restituendo un valore di ritorno: - vaffanzum antani - -*** Tipi di dato *** - * Necchi -> int - * Mascetti -> char - * Perozzi -> float - * Melandri -> bool - * Sassaroli -> double - -I puntatori si dichiarano anteponendo "conte" al nome della variabile - -quindi - conte Mascetti -è - char* - - -*** Dichiarazione variabili *** -Si usa la sintassi: - voglio il , [, come fosse ] -Esempio: - voglio il cappellano, Necchi -dichiara la variabile "cappellano" di tipo int -e: - voglio lo scrittoio, conte Mascetti -dichiara la variabile "scrittoio" di tipo "char*" -Eventualmente si può anche inizializzare immediatamente la variabile usando l'operatore di assegnamento (spiegato meglio nel seguito) - voglio il cappellano, Necchi, come fosse 4 - -Ogni volta che si deve utilizzare una variabile, è possibile precederla con un articolo. -La concordanza dell'articolo non è semanticamente verificata, ma ci si assicura sintatticamente -che l'articolo sia effettivamente un articolo. - - -*** Operatori *** -definiti a parole, per meglio integrarsi graficamente nella supercazzola. - -Aritmetici - * più - * meno - * per - * diviso - -Di shift: - con scappellamento a per X -dove X e il numero di posizioni dello shift e direzione può essere - * sinistra - * destra -Esempio: - antani con scappellamento a destra per 2 -equivale a - antani >> 2 - - -Di confronto - * minore di - * maggiore di - * minore o uguale a - * maggiore o uguale a - - -Di assegnamento -è "come fosse". -Perciò: - vicesindaco come fosse antani per due a destra -equivale a - vicesindaco = antani >> 2 - - -Operatore di output (postfisso): - a posterdati -Esempio: - antani a posterdati -Stampa la variabile "antani" a video - - -Operatore di input: - mi porga -Esempio - mi porga il cappellano -richiede all'utente di inserire il valore della variabile "cappellano" da standard input - - - - - -*** Cicli *** - -Stuzzica-Brematura -Stuzzica il palato eseguendo almeno una volta il corpo del ciclo, ed eventualmente lo brematura altre volte. -Sintassi: - stuzzica - - e brematura anche, se - - -*** Costrutto di selezione (switch+if) *** -"Che cos'è" -È l'unico costrutto di selezione, facente funzione sia di if, sia di switch -Sintassi: - che cos'è ? - : - - : - - [tarapia tapioco: #Else/default, opzionale - - ] - e velocità di esecuzione. - - può essere: - * : - il codice viene eseguito se il risultato dell'espressione è uguale alla variabileDiControllo - * : - il codice viene eseguito se è vero che: - -Esempio: - che cos'è il genio? - fantasia: - antani come se fosse vicesindaco per due - intuizione: - mi porga il cappellano - zingarata come fosse cappellano più uno - zingarata a posterdati - maggiore di mobiletto: - genio a posterdati - tarapia tapioco: - mi porga il cappello - e velocita di esecuzione - -Che corrisponde a (pseudocodice): - switch(genio) { - case genio=fantasia: - antani = vicesindaco*2 - case genio=intuizione: - input cappellano - zingarata = cappellano+1 - print zingarata - case genio > mobiletto: - print genio - default: - input cappello - } - -*** Funzioni *** -Una funzione può essere definita con la sintassi: - blinda la supercazzola [con [, ]]. - - O scherziamo? - -che definisce la funzione con i parametri in ingresso specificati - - -Le funzioni sono invocate con la sintassi: - brematurata la supercazzola con [[, ]] - -*** Eccezioni *** -Esiste un'unica eccezione possibile (di fatto, corrispondente a segnalare un errore non gestibile e -causa la terminazione del programma). -L'eccezione può essere lanciata tramite la frase: - avvertite don ulrico - -Esempio: - che cos'è il thermos? - un oggetto: - barilotto come se fosse antani per due - > 0: - thermos come se fosse thermos meno 1 - tarapia tapioco: - avvertite don ulrico - e velocità di esecuzione - -Che corrisponde a (pseudocodice): - switch(thermos) { - case thermos==oggetto: - barilotto = antani * 2 - case thermos>0: - thermos = thermos-1 - default: - raise exception - } - -*** Commenti *** -Ogni riga iniziata da "bituma" è un commento e viene completamente ignorata dal compilatore - -Esempio: - bituma il codice che esegue la FFT - - -*** Asserzioni *** - ho visto la ! -verifica che la condizione risulti vera, altrimenti avverte don Ulrico (ossia, lancia un'eccezione) - -Esempio: - ho visto il cappellano come fosse la lavagna! -equivale a - assert(cappellano==lavagna) diff --git a/cmake/Doxycelli.cmake b/cmake/Doxycelli.cmake index 07ce835..1b5edc3 100644 --- a/cmake/Doxycelli.cmake +++ b/cmake/Doxycelli.cmake @@ -4,17 +4,17 @@ find_package(Doxygen) if (DOXYGEN_FOUND) - set(MONICELLI_DOXYGEN_CONFIG ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile) + set(PACCIANI_DOXYGEN_CONFIG ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile) configure_file( ${CMAKE_CURRENT_SOURCE_DIR}/Doxyfile.in - ${MONICELLI_DOXYGEN_CONFIG} + ${PACCIANI_DOXYGEN_CONFIG} @ONLY ) add_custom_target(doc - DEPENDS ${MONICELLI_DOXYGEN_CONFIG} - COMMAND ${DOXYGEN_EXECUTABLE} ${MONICELLI_DOXYGEN_CONFIG} + DEPENDS ${PACCIANI_DOXYGEN_CONFIG} + COMMAND ${DOXYGEN_EXECUTABLE} ${PACCIANI_DOXYGEN_CONFIG} WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} VERBATIM ) diff --git a/cmake/FindRagel.cmake b/cmake/FindRagel.cmake index 9b41b14..b30ad31 100644 --- a/cmake/FindRagel.cmake +++ b/cmake/FindRagel.cmake @@ -4,7 +4,7 @@ find_program(RAGEL_EXECUTABLE ragel) if (${RAGEL_EXECUTABLE} STREQUAL "RAGEL_EXECUTABLE-NOTFOUND") - message(FATAL_ERROR "Please install ragel to compile Monicelli.") + message(FATAL_ERROR "Please install ragel to compile Pacciani.") else() message(STATUS "Found Ragel: ${RAGEL_EXECUTABLE}") endif() diff --git a/examples/Makefile b/examples/Makefile index 6b9ecee..38b5dc1 100644 --- a/examples/Makefile +++ b/examples/Makefile @@ -1,4 +1,4 @@ -MCC=mcc +PCC=pcc EXAMPLES=factorial hello-world primes return fibonacci mandelbrot float all: $(EXAMPLES) @@ -7,4 +7,4 @@ clean: $(RM) $(EXAMPLES) %: %.mc - $(MCC) $< -o $@ + $(PCC) $< -o $@ diff --git a/examples/factorial.mc b/examples/factorial.mc deleted file mode 100644 index 00ca610..0000000 --- a/examples/factorial.mc +++ /dev/null @@ -1,26 +0,0 @@ -bituma un po' il calcolo del fattoriale come fosse un Sassaroli, o no? - -blinda la supercazzola Sassaroli antanizzata con pazienza bitumata, concorda -Sassaroli o scherziamo? - - voglio il gruppo, Sassaroli - il gruppo come fosse 1 - - che cos'è la pazienza? - 1: il gruppo come fosse 2 con scappellamento a destra per 1 - o tarapia tapioco: il gruppo come fosse prematurata la supercazzola - antanizzata con pazienza meno 1 o scherziamo? per la pazienza - - e velocità di esecuzione bitumata! in fretta, e - bitumando! se no il gruppo si spacca, e insomma, - vaffanzum il gruppo! - -Lei ha clacsonato - - voglio il vicesindaco, Necchi - voglio il numero, Necchi - mi porga il numero bitumando il vicesindaco, dico, bitumando - il vicesindaco come fosse un numero - - prematurata la supercazzola antanizzata con il vicesindaco - o scherziamo? a posterdati bitumati, pure, o in questura? diff --git a/examples/factorial.pc b/examples/factorial.pc new file mode 100644 index 0000000..99a0e46 --- /dev/null +++ b/examples/factorial.pc @@ -0,0 +1,26 @@ +con il nostro signore Gesù un po' il calcolo del fattoriale è amico di un Canessa, o no? + +idromassaggiatore Canessa poeticamente con pazienza il nostro signore Gesù, concorda +Canessa innocente + + venga il gruppo, Canessa + il gruppo è amico di 1 + + lei conosce la pazienza? + 1: il gruppo è amico di 2 con saluto romano a destra per 1 + insomma: il gruppo è amico di noi condividiamo + poeticamente con pazienza meno 1 innocente per la pazienza + + e facevate le merende insieme con il nostro signore Gesù! in fretta, e + con il nostro signore Gesù ancora se no il gruppo si spacca, e insomma, + seduti il gruppo! + +Tutti in piedi + + venga il giudice, Pacciani + venga il numero, Pacciani + chiamo a testimoniare il numero per il nostro signore Gesù + il giudice è amico di un numero + + noi condividiamo poeticamente con il giudice + innocente è espulso dall'aula con il nostro signore Gesù \ No newline at end of file diff --git a/examples/fibonacci.beauty.mc b/examples/fibonacci.beauty.mc deleted file mode 100644 index da8f810..0000000 --- a/examples/fibonacci.beauty.mc +++ /dev/null @@ -1,14 +0,0 @@ -Lei ha clacsonato - voglio antani, Necchi come se fosse 0 - voglio pastene, Necchi come se fosse 1 - voglio un barilotto, Necchi - - mi porga il barilotto - - stuzzica - pastene a posterdati - voglio un passaggio, Necchi come fosse antani - antani come fosse pastene - pastene come fosse il pastene più il passaggio - barilotto come fosse il barilotto meno 1 - e brematura anche, se il barilotto maggiore di 0 diff --git a/examples/fibonacci.beauty.pc b/examples/fibonacci.beauty.pc new file mode 100644 index 0000000..3ef8133 --- /dev/null +++ b/examples/fibonacci.beauty.pc @@ -0,0 +1,14 @@ +Tutti in piedi + venga il testimone, Pacciani è amico di 0 + venga il difensore, Pacciani è amico di 1 + venga un usciere, Pacciani + + chiamo a testimoniare l' usciere + + allora + il difensore è espulso dall'aula + venga un segretario, Pacciani è amico del testimone + il testimone è amico del difensore + il difensore è amico del difensore più il segretario + usciere è amico dell' usciere meno 1 + si calmi, se l' usciere maggiore di 0 diff --git a/examples/fibonacci.mc b/examples/fibonacci.mc deleted file mode 100644 index 544bbb1..0000000 --- a/examples/fibonacci.mc +++ /dev/null @@ -1,8 +0,0 @@ -Lei ha clacsonato voglio antani, Necchi come se fosse 0 bitumando il pastene -voglio il pastene, Necchi come se fosse 1 voglio un barilotto, Necchi -mi porga il barilotto stuzzica bitumato il passaggio sullo sci nautico -pastene a posterdati voglio un passaggio, Necchi come fosse antani, -antani come fosse pastene bitumato e per finire -pastene come fosse il pastene più il passaggio -barilotto come fosse il barilotto bitumato di prima -meno 1 e brematura anche, se il barilotto maggiore di 0 diff --git a/examples/fibonacci.pc b/examples/fibonacci.pc new file mode 100644 index 0000000..768a066 --- /dev/null +++ b/examples/fibonacci.pc @@ -0,0 +1,8 @@ +Tutti in piedi venga il testimone, Pacciani è amico di 0 +venga il difensore, Pacciani è amico di 1 +venga un usciere, Pacciani +chiamo a testimoniare l' usciere +allora il difensore è espulso dall'aula +venga un segretario, Pacciani è amico del testimone il testimone è amico del difensore +il difensore è amico del difensore più il segretario +usciere è amico dell' usciere meno 1 si calmi, se l' usciere maggiore di 0 diff --git a/examples/float.mc b/examples/float.mc deleted file mode 100644 index 12389c9..0000000 --- a/examples/float.mc +++ /dev/null @@ -1,12 +0,0 @@ -# Test all possible numerical forms (integer and float) - -Lei ha clacsonato - -2.0 a posterdati --2.0 a posterdati -2. a posterdati -.232 a posterdati --2 a posterdati --.2233 a posterdati -+2 a posterdati -+2.233e-23 a posterdati diff --git a/examples/float.pc b/examples/float.pc new file mode 100644 index 0000000..10df3ef --- /dev/null +++ b/examples/float.pc @@ -0,0 +1,12 @@ +# Test all possible numerical forms (integer and float) + +Tutti in piedi + +2.0 è espulso dall'aula +-2.0 è espulso dall'aula +2. è espulso dall'aula +.232 è espulso dall'aula +-2 è espulso dall'aula +-.2233 è espulso dall'aula ++2 è espulso dall'aula ++2.233e-23 è espulso dall'aula diff --git a/examples/hello-world.mc b/examples/hello-world.mc deleted file mode 100644 index 7e26ca0..0000000 --- a/examples/hello-world.mc +++ /dev/null @@ -1,15 +0,0 @@ -# Author: Alessandro Pellegrini -# Released under GPLv3 - -Lei ha clacsonato -voglio una bucaiola, Necchi come se fosse 0 voglio prematurata, Mascetti come se fosse 72 -prematurata a posterdati voglio antifurto, Mascetti come se fosse 87. -voglio una cofandina, Mascetti come se fosse prematurata con scappellamento a sinistra per 1 -cofandina come fosse cofandina meno 33 brematurata la supercazzola antanizzata con antifurto, -cofandina o scherziamo? vaffanzum! bituma scusi, noi siamo in quattro. -blinda la supercazzola antanizzata con Alfio Mascetti, tarapia Mascetti o scherziamo? -voglio vicesindaco, Mascetti come se fosse 101 vicesindaco a posterdati voglio pastene, -Mascetti come se fosse vicesindaco più 7 pastene a posterdati bituma in un certo senso. -pastene a posterdati tarapia a posterdati Alfio a posterdati tarapia a posterdati -voglio scappellamento, Mascetti come se fosse 114 scappellamento a posterdati -pastene a posterdati voglio Antani, Mascetti come se fosse pastene meno 8 Antani a posterdati diff --git a/examples/hello-world.pc b/examples/hello-world.pc new file mode 100644 index 0000000..4b486a7 --- /dev/null +++ b/examples/hello-world.pc @@ -0,0 +1,15 @@ +# Author: Alessandro Pellegrini +# Released under GPLv3 + +Tutti in piedi +venga una bucaiola, Pacciani è amico di 0 venga bugiarda, Vanni è amico di 72 +bugiarda è espulsa dall'aula venga delitto, Vanni è amico di 87. +venga un capretto, Vanni è amico della bugiarda con saluto romano a sinistra per 1 +capretto è amico di capretto meno 33 noi condividiamo poeticamente con delitto, +capretto innocente seduti! il nostro signore Gesù ci perdoni +idromassaggiatore poeticamente con pazzo Vanni, pazzissimo Vanni innocente +venga giudice, Vanni è amico di 101 giudice è espulso dall'aula venga il difensore, +Vanni è amico del giudice più 7 il difensore è espulso dall'aula il nostro signore Gesù in un certo senso. +il difensore è espulso dall'aula pazzissimo è espulso dall'aula il pazzo è espulso dall'aula pazzissimo è espulso dall'aula +venga assoluzione, Vanni è amico di 114 assoluzione è espulso dall'aula +il difensore è espulso dall'aula venga avvocato, Vanni è amico del difensore meno 8 avvocato è espulso dall'aula diff --git a/examples/mandelbrot.beauty.mc b/examples/mandelbrot.beauty.mc deleted file mode 100644 index 69c0562..0000000 --- a/examples/mandelbrot.beauty.mc +++ /dev/null @@ -1,63 +0,0 @@ -blinda la supercazzola densa con cofandina Sassaroli o scherziamo? - voglio una zingarata, Mascetti - che cos'è la cofandina? - maggiore di 8: zingarata come fosse 32 - o magari maggiore di 4: zingarata come fosse 46 - o magari maggiore di 2: zingarata come fosse 43 - o tarapia tapioco: zingarata come fosse 42 - e velocità di esecuzione - zingarata a posterdati - -blinda la supercazzola Sassaroli converge con - vero Sassaroli, sogno Sassaroli, passo Necchi, - destinazione Sassaroli, finta Sassaroli o scherziamo? - voglio lo sci, Sassaroli come se fosse vero per vero più sogno per sogno bitumato quello nautico però - che cos'è il passo? - maggiore di 255: - vaffanzum un passo! - o tarapia tapioco: che cos'è lo sci? - maggiore di 4: vaffanzum il passo! - o tarapia tapioco: - vaffanzum - prematurata la supercazzola converge con - vero per vero meno un sogno per il sogno più la destinazione, - 2 per il vero per il sogno più la finta, - il passo più 1, - destinazione, finta - o scherziamo?! - e velocità di esecuzione - e velocità di esecuzione bituma dico io! - -blinda la supercazzola Sassaroli ancora con il vero Sassaroli, un sogno Sassaroli o scherziamo? - vaffanzum prematurata la supercazzola converge con vero, sogno, 0, vero, sogno o scherziamo?! - -blinda la supercazzola antanizzata con - mino Sassaroli, mano Sassaroli, piede Sassaroli, - fuochino Sassaroli, mono Sassaroli, pastene Sassaroli o scherziamo? - voglio ispettore, Mascetti come se fosse 10 - voglio una pulitina, Sassaroli come fosse mino - stuzzica - fuochino come se fosse fuochino più pastene - stuzzica - mino come se fosse mino più piede - prematurata la supercazzola densa con prematurata la supercazzola - bitumata come sempre e - ancora con mino, fuochino o scherziamo? o scherziamo? bituma no eh! Lo ripeto - e brematura anche, se mino minore di mano - mino come se fosse la pulitina - ispettore a posterdati - e brematura anche, se fuochino minore di mono - -blinda la supercazzola cofandina con - vero Sassaroli, l'immagine Sassaroli, - la grandezza Sassaroli, il finale Sassaroli bituma come sempre - o scherziamo? - prematurata la supercazzola antanizzata con - vero, vero più la grandezza per 78, grandezza, - immagine, immagine più il finale per 40, il finale - o scherziamo? - -Lei ha clacsonato - prematurata la supercazzola cofandina con - -2.3, -1.3, 0.05, 0.07 - o scherziamo? diff --git a/examples/mandelbrot.beauty.pc b/examples/mandelbrot.beauty.pc new file mode 100644 index 0000000..2ca220a --- /dev/null +++ b/examples/mandelbrot.beauty.pc @@ -0,0 +1,63 @@ +idromassaggiatore densa con pavido Canessa innocente + venga una testimone, Vanni + lei conosce il pavido? + maggiore di 8: testimone è amico di 32 + o merenda maggiore di 4: testimone è amico di 46 + o merenda maggiore di 2: testimone è amico di 43 + insomma: testimone è amico di 42 + e facevate le merende insieme + testimone è espulso dall'aula + +idromassaggiatore Canessa converge con + vero Canessa, sogno Canessa, passo Pacciani, + destinazione Canessa, finta Canessa innocente + venga l' usciere, Canessa è amico di vero per vero più sogno per sogno il nostro signore Gesù quello nautico però + lei conosce il passo? + maggiore di 255: + seduti un passo! + insomma: lei conosce l' usciere? + maggiore di 4: seduti il passo! + insomma: + seduti + noi condividiamo converge con + vero per vero meno un sogno per il sogno più la destinazione, + 2 per il vero per il sogno più la finta, + il passo più 1, + destinazione, finta + innocente! + e facevate le merende insieme + e facevate le merende insieme il nostro signore Gesù dico io! + +idromassaggiatore Canessa ancora con il vero Canessa, un sogno Canessa innocente + seduti noi condividiamo converge con vero, sogno, 0, vero, sogno innocente! + +idromassaggiatore poeticamente con + mino Canessa, mano Canessa, piede Canessa, + fuochino Canessa, mono Canessa, pastene Canessa innocente + venga ispettore, Vanni è amico di 10 + venga una pulitina, Canessa è amico di mino + allora + fuochino è amico di fuochino più pastene + allora + mino è amico di mino più piede + noi condividiamo densa con noi condividiamo + il nostro signore Gesùta come sempre e + ancora con mino, fuochino innocente innocente il nostro signore Gesù no eh! Lo ripeto + si calmi, se mino minore di mano + mino è amico di la pulitina + ispettore è espulso dall'aula + si calmi, se fuochino minore di mono + +idromassaggiatore pavido con + vero Canessa, l'immagine Canessa, + la grandezza Canessa, il finale Canessa il nostro signore Gesù come sempre + innocente + noi condividiamo poeticamente con + vero, vero più la grandezza per 78, grandezza, + immagine, immagine più il finale per 40, il finale + innocente + +Tutti in piedi + noi condividiamo pavido con + -2.3, -1.3, 0.05, 0.07 + innocente diff --git a/examples/mandelbrot.mc b/examples/mandelbrot.mc deleted file mode 100644 index 01ef7a4..0000000 --- a/examples/mandelbrot.mc +++ /dev/null @@ -1,40 +0,0 @@ -blinda la supercazzola densa con cofandina Sassaroli o scherziamo? -voglio una zingarata, Mascetti bitumando la confandina. -che cos'è la cofandina? maggiore di 8: zingarata come fosse 32 -o magari maggiore di 4: zingarata come fosse 46 o magari maggiore di 2: -zingarata come fosse 43 o tarapia tapioco: zingarata come fosse 42 -e velocità di esecuzione, zingarata a posterdati - -blinda la supercazzola Sassaroli converge con vero Sassaroli, sogno Sassaroli, -passo Necchi, destinazione Sassaroli, finta Sassaroli o scherziamo? - -voglio lo sci, Sassaroli come se fosse vero per vero più sogno per sogno -che cos'è il passo? maggiore di 255: vaffanzum un passo! -o tarapia tapioco: che cos'è lo sci? maggiore di 4: vaffanzum il passo! -o tarapia tapioco: vaffanzum prematurata la supercazzola converge con -vero per vero meno un sogno per il sogno più la destinazione, 2 per il vero -per il sogno più la finta, il passo più 1, destinazione, finta o scherziamo?! -e velocità di esecuzione, e velocità di esecuzione bitumata dico io! - -blinda la supercazzola Sassaroli ancora con il vero Sassaroli, -un sogno Sassaroli o scherziamo? vaffanzum prematurata la supercazzola converge -con vero, sogno, 0, vero, sogno o scherziamo?! - -blinda la supercazzola antanizzata con mino Sassaroli, mano Sassaroli, -piede Sassaroli, fuochino Sassaroli, mono Sassaroli, pastene Sassaroli o scherziamo? -voglio ispettore, Mascetti come se fosse 10 voglio una pulitina, Sassaroli -come fosse mino stuzzica fuochino come se fosse fuochino più pastene stuzzica -mino come se fosse mino più piede prematurata la supercazzola densa con bituma e -prematurata la supercazzola bitumata come sempre e -ancora con mino, fuochino o scherziamo? o scherziamo? bituma no eh! Lo ripeto -e brematura anche, se mino minore di mano mino come se fosse la pulitina -ispettore a posterdati e brematura anche, se fuochino minore di mono - -blinda la supercazzola cofandina con vero Sassaroli, l'immagine Sassaroli, -la grandezza Sassaroli, il finale Sassaroli o scherziamo? bituma come sempre -prematurata la supercazzola antanizzata con vero, vero più la grandezza -per 78, grandezza, immagine, immagine più il finale per 40, il finale -o scherziamo? - -Lei ha clacsonato prematurata la supercazzola cofandina con --2.3, -1.3, 0.05, 0.07 o scherziamo? diff --git a/examples/mandelbrot.pc b/examples/mandelbrot.pc new file mode 100644 index 0000000..8048e9c --- /dev/null +++ b/examples/mandelbrot.pc @@ -0,0 +1,63 @@ +idromassaggiatore densa con pavido Canessa innocente +venga una testimone, Vanni +lei conosce il pavido? +maggiore di 8: testimone è amico di 32 +o merenda maggiore di 4: testimone è amico di 46 +o merenda maggiore di 2: testimone è amico di 43 +insomma: testimone è amico di 42 +e facevate le merende insieme +testimone è espulso dall'aula + +idromassaggiatore Canessa converge con +vero Canessa, sogno Canessa, passo Pacciani, +destinazione Canessa, finta Canessa innocente +venga l' usciere, Canessa è amico di vero per vero più sogno per sogno il nostro signore Gesù quello nautico però +lei conosce il passo? +maggiore di 255: +seduti un passo! +insomma: lei conosce l' usciere? +maggiore di 4: seduti il passo! +insomma: +seduti +noi condividiamo converge con +vero per vero meno un sogno per il sogno più la destinazione, +2 per il vero per il sogno più la finta, +il passo più 1, +destinazione, finta +innocente! +e facevate le merende insieme +e facevate le merende insieme il nostro signore Gesù dico io! + +idromassaggiatore Canessa ancora con il vero Canessa, un sogno Canessa innocente +seduti noi condividiamo converge con vero, sogno, 0, vero, sogno innocente! + +idromassaggiatore poeticamente con +mino Canessa, mano Canessa, piede Canessa, +fuochino Canessa, mono Canessa, pastene Canessa innocente +venga ispettore, Vanni è amico di 10 +venga una pulitina, Canessa è amico di mino +allora +fuochino è amico di fuochino più pastene +allora +mino è amico di mino più piede +noi condividiamo densa con noi condividiamo +il nostro signore Gesùta come sempre e +ancora con mino, fuochino innocente innocente il nostro signore Gesù no eh! Lo ripeto +si calmi, se mino minore di mano +mino è amico di la pulitina +ispettore è espulso dall'aula +si calmi, se fuochino minore di mono + +idromassaggiatore pavido con +vero Canessa, l'immagine Canessa, +la grandezza Canessa, il finale Canessa il nostro signore Gesù come sempre +innocente +noi condividiamo poeticamente con +vero, vero più la grandezza per 78, grandezza, +immagine, immagine più il finale per 40, il finale +innocente + +Tutti in piedi +noi condividiamo pavido con +-2.3, -1.3, 0.05, 0.07 +innocente diff --git a/examples/primes.beauty.mc b/examples/primes.beauty.mc deleted file mode 100644 index 24509d4..0000000 --- a/examples/primes.beauty.mc +++ /dev/null @@ -1,20 +0,0 @@ -Lei ha clacsonato - voglio uno, Necchi come se fosse 1 - voglio antani, Necchi come se fosse uno - voglio il massimo, Necchi come se fosse antani per 100 - antani per 2 a posterdati - stuzzica - antani come se fosse antani più uno - voglio l'amico, Necchi come se fosse 2 - voglio un controllo, Melandri come se fosse uno - stuzzica - voglio vicino, Necchi come se fosse antani diviso l'amico per un amico - che cos'è antani? vicino: - controllo come se fosse 0 - e velocità di esecuzione - amico come se fosse amico più uno - e brematura anche, se amico minore di antani - che cos'è il controllo? uno: - antani a posterdati - e velocità di esecuzione - e brematura anche, se antani minore del massimo diff --git a/examples/primes.beauty.pc b/examples/primes.beauty.pc new file mode 100644 index 0000000..91fcca3 --- /dev/null +++ b/examples/primes.beauty.pc @@ -0,0 +1,20 @@ +Tutti in piedi + venga uno, Pacciani è amico di 1 + venga amico, Pacciani è amico di uno + venga il massimo, Pacciani è amico di amico per 100 + amico per 2 è espulso dall'aula + allora + amico è amico di amico più uno + venga l'amico, Pacciani è amico di 2 + venga un controllo, Lotti è amico di uno + allora + venga vicino, Pacciani è amico di amico diviso l'amico per un amico + lei conosce amico? vicino: + controllo è amico di 0 + e facevate le merende insieme + amico è amico di amico più uno + si calmi, se amico minore di amico + lei conosce il controllo? uno: + amico è espulso dall'aula + e facevate le merende insieme + si calmi, se amico minore del massimo diff --git a/examples/primes.mc b/examples/primes.mc deleted file mode 100644 index ec2a730..0000000 --- a/examples/primes.mc +++ /dev/null @@ -1,11 +0,0 @@ -Lei ha clacsonato - -voglio uno, Necchi come se fosse 1 voglio antani, Necchi come se fosse uno, -voglio il massimo, Necchi come se fosse antani per 100 antani per 2 a posterdati -stuzzica antani come se fosse antani più uno, voglio l'amico, Necchi -come se fosse 2 voglio un controllo, Melandri come se fosse uno stuzzica -voglio vicino, Necchi come se fosse antani diviso l'amico per un amico, -che cos'è antani? vicino: controllo come se fosse 0 e velocità di esecuzione, -amico come se fosse amico più uno e brematura anche, se amico minore di antani, -che cos'è il controllo? uno: antani a posterdati e velocità di esecuzione -e brematura anche, se antani minore del massimo diff --git a/examples/primes.pc b/examples/primes.pc new file mode 100644 index 0000000..aa20f79 --- /dev/null +++ b/examples/primes.pc @@ -0,0 +1,11 @@ +Tutti in piedi + +venga uno, Pacciani è amico di 1 venga amico, Pacciani è amico di uno, +venga il massimo, Pacciani è amico di amico per 100 amico per 2 è espulso dall'aula +allora amico è amico di amico più uno, venga l'amico, Pacciani +è amico di 2 venga un controllo, Lotti è amico di uno allora +venga vicino, Pacciani è amico di amico diviso l'amico per un amico, +lei conosce amico? vicino: controllo è amico di 0 e facevate le merende insieme, +amico è amico di amico più uno si calmi, se amico minore di amico, +lei conosce il controllo? uno: amico è espulso dall'aula e facevate le merende insieme +si calmi, se amico minore del massimo diff --git a/examples/return.mc b/examples/return.mc deleted file mode 100644 index 0e47fbb..0000000 --- a/examples/return.mc +++ /dev/null @@ -1,5 +0,0 @@ -Lei ha clacsonato - voglio antani, Necchi come se fosse 2 - stuzzica - vaffanzum! - e brematura anche, se antani per 2 diff --git a/examples/return.pc b/examples/return.pc new file mode 100644 index 0000000..2bbf430 --- /dev/null +++ b/examples/return.pc @@ -0,0 +1,5 @@ +Tutti in piedi + venga mario, Pacciani è amico di 2 + allora + seduti! + si calmi, se mario per 2 diff --git a/examples/syntax.beauty.mc b/examples/syntax.beauty.mc deleted file mode 100644 index 4d180bc..0000000 --- a/examples/syntax.beauty.mc +++ /dev/null @@ -1,46 +0,0 @@ -# This is a beautified version of test.mc -# -# This program will produce not-compilable output, it's used to test -# all the features of the compiler, including those that are not yet ready. - -bituma per caso una piccola prova? - -Lei ha clacsonato - voglio il dito, conte Mascetti - voglio antani, Necchi come fosse 2 - voglio troppo, Melandri - - stuzzica - il dito come fosse antani - e brematura anche, se vicesindaco maggiore di antani - - vicesindaco come se fosse antani con scappellamento a destra per 2 - - che cos'è il genio? - fantasia: - vicesindaco come fosse vicesindaco per antani, - o magari intuizione: - mi porga il cappellano, - zingarata come fosse cappellano più uno, - zingarata a posterdati, - o magari maggiore di mobiletto: - genio a posterdati, - o tarapia tapioco: - mi porga il cappello - e velocità di esecuzione - - vicesindaco a posterdati - mi porga il vicesindaco, - - brematurata la supercazzola tombale con alfio, serio o scherziamo? - - avvertite don ulrico, - ho visto la signora! - - vicesindaco come se fosse brematurata la supercazzola avanti con il vicesindaco o scherziamo, - vaffanzum 0! - -blinda la supercazzola Necchi antanizzata con alfio Mascetti, barilotto Necchi o scherziamo? - vaffanzum alfio meno 2! - -bituma al finale? diff --git a/examples/syntax.beauty.pc b/examples/syntax.beauty.pc new file mode 100644 index 0000000..9521cf7 --- /dev/null +++ b/examples/syntax.beauty.pc @@ -0,0 +1,46 @@ +# This is a beautified version of test.mc +# +# This program will produce not-compilable output, it's used to test +# all the features of the compiler, including those that are not yet ready. + +il nostro signore Gesù per caso una piccola prova? + +Tutti in piedi + venga il dito, conte Vanni + venga antani, Pacciani è amico di 2 + venga troppo, Lotti + + allora + il dito è amico di antani + si calmi, se giudice maggiore di antani + + giudice è amico di firenze con saluto romano a destra per 2 + + lei conosce il genio? + fantasia: + giudice è amico di giudice per antani, + o merenda intuizione: + chiamo a testimoniare il cappellano, + zingarata è amico di cappellano più uno, + zingarata è espulso dall'aula, + o merenda maggiore di mobiletto: + genio è espulso dall'aula, + insomma: + chiamo a testimoniare il cappello + e facevate le merende insieme + + giudice è espulso dall'aula + chiamo a testimoniare il giudice, + + noi condividiamo tombale con alfio, serio innocente + + viva idduce, + ma cosa dice la signora! + + giudice è amico di noi condividiamo avanti con il giudice o scherziamo, + seduti 0! + +idromassaggiatore Pacciani poeticamente con alfio Vanni, barilotto Pacciani innocente + seduti alfio meno 2! + +il nostro signore Gesù al finale? diff --git a/examples/syntax.mc b/examples/syntax.mc deleted file mode 100644 index 911d84a..0000000 --- a/examples/syntax.mc +++ /dev/null @@ -1,14 +0,0 @@ -bituma per caso una piccola prova? -Lei ha clacsonato voglio il dito, conte Mascetti, voglio antani, Necchi -come fosse 2, voglio troppo, Melandri, stuzzica il dito come fosse antani -e brematura anche, se vicesindaco maggiore di antani vicesindaco come se fosse -antani con scappellamento a destra per 2, che cos'è il genio? fantasia: -vicesindaco come fosse vicesindaco per antani, o magari intuizione: -mi porga il cappellano, zingarata come fosse cappellano più uno, zingarata -a posterdati, o magari maggiore di mobiletto: genio a posterdati, -o tarapia tapioco: mi porga il cappello e velocità di esecuzione, -vicesindaco a posterdati, mi porga il vicesindaco, brematurata la supercazzola -tombale con alfio, serio o scherziamo? avvertite don ulrico, ho visto la signora! -vicesindaco come se fosse brematurata la supercazzola avanti con il vicesindaco -o scherziamo, vaffanzum 0! blinda la supercazzola Necchi antanizzata con alfio -Mascetti o scherziamo? vaffanzum alfio meno 2! bituma al finale? diff --git a/examples/syntax.pc b/examples/syntax.pc new file mode 100644 index 0000000..a8bdcce --- /dev/null +++ b/examples/syntax.pc @@ -0,0 +1,14 @@ +il nostro signore Gesù per caso una piccola prova? +Tutti in piedi venga il dito, conte Vanni, venga antani, Pacciani +è amico di 2, venga troppo, Lotti, allora il dito è amico di firenze +si calmi, se giudice maggiore di firenze giudice è amico di +firenze con saluto romano a destra per 2, lei conosce il genio? fantasia: +giudice è amico di giudice per antani, o merenda intuizione: +chiamo a testimoniare il cappellano, zingarata è amico di cappellano più uno, zingarata +è espulso dall'aula, o merenda maggiore di mobiletto: genio è espulso dall'aula, +insomma: chiamo a testimoniare il cappello e facevate le merende insieme, +giudice è espulso dall'aula, chiamo a testimoniare il giudice, noi condividiamo +tombale con alfio, serio innocente viva idduce, ma cosa dice la signora! +giudice è amico di noi condividiamo avanti con il giudice +o scherziamo, seduti 0! idromassaggiatore Pacciani poeticamente con alfio +Vanni innocente seduti alfio meno 2! il nostro signore Gesù al finale? diff --git a/examples/turtle/Makefile b/examples/turtle/Makefile index a37875b..30cc5d3 100644 --- a/examples/turtle/Makefile +++ b/examples/turtle/Makefile @@ -1,4 +1,4 @@ -MCC=mcc +PCC=pcc all: turtle @@ -8,7 +8,7 @@ clean: turtle.mc:; %.mc.o: %.mc - $(MCC) -c $< -o $@ + $(PCC) -c $< -o $@ turtle: turtle.mc.o turtle.cpp $(CXX) -std=c++11 $^ -lcairo -o $@ diff --git a/examples/turtle/turtle.mc b/examples/turtle/turtle.mc deleted file mode 100644 index d8c04f9..0000000 --- a/examples/turtle/turtle.mc +++ /dev/null @@ -1,10 +0,0 @@ -blinda la supercazzola cofandina con x Necchi, y Necchi o scherziamo? -blinda la supercazzola pastene con w Sassaroli o scherziamo? -blinda la supercazzola ispettore con x Sassaroli, y Sassaroli o scherziamo? -blinda la supercazzola barilotto o scherziamo? - -Lei ha clacsonato - prematurata la supercazzola cofandina con 200, 200 o scherziamo? - prematurata la supercazzola pastene con 3 o scherziamo? - prematurata la supercazzola ispettore con 200, 200 o scherziamo? - prematurata la supercazzola barilotto o scherziamo? diff --git a/examples/turtle/turtle.pc b/examples/turtle/turtle.pc new file mode 100644 index 0000000..94276ee --- /dev/null +++ b/examples/turtle/turtle.pc @@ -0,0 +1,10 @@ +idromassaggiatore firenze con x Pacciani, y Pacciani innocente +idromassaggiatore arezzo con w Canessa innocente +idromassaggiatore prato con x Canessa, y Canessa innocente +idromassaggiatore viareggio innocente + +Tutti in piedi + noi condividiamo firenze con 200, 200 innocente + noi condividiamo arezzo con 3 innocente + noi condividiamo prato con 200, 200 innocente + noi condividiamo viareggio innocente diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 1061889..44d866c 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -1,11 +1,11 @@ # Copyright 2017 the Monicelli project authors. All rights reserved. # Use of this source code is governed by a GPLv3 license, see LICENSE.txt. -set(MONICELLI_ARCH "x86" CACHE STRING "Target architecture for Monicelli.") -set(MONICELLI_LLVM_VERSION 14 CACHE STRING "LLVM version for Monicelli.") -set(MONICELLI_LINKER ON CACHE BOOL "Enable the Monicelli linker. Requires POSIX.") +set(PACCIANI_ARCH "x86" CACHE STRING "Target architecture for Pacciani.") +set(PACCIANI_LLVM_VERSION 14 CACHE STRING "LLVM version for Pacciani.") +set(PACCIANI_LINKER ON CACHE BOOL "Enable the Pacciani linker. Requires POSIX.") -find_package(LLVM "${MONICELLI_LLVM_VERSION}" REQUIRED CONFIG) +find_package(LLVM "${PACCIANI_LLVM_VERSION}" REQUIRED CONFIG) find_package(Ragel REQUIRED) add_ragel_library(lexer @@ -15,7 +15,7 @@ add_ragel_library(lexer lexer.def ) -add_executable(mcc +add_executable(pcc main.cpp asmgen.cpp codegen.cpp @@ -34,27 +34,27 @@ add_executable(mcc operators.def ) -set_target_properties(mcc lexer +set_target_properties(pcc lexer PROPERTIES CXX_STANDARD 14 CXX_STANDARD_REQUIRED true ) -target_include_directories(mcc PRIVATE ${LLVM_INCLUDE_DIRS}) +target_include_directories(pcc PRIVATE ${LLVM_INCLUDE_DIRS}) -target_compile_definitions(mcc PRIVATE ${LLVM_DEFINITIONS}) +target_compile_definitions(pcc PRIVATE ${LLVM_DEFINITIONS}) -target_link_libraries(mcc PRIVATE lexer) +target_link_libraries(pcc PRIVATE lexer) -llvm_config(mcc +llvm_config(pcc core support - "${MONICELLI_ARCH}codegen" - "${MONICELLI_ARCH}asmparser" + "${PACCIANI_ARCH}codegen" + "${PACCIANI_ARCH}asmparser" ) -if (MONICELLI_LINKER) - target_compile_definitions(mcc PRIVATE MONICELLI_ENABLE_LINKER) +if (PACCIANI_LINKER) + target_compile_definitions(pcc PRIVATE PACCIANI_ENABLE_LINKER) endif() -install(TARGETS mcc RUNTIME DESTINATION bin) +install(TARGETS pcc RUNTIME DESTINATION bin) diff --git a/src/asmgen.cpp b/src/asmgen.cpp index b274ad5..181e4a0 100644 --- a/src/asmgen.cpp +++ b/src/asmgen.cpp @@ -16,13 +16,13 @@ #include #include -#ifdef MONICELLI_ENABLE_LINKER +#ifdef PACCIANI_ENABLE_LINKER #include #include #include #endif -namespace monicelli { +namespace pacciani { void registerTargets() { llvm::InitializeNativeTarget(); @@ -68,7 +68,7 @@ void writeAssembly(const std::string& to_filename, llvm::Module* module, output.flush(); } -#ifdef MONICELLI_ENABLE_LINKER +#ifdef PACCIANI_ENABLE_LINKER static const char* C_COMPILER = "c99"; @@ -120,4 +120,4 @@ void linkAssembly(const std::string& output_name, const std::vector #endif -} // namespace monicelli +} // namespace pacciani diff --git a/src/asmgen.h b/src/asmgen.h index 4d40def..8ec5af6 100644 --- a/src/asmgen.h +++ b/src/asmgen.h @@ -1,5 +1,5 @@ -#ifndef MONICELLI_ASMGEN_H -#define MONICELLI_ASMGEN_H +#ifndef PACCIANI_ASMGEN_H +#define PACCIANI_ASMGEN_H // Copyright 2017 the Monicelli project authors. All rights reserved. // Use of this source code is governed by a GPLv3 license, see LICENSE.txt. @@ -10,7 +10,7 @@ #include #include -namespace monicelli { +namespace pacciani { void registerTargets(); @@ -20,11 +20,11 @@ llvm::TargetMachine* getTargetMachine(const std::string& triple, const std::stri void writeAssembly(const std::string& to_filename, llvm::Module* module, llvm::TargetMachine* target_machine); -#ifdef MONICELLI_ENABLE_LINKER +#ifdef PACCIANI_ENABLE_LINKER void linkAssembly(const std::string& output_name, const std::vector& object_files, bool keep_object_files = false); #endif -} // namespace monicelli +} // namespace pacciani #endif diff --git a/src/ast-printer.cpp b/src/ast-printer.cpp index 71a590b..bd118f7 100644 --- a/src/ast-printer.cpp +++ b/src/ast-printer.cpp @@ -6,7 +6,7 @@ #include -using namespace monicelli; +using namespace pacciani; namespace { @@ -257,11 +257,11 @@ private: } // namespace -namespace monicelli { +namespace pacciani { void printAst(std::ostream& stream, const AstNode* node) { AstPrinter printer{stream}; printer.visit(node); } -} // namespace monicelli +} // namespace pacciani diff --git a/src/ast-printer.h b/src/ast-printer.h index a8bff9c..f290505 100644 --- a/src/ast-printer.h +++ b/src/ast-printer.h @@ -1,17 +1,17 @@ -#ifndef MONICELLI_AST_PRINTER_H -#define MONICELLI_AST_PRINTER_H +#ifndef PACCIANI_AST_PRINTER_H +#define PACCIANI_AST_PRINTER_H // Copyright 2017 the Monicelli project authors. All rights reserved. // Use of this source code is governed by a GPLv3 license, see LICENSE.txt. #include -namespace monicelli { +namespace pacciani { class AstNode; void printAst(std::ostream& stream, const AstNode* node); -} // namespace monicelli +} // namespace pacciani #endif diff --git a/src/ast-visitor.h b/src/ast-visitor.h index 5e49b6b..c209aa7 100644 --- a/src/ast-visitor.h +++ b/src/ast-visitor.h @@ -1,5 +1,5 @@ -#ifndef MONICELLI_AST_VISITOR_H -#define MONICELLI_AST_VISITOR_H +#ifndef PACCIANI_AST_VISITOR_H +#define PACCIANI_AST_VISITOR_H // Copyright 2017 the Monicelli project authors. All rights reserved. // Use of this source code is governed by a GPLv3 license, see LICENSE.txt. @@ -8,7 +8,7 @@ #include "ast.h" #include "errors.h" -namespace monicelli { +namespace pacciani { #define DECLARE_CLASS(NAME) class NAME; @@ -43,6 +43,6 @@ private: #undef DEFAULT_VISIT #undef DISPATCH_CONST_STATEMENT -} // namespace monicelli +} // namespace pacciani #endif diff --git a/src/ast.cpp b/src/ast.cpp index 7ba9659..9c271e3 100644 --- a/src/ast.cpp +++ b/src/ast.cpp @@ -4,7 +4,7 @@ #include "ast.h" #include "errors.h" -namespace monicelli { +namespace pacciani { // static const char* BinaryExpression::getOperatorRepresentation(BinaryExpression::Type type) { @@ -19,4 +19,4 @@ const char* BinaryExpression::getOperatorRepresentation(BinaryExpression::Type t } } -} // namespace monicelli +} // namespace pacciani diff --git a/src/ast.def b/src/ast.def index cf3bba7..75bee9e 100644 --- a/src/ast.def +++ b/src/ast.def @@ -1,5 +1,5 @@ -#ifndef MONICELLI_AST_DEF -#define MONICELLI_AST_DEF +#ifndef PACCIANI_AST_DEF +#define PACCIANI_AST_DEF // Copyright 2017 the Monicelli project authors. All rights reserved. // Use of this source code is governed by a GPLv3 license, see LICENSE.txt. diff --git a/src/ast.h b/src/ast.h index cb8e3b3..f050c49 100644 --- a/src/ast.h +++ b/src/ast.h @@ -1,5 +1,5 @@ -#ifndef MONICELLI_AST_H -#define MONICELLI_AST_H +#ifndef PACCIANI_AST_H +#define PACCIANI_AST_H // Copyright 2017 the Monicelli project authors. All rights reserved. // Use of this source code is governed by a GPLv3 license, see LICENSE.txt. @@ -13,7 +13,7 @@ #include #include -namespace monicelli { +namespace pacciani { class Variable final : public LocationMixin { public: @@ -443,6 +443,6 @@ private: friend class Parser; }; -} // namespace monicelli +} // namespace pacciani #endif diff --git a/src/codegen.cpp b/src/codegen.cpp index b1b96a2..0edaeaa 100644 --- a/src/codegen.cpp +++ b/src/codegen.cpp @@ -26,7 +26,7 @@ #include #include -using namespace monicelli; +using namespace pacciani; namespace { @@ -758,7 +758,7 @@ llvm::Type* ResultTypeCalculator::visitFunctionCallExpression(const FunctionCall return f->getReturnType(); } -namespace monicelli { +namespace pacciani { std::unique_ptr generateIR(llvm::LLVMContext& context, Module* ast) { IRGenerator codegen{context, ast->getSourceFilename()}; @@ -785,4 +785,4 @@ void printIR(std::ostream& stream, llvm::Module* module) { module->print(llvm_stream, nullptr); } -} // namespace monicelli +} // namespace pacciani diff --git a/src/codegen.def b/src/codegen.def index 876bce5..70f4dcb 100644 --- a/src/codegen.def +++ b/src/codegen.def @@ -1,5 +1,5 @@ -#ifndef MONICELLI_CODEGEN_DEF -#define MONICELLI_CODEGEN_DEF +#ifndef PACCIANI_CODEGEN_DEF +#define PACCIANI_CODEGEN_DEF // Copyright 2017 the Monicelli project authors. All rights reserved. // Use of this source code is governed by a GPLv3 license, see LICENSE.txt. diff --git a/src/codegen.h b/src/codegen.h index 55705bc..78d2652 100644 --- a/src/codegen.h +++ b/src/codegen.h @@ -1,5 +1,5 @@ -#ifndef MONICELLI_CODEGEN_H -#define MONICELLI_CODEGEN_H +#ifndef PACCIANI_CODEGEN_H +#define PACCIANI_CODEGEN_H // Copyright 2017 the Monicelli project authors. All rights reserved. // Use of this source code is governed by a GPLv3 license, see LICENSE.txt. @@ -8,7 +8,7 @@ #include "llvm/IR/Module.h" #include -namespace monicelli { +namespace pacciani { class Module; @@ -18,6 +18,6 @@ void runFunctionOptimizer(llvm::Module* module); void printIR(std::ostream& stream, llvm::Module* module); -} // namespace monicelli +} // namespace pacciani #endif diff --git a/src/errors.cpp b/src/errors.cpp index d8aca5a..796b208 100644 --- a/src/errors.cpp +++ b/src/errors.cpp @@ -8,7 +8,7 @@ #include #include -namespace monicelli { +namespace pacciani { [[noreturn]] void UNREACHABLE(const std::string& message) { std::cerr << message << '\n'; @@ -49,4 +49,4 @@ void ErrorReportingMixin::printErrorLocation(std::ostream& stream, const Locatio stream << '\n' << from << ": error: "; } -} // namespace monicelli +} // namespace pacciani diff --git a/src/errors.h b/src/errors.h index 2910bfa..405ae83 100644 --- a/src/errors.h +++ b/src/errors.h @@ -1,5 +1,5 @@ -#ifndef MONICELLI_ERRORS_H -#define MONICELLI_ERRORS_H +#ifndef PACCIANI_ERRORS_H +#define PACCIANI_ERRORS_H // Copyright 2017 the Monicelli project authors. All rights reserved. // Use of this source code is governed by a GPLv3 license, see LICENSE.txt. @@ -10,7 +10,7 @@ #include #include -namespace monicelli { +namespace pacciani { [[noreturn]] void UNREACHABLE(const std::string& message); @@ -54,6 +54,6 @@ private: std::string source_filename_; }; -} // namespace monicelli +} // namespace pacciani #endif diff --git a/src/iterators.h b/src/iterators.h index f4f79f9..3e04f8e 100644 --- a/src/iterators.h +++ b/src/iterators.h @@ -1,5 +1,5 @@ -#ifndef MONICELLI_ITERATORS_H -#define MONICELLI_ITERATORS_H +#ifndef PACCIANI_ITERATORS_H +#define PACCIANI_ITERATORS_H // Copyright 2017 the Monicelli project authors. All rights reserved. // Use of this source code is governed by a GPLv3 license, see LICENSE.txt. @@ -7,7 +7,7 @@ #include #include -namespace monicelli { +namespace pacciani { template class PointerVectorConstIter final { public: @@ -43,6 +43,6 @@ private: IterT end_; }; -} // namespace monicelli +} // namespace pacciani #endif diff --git a/src/lexer.cpp b/src/lexer.cpp index 4180cd1..a9860dc 100644 --- a/src/lexer.cpp +++ b/src/lexer.cpp @@ -6,7 +6,7 @@ #include -namespace monicelli { +namespace pacciani { static const char* builtinTypeToString(Token::BuiltinTypeValue type) { switch (type) { @@ -99,4 +99,4 @@ void Lexer::advanceBuffer() { buffer_.imbue(input_); } -} // namespace monicelli +} // namespace pacciani diff --git a/src/lexer.def b/src/lexer.def index a14aa5c..c413396 100644 --- a/src/lexer.def +++ b/src/lexer.def @@ -1,5 +1,5 @@ -#ifndef MONICELLI_LEXER_DEF -#define MONICELLI_LEXER_DEF +#ifndef PACCIANI_LEXER_DEF +#define PACCIANI_LEXER_DEF // Copyright 2017 the Monicelli project authors. All rights reserved. // Use of this source code is governed by a GPLv3 license, see LICENSE.txt. diff --git a/src/lexer.h b/src/lexer.h index d71fa4a..1a51ea9 100644 --- a/src/lexer.h +++ b/src/lexer.h @@ -1,5 +1,5 @@ -#ifndef MONICELLI_LEXER_H -#define MONICELLI_LEXER_H +#ifndef PACCIANI_LEXER_H +#define PACCIANI_LEXER_H // Copyright 2017 the Monicelli project authors. All rights reserved. // Use of this source code is governed by a GPLv3 license, see LICENSE.txt. @@ -13,7 +13,7 @@ #include #include -namespace monicelli { +namespace pacciani { class Token final : public LocationMixin { public: @@ -181,6 +181,6 @@ private: bool trace_enabled_; }; -} // namespace monicelli +} // namespace pacciani #endif diff --git a/src/lexer.rl b/src/lexer.rl index aaf3a27..fdfd024 100644 --- a/src/lexer.rl +++ b/src/lexer.rl @@ -13,10 +13,9 @@ accent_u = "u`"|"ù"; accent_vowels = "à"|"è"|"é"|"ì"|"ò"|"ó"|"ù"| [aeiou] "`"; articles = "il"|"lo"|"la"|"l'"|"i"|"gli"|"le"|"un"|"un'"|"una"|"dei"|"delle"; di = "di"|"dei"|"del"|"della"|"dell'"; -prematura = [bp] "rematura"; supercazzola = "supercazzo" [lr] "a"; - -comment = "#"|"bituma"; +comment_start = "il"|"al"|"con"|"per"|"con il"|"per il"; +comment = "#"|(comment_start " "[nN]"ostro "[sS]"ignore "[Gg]"es" accent_u); identifier = (alpha | accent_vowels) (alnum | accent_vowels)*; integer = [+\-]? digit+; float = [+\-]? (digit* "." digit+ | digit+ "."?) [eE] [+\-]? digit+ @@ -41,59 +40,59 @@ initial := |* "meno" => { SET_TOKEN(OP_MINUS); fbreak; }; "per" => { SET_TOKEN(OP_TIMES); fbreak; }; "diviso" => { SET_TOKEN(OP_DIV); fbreak; }; - "con scappellamento a" => { advanceColumn(); fgoto shift; }; + "con saluto romano a" => { advanceColumn(); fgoto shift; }; "minore " di => { SET_TOKEN(OP_LT); fbreak; }; "maggiore " di => { SET_TOKEN(OP_GT); fbreak; }; "minore " "o "? "uguale " ("a"|di) => { SET_TOKEN(OP_LE); fbreak; }; "maggiore " "o "? "uguale " ("a"|di) => { SET_TOKEN(OP_GE); fbreak; }; - "vaffanzum" => { SET_TOKEN(RETURN); fbreak; }; - "voglio" => { SET_TOKEN(VARDECL); fbreak; }; - "come " ("se "?) "fosse" => { SET_TOKEN(ASSIGN); fbreak; }; - "a posterdati" => { SET_TOKEN(PRINT); fbreak; }; - "mi porga" => { SET_TOKEN(INPUT); fbreak; }; - "ho visto" => { SET_TOKEN(ASSERT); fbreak; }; - "avvertite don ulrico" => { SET_TOKEN(ABORT); fbreak; }; + "seduti" => { SET_TOKEN(RETURN); fbreak; }; + "venga" => { SET_TOKEN(VARDECL); fbreak; }; + accent_e " amico " di => { SET_TOKEN(ASSIGN); fbreak; }; + ("sono"|accent_e) " espuls"[oaei]" dall'aula" => { SET_TOKEN(PRINT); fbreak; }; + "chiamo a testimoniare" => { SET_TOKEN(INPUT); fbreak; }; + "ma cosa dice" => { SET_TOKEN(ASSERT); fbreak; }; + "viva idduce" => { SET_TOKEN(ABORT); fbreak; }; - "stuzzica" => { SET_TOKEN(LOOP_BEGIN); fbreak; }; - "e " prematura " anche, se" => { SET_TOKEN(LOOP_CONDITION); fbreak; }; + "allora" => { SET_TOKEN(LOOP_BEGIN); fbreak; }; + "si calmi, se" => { SET_TOKEN(LOOP_CONDITION); fbreak; }; - "che cos'" accent_e => { SET_TOKEN(BRANCH_CONDITION); fbreak; }; - "o tarapia tapioco" => { SET_TOKEN(BRANCH_ELSE); fbreak; }; - "e velocit" accent_a " di esecuzione" => { SET_TOKEN(BRANCH_END); fbreak; }; - "o magari" => { SET_TOKEN(CASE_END); fbreak; }; + "lei conosce" => { SET_TOKEN(BRANCH_CONDITION); fbreak; }; + "insomma" => { SET_TOKEN(BRANCH_ELSE); fbreak; }; + "e facevate le merende insieme" => { SET_TOKEN(BRANCH_END); fbreak; }; + "o merenda" => { SET_TOKEN(CASE_END); fbreak; }; - "Lei ha clacsonato" => { SET_TOKEN(ENTRY_POINT); fbreak; }; - "blinda la " supercazzola => { SET_TOKEN(FUN_DECL); fbreak; }; + "Tutti in piedi" => { SET_TOKEN(ENTRY_POINT); fbreak; }; + "idromassaggiatore" => { SET_TOKEN(FUN_DECL); fbreak; }; "con" => { SET_TOKEN(FUN_PARAMS); fbreak; }; - prematura "ta la " supercazzola => { SET_TOKEN(FUN_CALL); fbreak; }; - "o scherziamo" ("?"?) => { SET_TOKEN(FUN_END); fbreak; }; + "noi condividiamo" => { SET_TOKEN(FUN_CALL); fbreak; }; + "innocente" => { SET_TOKEN(FUN_END); fbreak; }; - "Necchi" => { + "Pacciani" => { SET_TOKEN(TYPENAME); token->setBuiltinTypeValue(Token::BUILTIN_TYPE_INTEGER); fbreak; }; - "Mascetti" => { + "Vanni" => { SET_TOKEN(TYPENAME); token->setBuiltinTypeValue(Token::BUILTIN_TYPE_CHAR); fbreak; }; - "Perozzi" => { + "Pucci" => { SET_TOKEN(TYPENAME); token->setBuiltinTypeValue(Token::BUILTIN_TYPE_FLOAT); fbreak; }; - "Melandri" => { + "Lotti" => { SET_TOKEN(TYPENAME); token->setBuiltinTypeValue(Token::BUILTIN_TYPE_BOOL); fbreak; }; - "Sassaroli" => { + "Canessa" => { SET_TOKEN(TYPENAME); token->setBuiltinTypeValue(Token::BUILTIN_TYPE_DOUBLE); fbreak; @@ -134,7 +133,7 @@ initial := |* #include -namespace monicelli { +namespace pacciani { #define SET_TOKEN(NAME) \ do { \ diff --git a/src/location.h b/src/location.h index f4d02a9..81a1659 100644 --- a/src/location.h +++ b/src/location.h @@ -1,12 +1,12 @@ -#ifndef MONICELLI_LOCATION_H -#define MONICELLI_LOCATION_H +#ifndef PACCIANI_LOCATION_H +#define PACCIANI_LOCATION_H // Copyright 2017 the Monicelli project authors. All rights reserved. // Use of this source code is governed by a GPLv3 license, see LICENSE.txt. #include -namespace monicelli { +namespace pacciani { class Location final { public: @@ -54,6 +54,6 @@ static inline bool operator==(const Location& a, const Location& b) { return a.getLine() == b.getLine() && a.getColumn() == b.getColumn(); } -} // namespace monicelli +} // namespace pacciani #endif diff --git a/src/main.cpp b/src/main.cpp index c9577ca..67c0d87 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -13,7 +13,7 @@ #include #include -using namespace monicelli; +using namespace pacciani; int main(int argc, char** argv) { ProgramOptions options = ProgramOptions::fromCommandLine(argc, argv); @@ -35,7 +35,7 @@ int main(int argc, char** argv) { auto target_machine = getTargetMachine(triple, options.getCPU(), options.getCPUFeatures(), options.shouldEmitPIC()); -#ifdef MONICELLI_ENABLE_LINKER +#ifdef PACCIANI_ENABLE_LINKER std::vector object_filenames; object_filenames.reserve(options.input_filenames_size()); #endif @@ -78,12 +78,12 @@ int main(int argc, char** argv) { writeAssembly(object_filename, ir.get(), target_machine); -#ifdef MONICELLI_ENABLE_LINKER +#ifdef PACCIANI_ENABLE_LINKER object_filenames.emplace_back(std::move(object_filename)); #endif } -#ifdef MONICELLI_ENABLE_LINKER +#ifdef PACCIANI_ENABLE_LINKER if (!options.shouldSkipCompilation() && !options.shouldOnlyCompile() && !object_filenames.empty()) { linkAssembly(options.getOutputFilename(), object_filenames); diff --git a/src/operators.def b/src/operators.def index 258e84e..a6cc5cb 100644 --- a/src/operators.def +++ b/src/operators.def @@ -1,5 +1,5 @@ -#ifndef MONICELLI_OPERATORS_DEF -#define MONICELLI_OPERATORS_DEF +#ifndef PACCIANI_OPERATORS_DEF +#define PACCIANI_OPERATORS_DEF // Copyright 2017 the Monicelli project authors. All rights reserved. // Use of this source code is governed by a GPLv3 license, see LICENSE.txt. diff --git a/src/options.cpp b/src/options.cpp index 07a954c..23f16c7 100644 --- a/src/options.cpp +++ b/src/options.cpp @@ -7,7 +7,7 @@ #include #include -namespace monicelli { +namespace pacciani { // static ProgramOptions ProgramOptions::fromCommandLine(int argc, char** argv) { @@ -41,7 +41,7 @@ ProgramOptions ProgramOptions::fromCommandLine(int argc, char** argv) { options.emit_pic_ = false; continue; } -#ifdef MONICELLI_ENABLE_LINKER +#ifdef PACCIANI_ENABLE_LINKER if (strcmp(argv[i], "-c") == 0 || strcmp(argv[i], "--only-compile") == 0) { options.compile_only_ = true; continue; @@ -71,7 +71,7 @@ ProgramOptions ProgramOptions::fromCommandLine(int argc, char** argv) { } options.input_filenames_.emplace_back(argv[i]); } -#ifndef MONICELLI_ENABLE_LINKER +#ifndef PACCIANI_ENABLE_LINKER options.compile_only_ = true; #endif return options; @@ -82,7 +82,7 @@ void ProgramOptions::printHelp(const char* program_name) { std::cout << "Usage: " << program_name << " [options...] [input.mc ...]\n\n" "Options:\n" -#ifdef MONICELLI_ENABLE_LINKER +#ifdef PACCIANI_ENABLE_LINKER " --only-compile, -c : Compile only, do not link.\n" #endif " --no-compile, -n : Do not compile, only print (see below).\n" @@ -98,4 +98,4 @@ void ProgramOptions::printHelp(const char* program_name) { exit(0); } -} // namespace monicelli +} // namespace pacciani diff --git a/src/options.h b/src/options.h index 4420724..023733e 100644 --- a/src/options.h +++ b/src/options.h @@ -1,15 +1,15 @@ // Copyright 2017 the Monicelli project authors. All rights reserved. // Use of this source code is governed by a GPLv3 license, see LICENSE.txt. -#ifndef MONICELLI_OPTIONS_H -#define MONICELLI_OPTIONS_H +#ifndef PACCIANI_OPTIONS_H +#define PACCIANI_OPTIONS_H #include "iterators.h" #include #include -namespace monicelli { +namespace pacciani { class ProgramOptions final { public: @@ -55,6 +55,6 @@ private: bool emit_pic_; }; -} // namespace monicelli +} // namespace pacciani #endif diff --git a/src/parser.cpp b/src/parser.cpp index 05393ce..4d9ea1f 100644 --- a/src/parser.cpp +++ b/src/parser.cpp @@ -4,7 +4,7 @@ #include "parser.h" #include "errors.h" -namespace monicelli { +namespace pacciani { std::unique_ptr Parser::parseModule() { std::unique_ptr module{new Module}; @@ -539,4 +539,4 @@ std::unique_ptr Parser::getNextToken() { return token; } -} // namespace monicelli +} // namespace pacciani diff --git a/src/parser.h b/src/parser.h index 0d351c0..5ed0494 100644 --- a/src/parser.h +++ b/src/parser.h @@ -1,8 +1,8 @@ // Copyright 2017 the Monicelli project authors. All rights reserved. // Use of this source code is governed by a GPLv3 license, see LICENSE.txt. -#ifndef MONICELLI_PARSER_H -#define MONICELLI_PARSER_H +#ifndef PACCIANI_PARSER_H +#define PACCIANI_PARSER_H #include "ast.h" #include "errors.h" @@ -13,7 +13,7 @@ #include #include -namespace monicelli { +namespace pacciani { class Parser final : public ErrorReportingMixin { public: @@ -68,6 +68,6 @@ private: std::unique_ptr current_token_; }; -} // namespace monicelli +} // namespace pacciani #endif diff --git a/src/support.cpp b/src/support.cpp index 35e17fc..46fd889 100644 --- a/src/support.cpp +++ b/src/support.cpp @@ -3,7 +3,7 @@ #include "support.h" -namespace monicelli { +namespace pacciani { std::string basename(std::string input_filename) { auto base_name_start = input_filename.find_last_of("\\/"); @@ -14,4 +14,4 @@ std::string basename(std::string input_filename) { return input_filename; } -} // namespace monicelli +} // namespace pacciani diff --git a/src/support.h b/src/support.h index e496ebc..892b495 100644 --- a/src/support.h +++ b/src/support.h @@ -1,13 +1,13 @@ // Copyright 2017 the Monicelli project authors. All rights reserved. // Use of this source code is governed by a GPLv3 license, see LICENSE.txt. -#ifndef MONICELLI_SUPPORT_H -#define MONICELLI_SUPPORT_H +#ifndef PACCIANI_SUPPORT_H +#define PACCIANI_SUPPORT_H #include #include -namespace monicelli { +namespace pacciani { #define USE(x) ((void)(x)) @@ -23,6 +23,6 @@ static void print(std::ostream& stream, const First& first, Tail... tail) { std::string basename(std::string input_filename); -} // namespace monicelli +} // namespace pacciani #endif diff --git a/src/types.def b/src/types.def index 62a81dc..a6b5b8e 100644 --- a/src/types.def +++ b/src/types.def @@ -1,5 +1,5 @@ -#ifndef MONICELLI_TYPES_DEF -#define MONICELLI_TYPES_DEF +#ifndef PACCIANI_TYPES_DEF +#define PACCIANI_TYPES_DEF // Copyright 2017 the Monicelli project authors. All rights reserved. // Use of this source code is governed by a GPLv3 license, see LICENSE.txt. @@ -7,10 +7,10 @@ // symbol_name, ir_type, input_format, output_format, src_name, ast_name #define BUILTIN_TYPES(V) \ V(VOID, Void, nullptr, nullptr, "", "void") \ - V(INTEGER, Int32, "%d", "%d\n", "Necchi", "int") \ - V(CHAR, Int8, "%c", "%c", "Mascetti", "char") \ - V(FLOAT, Float, "%f", "%f\n", "Perozzi", "float") \ - V(BOOL, Int1, "%d", "%d\n", "Melandri", "bool") \ - V(DOUBLE, Double, "%lf", "%f\n", "Sassaroli", "double") + V(INTEGER, Int32, "%d", "%d\n", "Pacciani", "int") \ + V(CHAR, Int8, "%c", "%c", "Vanni", "char") \ + V(FLOAT, Float, "%f", "%f\n", "Pucci", "float") \ + V(BOOL, Int1, "%d", "%d\n", "Lotti", "bool") \ + V(DOUBLE, Double, "%lf", "%f\n", "Canessa", "double") #endif