Paccianizing
This commit is contained in:
parent
f7fc90d98d
commit
6cdef34073
|
@ -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")
|
||||
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
# Project related configuration options
|
||||
#---------------------------------------------------------------------------
|
||||
DOXYFILE_ENCODING = UTF-8
|
||||
PROJECT_NAME = "Monicelli"
|
||||
PROJECT_NAME = "Pacciani"
|
||||
PROJECT_NUMBER =
|
||||
PROJECT_BRIEF =
|
||||
PROJECT_LOGO =
|
||||
|
|
279
README.md
279
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 <expression>!
|
||||
seduti <expression>!
|
||||
|
||||
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:
|
||||
|
||||
<what> con scappellamento a <direction> per <bits>
|
||||
<what> con saluto romano a <direction> per <bits>
|
||||
|
||||
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:
|
||||
|
||||
<varname> come fosse <expression>
|
||||
<varname> è amico di <expression>
|
||||
|
||||
|
||||
the alternate spelling `come se fosse` can be used as well.
|
||||
|
||||
The `<expression>` 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 <varname>, <type>
|
||||
venga <varname>, <type>
|
||||
|
||||
an initialization value can be provided:
|
||||
|
||||
voglio <varname>, <type> come se fosse <expression>
|
||||
venga <varname>, <type> è amico di <expression>
|
||||
|
||||
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:
|
||||
|
||||
<expression> a posterdati
|
||||
<expression> è espulso dall'aula
|
||||
|
||||
Conversely, a variable might be read from input using:
|
||||
|
||||
mi porga <varname>
|
||||
chiamo a testimoniare <varname>
|
||||
|
||||
## Loop
|
||||
|
||||
There is only one loop construct, equivalent to a C `do {} while();`, which is
|
||||
defined as follows:
|
||||
|
||||
stuzzica
|
||||
allora
|
||||
<statements>
|
||||
e brematura anche, se <condition>
|
||||
si calmi, se <condition>
|
||||
|
||||
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'è <variable>?
|
||||
lei conosce <variable>?
|
||||
<condition>:
|
||||
<statements>
|
||||
o magari <condition>:
|
||||
o merenda <condition>:
|
||||
<statements>
|
||||
o tarapia tapioco:
|
||||
insomma:
|
||||
<statement>
|
||||
e velocità di esecuzione
|
||||
e facevate le merende insieme
|
||||
|
||||
where `<condition>` 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 <condition>:` 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 [<type>] <name> [con <param> <type>[, <param> <type>...]] o scherziamo?
|
||||
idromassaggiatore [<type>] <name> [con <param> <type>[, <param> <type>...]] innocente
|
||||
<statements>
|
||||
|
||||
Where `<type>` 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 <name> [con <expression>[, <expression>...] o scherziamo?
|
||||
noi condividiamo <name> [con <expression>[, <expression>...] 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 <expression>!
|
||||
ma cosa dice <expression>!
|
||||
|
||||
## 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`
|
||||
|
|
|
@ -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 <nome>, <tipo>[, come fosse <espressione>]
|
||||
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 <direzione> 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 <variabile>
|
||||
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
|
||||
<corpo del ciclo>
|
||||
e brematura anche, se <condizione>
|
||||
|
||||
|
||||
*** Costrutto di selezione (switch+if) ***
|
||||
"Che cos'è"
|
||||
È l'unico costrutto di selezione, facente funzione sia di if, sia di switch
|
||||
Sintassi:
|
||||
che cos'è <articolo> <variabileDiControllo>?
|
||||
<ipotesi>:
|
||||
<codice>
|
||||
<ipotesi>:
|
||||
<codice>
|
||||
[tarapia tapioco: #Else/default, opzionale
|
||||
<codice>
|
||||
]
|
||||
e velocità di esecuzione.
|
||||
|
||||
<ipotesi> può essere:
|
||||
* <espressione>:
|
||||
il codice viene eseguito se il risultato dell'espressione è uguale alla variabileDiControllo
|
||||
* <op_confronto> <espressione>:
|
||||
il codice viene eseguito se è vero che: <variabileDiControllo> <op_confronto> <espressione>
|
||||
|
||||
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 <nome> [con <parametro>[, <parametro>]].
|
||||
<codice>
|
||||
O scherziamo?
|
||||
|
||||
che definisce la funzione <nome> con i parametri in ingresso specificati
|
||||
|
||||
|
||||
Le funzioni sono invocate con la sintassi:
|
||||
brematurata la supercazzola <nome> con [<parametro>[, <parametro>]]
|
||||
|
||||
*** 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 <condizione>!
|
||||
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)
|
|
@ -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
|
||||
)
|
||||
|
|
|
@ -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()
|
||||
|
|
|
@ -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 $@
|
||||
|
|
|
@ -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?
|
26
examples/factorial.pc
Normal file
26
examples/factorial.pc
Normal file
|
@ -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ù
|
|
@ -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
|
14
examples/fibonacci.beauty.pc
Normal file
14
examples/fibonacci.beauty.pc
Normal file
|
@ -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
|
|
@ -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
|
8
examples/fibonacci.pc
Normal file
8
examples/fibonacci.pc
Normal file
|
@ -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
|
|
@ -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
|
12
examples/float.pc
Normal file
12
examples/float.pc
Normal file
|
@ -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
|
|
@ -1,15 +0,0 @@
|
|||
# Author: Alessandro Pellegrini <alessandro@pellegrini.tk>
|
||||
# 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
|
15
examples/hello-world.pc
Normal file
15
examples/hello-world.pc
Normal file
|
@ -0,0 +1,15 @@
|
|||
# Author: Alessandro Pellegrini <alessandro@pellegrini.tk>
|
||||
# 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
|
|
@ -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?
|
63
examples/mandelbrot.beauty.pc
Normal file
63
examples/mandelbrot.beauty.pc
Normal file
|
@ -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
|
|
@ -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?
|
63
examples/mandelbrot.pc
Normal file
63
examples/mandelbrot.pc
Normal file
|
@ -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
|
|
@ -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
|
20
examples/primes.beauty.pc
Normal file
20
examples/primes.beauty.pc
Normal file
|
@ -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
|
|
@ -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
|
11
examples/primes.pc
Normal file
11
examples/primes.pc
Normal file
|
@ -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
|
|
@ -1,5 +0,0 @@
|
|||
Lei ha clacsonato
|
||||
voglio antani, Necchi come se fosse 2
|
||||
stuzzica
|
||||
vaffanzum!
|
||||
e brematura anche, se antani per 2
|
5
examples/return.pc
Normal file
5
examples/return.pc
Normal file
|
@ -0,0 +1,5 @@
|
|||
Tutti in piedi
|
||||
venga mario, Pacciani è amico di 2
|
||||
allora
|
||||
seduti!
|
||||
si calmi, se mario per 2
|
|
@ -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?
|
46
examples/syntax.beauty.pc
Normal file
46
examples/syntax.beauty.pc
Normal file
|
@ -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?
|
|
@ -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?
|
14
examples/syntax.pc
Normal file
14
examples/syntax.pc
Normal file
|
@ -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?
|
|
@ -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 $@
|
||||
|
|
|
@ -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?
|
10
examples/turtle/turtle.pc
Normal file
10
examples/turtle/turtle.pc
Normal file
|
@ -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
|
|
@ -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)
|
||||
|
|
|
@ -16,13 +16,13 @@
|
|||
#include <iostream>
|
||||
#include <string>
|
||||
|
||||
#ifdef MONICELLI_ENABLE_LINKER
|
||||
#ifdef PACCIANI_ENABLE_LINKER
|
||||
#include <sys/types.h>
|
||||
#include <sys/wait.h>
|
||||
#include <unistd.h>
|
||||
#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<std::string>
|
|||
|
||||
#endif
|
||||
|
||||
} // namespace monicelli
|
||||
} // namespace pacciani
|
||||
|
|
10
src/asmgen.h
10
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 <string>
|
||||
#include <vector>
|
||||
|
||||
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<std::string>& object_files,
|
||||
bool keep_object_files = false);
|
||||
#endif
|
||||
|
||||
} // namespace monicelli
|
||||
} // namespace pacciani
|
||||
|
||||
#endif
|
||||
|
|
|
@ -6,7 +6,7 @@
|
|||
|
||||
#include <iostream>
|
||||
|
||||
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
|
||||
|
|
|
@ -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 <iostream>
|
||||
|
||||
namespace monicelli {
|
||||
namespace pacciani {
|
||||
|
||||
class AstNode;
|
||||
|
||||
void printAst(std::ostream& stream, const AstNode* node);
|
||||
|
||||
} // namespace monicelli
|
||||
} // namespace pacciani
|
||||
|
||||
#endif
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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 <string>
|
||||
#include <vector>
|
||||
|
||||
namespace monicelli {
|
||||
namespace pacciani {
|
||||
|
||||
class Variable final : public LocationMixin {
|
||||
public:
|
||||
|
@ -443,6 +443,6 @@ private:
|
|||
friend class Parser;
|
||||
};
|
||||
|
||||
} // namespace monicelli
|
||||
} // namespace pacciani
|
||||
|
||||
#endif
|
||||
|
|
|
@ -26,7 +26,7 @@
|
|||
#include <memory>
|
||||
#include <vector>
|
||||
|
||||
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<llvm::Module> 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
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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 <memory>
|
||||
|
||||
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
|
||||
|
|
|
@ -8,7 +8,7 @@
|
|||
#include <iostream>
|
||||
#include <string>
|
||||
|
||||
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
|
||||
|
|
|
@ -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 <iostream>
|
||||
#include <string>
|
||||
|
||||
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
|
||||
|
|
|
@ -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 <memory>
|
||||
#include <vector>
|
||||
|
||||
namespace monicelli {
|
||||
namespace pacciani {
|
||||
|
||||
template<typename T> class PointerVectorConstIter final {
|
||||
public:
|
||||
|
@ -43,6 +43,6 @@ private:
|
|||
IterT end_;
|
||||
};
|
||||
|
||||
} // namespace monicelli
|
||||
} // namespace pacciani
|
||||
|
||||
#endif
|
||||
|
|
|
@ -6,7 +6,7 @@
|
|||
|
||||
#include <cstring>
|
||||
|
||||
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
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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 <memory>
|
||||
#include <string>
|
||||
|
||||
namespace monicelli {
|
||||
namespace pacciani {
|
||||
|
||||
class Token final : public LocationMixin {
|
||||
public:
|
||||
|
@ -181,6 +181,6 @@ private:
|
|||
bool trace_enabled_;
|
||||
};
|
||||
|
||||
} // namespace monicelli
|
||||
} // namespace pacciani
|
||||
|
||||
#endif
|
||||
|
|
53
src/lexer.rl
53
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 <string>
|
||||
|
||||
namespace monicelli {
|
||||
namespace pacciani {
|
||||
|
||||
#define SET_TOKEN(NAME) \
|
||||
do { \
|
||||
|
|
|
@ -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 <iostream>
|
||||
|
||||
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
|
||||
|
|
|
@ -13,7 +13,7 @@
|
|||
#include <string>
|
||||
#include <vector>
|
||||
|
||||
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<std::string> 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);
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -7,7 +7,7 @@
|
|||
#include <cstring>
|
||||
#include <iostream>
|
||||
|
||||
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
|
||||
|
|
|
@ -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 <string>
|
||||
#include <vector>
|
||||
|
||||
namespace monicelli {
|
||||
namespace pacciani {
|
||||
|
||||
class ProgramOptions final {
|
||||
public:
|
||||
|
@ -55,6 +55,6 @@ private:
|
|||
bool emit_pic_;
|
||||
};
|
||||
|
||||
} // namespace monicelli
|
||||
} // namespace pacciani
|
||||
|
||||
#endif
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
#include "parser.h"
|
||||
#include "errors.h"
|
||||
|
||||
namespace monicelli {
|
||||
namespace pacciani {
|
||||
|
||||
std::unique_ptr<Module> Parser::parseModule() {
|
||||
std::unique_ptr<Module> module{new Module};
|
||||
|
@ -539,4 +539,4 @@ std::unique_ptr<Token> Parser::getNextToken() {
|
|||
return token;
|
||||
}
|
||||
|
||||
} // namespace monicelli
|
||||
} // namespace pacciani
|
||||
|
|
|
@ -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 <memory>
|
||||
#include <vector>
|
||||
|
||||
namespace monicelli {
|
||||
namespace pacciani {
|
||||
|
||||
class Parser final : public ErrorReportingMixin {
|
||||
public:
|
||||
|
@ -68,6 +68,6 @@ private:
|
|||
std::unique_ptr<Token> current_token_;
|
||||
};
|
||||
|
||||
} // namespace monicelli
|
||||
} // namespace pacciani
|
||||
|
||||
#endif
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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 <iostream>
|
||||
#include <string>
|
||||
|
||||
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
|
||||
|
|
|
@ -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
|
||||
|
|
Reference in New Issue
Block a user