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.
|
# Use of this source code is governed by a GPLv3 license, see LICENSE.txt.
|
||||||
|
|
||||||
cmake_minimum_required(VERSION 3.14)
|
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")
|
list(APPEND CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake")
|
||||||
|
|
||||||
|
|
|
@ -4,7 +4,7 @@
|
||||||
# Project related configuration options
|
# Project related configuration options
|
||||||
#---------------------------------------------------------------------------
|
#---------------------------------------------------------------------------
|
||||||
DOXYFILE_ENCODING = UTF-8
|
DOXYFILE_ENCODING = UTF-8
|
||||||
PROJECT_NAME = "Monicelli"
|
PROJECT_NAME = "Pacciani"
|
||||||
PROJECT_NUMBER =
|
PROJECT_NUMBER =
|
||||||
PROJECT_BRIEF =
|
PROJECT_BRIEF =
|
||||||
PROJECT_LOGO =
|
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)
|
Pacciani is an esoteric language largely based on the [Monicelli Programming Language](https://github.com/esseks/monicelli), which you should definitely check out!
|
||||||
`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).
|
|
||||||
|
|
||||||
* `mcc` does not depend on Boost anymore.
|
# What's Pacciani anyway?
|
||||||
|
|
||||||
* `mcc` has a new hand-written parser that should provide better error
|
Pacciani is an esoterical programming language based on the so-called
|
||||||
messages. Now it's easier to stuzzicate your prematurated supercazzole.
|
"compagni di merende" from the Italian [Monster of Florence](https://en.wikipedia.org/wiki/Monster_of_Florence) trial.
|
||||||
Error messages are in plain English and not very antani. Apologies for that.
|
|
||||||
|
|
||||||
* `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
|
# 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
|
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.
|
sufficiently recent release should do just fine.
|
||||||
|
|
||||||
You will also need to have LLVM development libraries installed, version 14.
|
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
|
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.
|
Finally, you will need CMake, version 3.14 or higher.
|
||||||
|
|
||||||
A typical Makefile-based build workflow would be:
|
A typical Makefile-based build workflow would be:
|
||||||
|
|
||||||
$ cd monicelli/
|
$ cd pacciani/
|
||||||
$ mkdir build/
|
$ mkdir build/
|
||||||
$ cd build/
|
$ cd build/
|
||||||
$ cmake .. -DCMAKE_INSTALL_PREFIX="$HOME/mcc"
|
$ cmake .. -DCMAKE_INSTALL_PREFIX="$HOME/pcc"
|
||||||
$ make all install
|
$ make all install
|
||||||
|
|
||||||
If your tools are installed in non-standard locations
|
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 ..
|
$ 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`.
|
runtime and on `libz`.
|
||||||
|
|
||||||
## Note for non-POSIX platforms (like Windows)
|
## 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
|
only get object files (.o) that you will have to link, including a C runtime
|
||||||
library, by yourself.
|
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:
|
on Windows during CMake configuration by forcing the appropriate flag to OFF:
|
||||||
|
|
||||||
$ cmake .. -DMONICELLI_LINKER=OFF
|
$ cmake .. -DPACCIANI_LINKER=OFF
|
||||||
|
|
||||||
## Tested platforms
|
## 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
|
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
|
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
|
# 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
|
(such as Linux, Mac OS X). Linking requires an external C compiler, anything
|
||||||
decently modern and standard-conformant should do.
|
decently modern and standard-conformant should do.
|
||||||
|
|
||||||
A typical invocation is very similar to what you would expect from your C
|
A typical invocation is very similar to what you would expect from your C
|
||||||
compiler:
|
compiler:
|
||||||
|
|
||||||
$ mcc example.mc -o example
|
$ pcc example.pc -o example
|
||||||
$ ./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
|
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
|
# 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
|
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
|
statement can be split across multiple lines and multiple statements can be
|
||||||
grouped on the same line. However, keywords consisting of multiple space-separed
|
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
|
Accented letters can be replaced by the non-accented letter followed by a
|
||||||
backtick `` ` ``, although the use of the correct Italian spelling is strongly
|
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
|
## 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:
|
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:
|
A value can be returned by using the the following statement:
|
||||||
|
|
||||||
vaffanzum <expression>!
|
seduti <expression>!
|
||||||
|
|
||||||
optionally, no value might be returned with:
|
optionally, no value might be returned with:
|
||||||
|
|
||||||
vaffanzum!
|
seduti!
|
||||||
|
|
||||||
## Expressions
|
## Expressions
|
||||||
|
|
||||||
|
@ -181,7 +139,7 @@ This ensures that no loss takes place when evaluating an expression.
|
||||||
Binary shift operators have a slighly different
|
Binary shift operators have a slighly different
|
||||||
syntax:
|
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
|
which is equivalent to `what >> bits` or `what << bits`, depending on the
|
||||||
direction, which is specified as follows:
|
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
|
as you might have noticed, those are simply the translation in Italian of
|
||||||
"left" and "right". For instance:
|
"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.
|
It goes without saying, other expression can be used instead of numbers.
|
||||||
Also, the usual precedence rules apply.
|
Also, the usual precedence rules apply.
|
||||||
|
|
||||||
**There is no syntax for braces in Monicelli**.
|
**There is no syntax for braces in Pacciani**.
|
||||||
|
|
||||||
## Variables
|
## 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:
|
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,
|
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
|
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 |
|
| Type name | Mapped C type | Size |
|
||||||
|-----------|---------------|-------|
|
|-----------|---------------|-------|
|
||||||
| Necchi | `int` | 64bit |
|
| Pacciani | `int` | 64bit |
|
||||||
| Mascetti | `char` | 8bit |
|
| Vanni | `char` | 8bit |
|
||||||
| Perozzi | `float` | 32bit |
|
| Pucci | `float` | 32bit |
|
||||||
| Melandri | `bool` | - |
|
| Lotti | `bool` | - |
|
||||||
| Sassaroli | `double` | 64bit |
|
| Canessa | `double` | 64bit |
|
||||||
|
|
||||||
A variable is declared with the following statement:
|
A variable is declared with the following statement:
|
||||||
|
|
||||||
voglio <varname>, <type>
|
venga <varname>, <type>
|
||||||
|
|
||||||
an initialization value can be provided:
|
an initialization value can be provided:
|
||||||
|
|
||||||
voglio <varname>, <type> come se fosse <expression>
|
venga <varname>, <type> è amico di <expression>
|
||||||
|
|
||||||
for instance:
|
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.
|
it to 4.
|
||||||
|
|
||||||
## Input/Output
|
## Input/Output
|
||||||
|
|
||||||
Variables and expressions can be printed with the statement:
|
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:
|
Conversely, a variable might be read from input using:
|
||||||
|
|
||||||
mi porga <varname>
|
chiamo a testimoniare <varname>
|
||||||
|
|
||||||
## Loop
|
## Loop
|
||||||
|
|
||||||
There is only one loop construct, equivalent to a C `do {} while();`, which is
|
There is only one loop construct, equivalent to a C `do {} while();`, which is
|
||||||
defined as follows:
|
defined as follows:
|
||||||
|
|
||||||
stuzzica
|
allora
|
||||||
<statements>
|
<statements>
|
||||||
e brematura anche, se <condition>
|
si calmi, se <condition>
|
||||||
|
|
||||||
For example:
|
For example:
|
||||||
|
|
||||||
voglio antani, Necchi come se fosse 10
|
venga il mostro, Pacciani è amico di 10
|
||||||
stuzzica
|
allora
|
||||||
antani come fosse antani meno 1
|
il mostro è amico di mostro meno 1
|
||||||
e brematura anche, se antani maggiore di 0
|
si calmi, se il mostro è maggiore di 0
|
||||||
|
|
||||||
maps to:
|
maps to:
|
||||||
|
|
||||||
int antani = 10;
|
int mostro = 10;
|
||||||
do {
|
do {
|
||||||
antani = antani - 1;
|
mostro = mostro - 1;
|
||||||
} while (antani > 0);
|
} while (mostro > 0);
|
||||||
|
|
||||||
`brematura` might be replaced by its alternate form `prematura`
|
`si calmi` might be replaced by its alternate form `perfavore`
|
||||||
|
|
||||||
## Branch
|
## Branch
|
||||||
|
|
||||||
|
@ -299,115 +257,112 @@ C translation.
|
||||||
|
|
||||||
This is the general form:
|
This is the general form:
|
||||||
|
|
||||||
che cos'è <variable>?
|
lei conosce <variable>?
|
||||||
<condition>:
|
<condition>:
|
||||||
<statements>
|
<statements>
|
||||||
o magari <condition>:
|
o merenda <condition>:
|
||||||
<statements>
|
<statements>
|
||||||
o tarapia tapioco:
|
insomma:
|
||||||
<statement>
|
<statement>
|
||||||
e velocità di esecuzione
|
e facevate le merende insieme
|
||||||
|
|
||||||
where `<condition>` might be either a value or a semi-expression, that is an
|
where `<condition>` might be either a value or a semi-expression, that is an
|
||||||
operator followed by any expression. For instance:
|
operator followed by any expression. For instance:
|
||||||
|
|
||||||
che cos'è il genio?
|
lei conosce il testimone?
|
||||||
intuizione:
|
giulio:
|
||||||
genio come se fosse genio meno 1
|
testimone è amico di testimone meno 1
|
||||||
o magari intuizione diviso 2:
|
o merenda giulio diviso 2:
|
||||||
genio come se fosse genio più 1
|
testimone è amico di testimone più 1
|
||||||
o magari maggiore di mobiletto per due:
|
o merenda maggiore di mobiletto per due:
|
||||||
genio come se fosse genio per 2
|
testimone è amico di testimone per 2
|
||||||
o tarapia tapioco:
|
insomma:
|
||||||
genio come se fosse 2
|
testimone è amico di 2
|
||||||
e velocità di esecuzione
|
e facevate le merende insieme
|
||||||
|
|
||||||
maps to:
|
maps to:
|
||||||
|
|
||||||
if (genio == intuizione) {
|
if (testimone == giulio) {
|
||||||
genio = genio - 1;
|
testimone = testimone - 1;
|
||||||
} else if (genio == (intuizione / 2)) {
|
} else if (testimone == (giulio / 2)) {
|
||||||
genio = genio + 1;
|
testimone = testimone + 1;
|
||||||
} else if (genio > (mobiletto * 2)) {
|
} else if (testimone > (mobiletto * 2)) {
|
||||||
genio = genio * 2;
|
testimone = testimone * 2;
|
||||||
} else {
|
} else {
|
||||||
genio = 2;
|
testimone = 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
The statement can emulate an `if () {} else {}`:
|
The statement can emulate an `if () {} else {}`:
|
||||||
|
|
||||||
che cos'è il genio?
|
lei conosce il genio?
|
||||||
maggiore di mobiletto:
|
maggiore di mobiletto:
|
||||||
genio come se fosse 2
|
genio è amico di 2
|
||||||
o tarapia tapioco:
|
insomma:
|
||||||
genio come se fosse 0
|
genio è amico di 0
|
||||||
e velocità di esecuzione
|
e facevate le merende insieme
|
||||||
|
|
||||||
Placing multiple `o <condition>:` block is similar to a chain of `else if` in C.
|
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:
|
maggiore di mobiletto:
|
||||||
genio come se fosse 2
|
genio è amico di 2
|
||||||
e velocità di esecuzione
|
e facevate le merende insieme
|
||||||
|
|
||||||
Finally, here is the equivalent of a `switch () {}`:
|
Finally, here is the equivalent of a `switch () {}`:
|
||||||
|
|
||||||
che cos'è il genio?
|
lei conosce il genio?
|
||||||
1:
|
1:
|
||||||
genio come se fosse 2
|
genio è amico di 2
|
||||||
o magari 2:
|
o merenda 2:
|
||||||
genio come se fosse 7
|
genio è amico di 7
|
||||||
o tarapia tapioco:
|
insomma:
|
||||||
genio come se fosse 9
|
genio è amico di 9
|
||||||
e velocità di esecuzione
|
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
|
## Functions
|
||||||
|
|
||||||
**Note**: the alternate spelling `supercazzora` might be used in place
|
|
||||||
of `supercazzola` wherever the latter appears.
|
|
||||||
|
|
||||||
## Declaration
|
## 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>
|
<statements>
|
||||||
|
|
||||||
Where `<type>` can be omitted for a void function. For instance:
|
Where `<type>` can be omitted for a void function. For instance:
|
||||||
|
|
||||||
blinda la supercazzola Necchi antanizzata con alfio Mascetti o scherziamo?
|
idromassaggiatore Pacciani merendivoro con mario Vanni innocente
|
||||||
vaffanzum alfio meno 2!
|
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:
|
Multiple arguments must be comma-separed, like in:
|
||||||
|
|
||||||
blinda la supercazzola Necchi antanizzata con alfio Mascetti, barilotto Necchi o scherziamo?
|
idromassaggiatore Pacciani merendivoro con mario Vanni, barilotto Pacciani innocente
|
||||||
vaffanzum alfio meno 2!
|
seduti mario meno 2!
|
||||||
|
|
||||||
which is a function of type `Necchi`, taking two arguments of type `Mascetti`
|
which is a function of type `Pacciani`, taking two arguments of type `Vanni`
|
||||||
and `Necchi`. It maps to:
|
and `Pacciani`. It maps to:
|
||||||
|
|
||||||
int antanizzata(char alfio, int barilotto) {
|
int merendivoro(char mario, int barilotto) {
|
||||||
return alfio - 2;
|
return mario - 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
Finally, this:
|
Finally, this:
|
||||||
|
|
||||||
blinda la supercazzola antanizzata o scherziamo?
|
idromassaggiatore merendivoro innocente
|
||||||
vaffanzum!
|
seduti!
|
||||||
|
|
||||||
is a `void` function taking no arguments and becomes:
|
is a `void` function taking no arguments and becomes:
|
||||||
|
|
||||||
void antanizzata() {
|
void merendivoro() {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
Functions cannot be nested and can be declared before or after the main in any
|
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 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
|
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
|
## 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:
|
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:
|
maps to:
|
||||||
|
|
||||||
antani = alfio(barilotto / 3) * 2;
|
giudice = poeticamente(merende / 3) * 2;
|
||||||
|
|
||||||
## Exceptions
|
## Exceptions
|
||||||
|
|
||||||
The program might be aborted immediately with the statement:
|
The program might be aborted immediately with the statement:
|
||||||
|
|
||||||
avvertite don ulrico
|
viva idduce
|
||||||
|
|
||||||
there are no arguments.
|
there are no arguments.
|
||||||
|
|
||||||
|
@ -441,16 +396,16 @@ there are no arguments.
|
||||||
An assertion block will evaluate its expression and trigger an error message
|
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:
|
if it is found to be 0 (logical false). An assertion is stated as:
|
||||||
|
|
||||||
ho visto <expression>!
|
ma cosa dice <expression>!
|
||||||
|
|
||||||
## Comments
|
## 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:
|
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
|
Comments are useful to fill the "supercazzola" and make it more readable, since
|
||||||
any word (including reserved words) can be inserted into it.
|
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.
|
ordinary comment.
|
||||||
|
|
||||||
They have a different graphical symbol, which can be immediately spotted inside
|
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
|
improper way to fill the sentence, meta comments provide a mechanism for
|
||||||
distiguishing "real" comments.
|
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
|
be used as variable identifiers, even if they do not serve any other purpose in
|
||||||
the current language revision.
|
the current language revision.
|
||||||
|
|
||||||
* `conte`
|
* `lei la picchiava`
|
||||||
* `scusi noi siamo in`
|
|
||||||
* `con rinforzino`
|
|
||||||
|
|
|
@ -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)
|
find_package(Doxygen)
|
||||||
|
|
||||||
if (DOXYGEN_FOUND)
|
if (DOXYGEN_FOUND)
|
||||||
set(MONICELLI_DOXYGEN_CONFIG ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile)
|
set(PACCIANI_DOXYGEN_CONFIG ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile)
|
||||||
|
|
||||||
configure_file(
|
configure_file(
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/Doxyfile.in
|
${CMAKE_CURRENT_SOURCE_DIR}/Doxyfile.in
|
||||||
${MONICELLI_DOXYGEN_CONFIG}
|
${PACCIANI_DOXYGEN_CONFIG}
|
||||||
@ONLY
|
@ONLY
|
||||||
)
|
)
|
||||||
|
|
||||||
add_custom_target(doc
|
add_custom_target(doc
|
||||||
DEPENDS ${MONICELLI_DOXYGEN_CONFIG}
|
DEPENDS ${PACCIANI_DOXYGEN_CONFIG}
|
||||||
COMMAND ${DOXYGEN_EXECUTABLE} ${MONICELLI_DOXYGEN_CONFIG}
|
COMMAND ${DOXYGEN_EXECUTABLE} ${PACCIANI_DOXYGEN_CONFIG}
|
||||||
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
|
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
|
||||||
VERBATIM
|
VERBATIM
|
||||||
)
|
)
|
||||||
|
|
|
@ -4,7 +4,7 @@
|
||||||
find_program(RAGEL_EXECUTABLE ragel)
|
find_program(RAGEL_EXECUTABLE ragel)
|
||||||
|
|
||||||
if (${RAGEL_EXECUTABLE} STREQUAL "RAGEL_EXECUTABLE-NOTFOUND")
|
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()
|
else()
|
||||||
message(STATUS "Found Ragel: ${RAGEL_EXECUTABLE}")
|
message(STATUS "Found Ragel: ${RAGEL_EXECUTABLE}")
|
||||||
endif()
|
endif()
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
MCC=mcc
|
PCC=pcc
|
||||||
EXAMPLES=factorial hello-world primes return fibonacci mandelbrot float
|
EXAMPLES=factorial hello-world primes return fibonacci mandelbrot float
|
||||||
|
|
||||||
all: $(EXAMPLES)
|
all: $(EXAMPLES)
|
||||||
|
@ -7,4 +7,4 @@ clean:
|
||||||
$(RM) $(EXAMPLES)
|
$(RM) $(EXAMPLES)
|
||||||
|
|
||||||
%: %.mc
|
%: %.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
|
all: turtle
|
||||||
|
|
||||||
|
@ -8,7 +8,7 @@ clean:
|
||||||
turtle.mc:;
|
turtle.mc:;
|
||||||
|
|
||||||
%.mc.o: %.mc
|
%.mc.o: %.mc
|
||||||
$(MCC) -c $< -o $@
|
$(PCC) -c $< -o $@
|
||||||
|
|
||||||
turtle: turtle.mc.o turtle.cpp
|
turtle: turtle.mc.o turtle.cpp
|
||||||
$(CXX) -std=c++11 $^ -lcairo -o $@
|
$(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.
|
# Copyright 2017 the Monicelli project authors. All rights reserved.
|
||||||
# Use of this source code is governed by a GPLv3 license, see LICENSE.txt.
|
# 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(PACCIANI_ARCH "x86" CACHE STRING "Target architecture for Pacciani.")
|
||||||
set(MONICELLI_LLVM_VERSION 14 CACHE STRING "LLVM version for Monicelli.")
|
set(PACCIANI_LLVM_VERSION 14 CACHE STRING "LLVM version for Pacciani.")
|
||||||
set(MONICELLI_LINKER ON CACHE BOOL "Enable the Monicelli linker. Requires POSIX.")
|
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)
|
find_package(Ragel REQUIRED)
|
||||||
|
|
||||||
add_ragel_library(lexer
|
add_ragel_library(lexer
|
||||||
|
@ -15,7 +15,7 @@ add_ragel_library(lexer
|
||||||
lexer.def
|
lexer.def
|
||||||
)
|
)
|
||||||
|
|
||||||
add_executable(mcc
|
add_executable(pcc
|
||||||
main.cpp
|
main.cpp
|
||||||
asmgen.cpp
|
asmgen.cpp
|
||||||
codegen.cpp
|
codegen.cpp
|
||||||
|
@ -34,27 +34,27 @@ add_executable(mcc
|
||||||
operators.def
|
operators.def
|
||||||
)
|
)
|
||||||
|
|
||||||
set_target_properties(mcc lexer
|
set_target_properties(pcc lexer
|
||||||
PROPERTIES
|
PROPERTIES
|
||||||
CXX_STANDARD 14
|
CXX_STANDARD 14
|
||||||
CXX_STANDARD_REQUIRED true
|
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
|
core
|
||||||
support
|
support
|
||||||
"${MONICELLI_ARCH}codegen"
|
"${PACCIANI_ARCH}codegen"
|
||||||
"${MONICELLI_ARCH}asmparser"
|
"${PACCIANI_ARCH}asmparser"
|
||||||
)
|
)
|
||||||
|
|
||||||
if (MONICELLI_LINKER)
|
if (PACCIANI_LINKER)
|
||||||
target_compile_definitions(mcc PRIVATE MONICELLI_ENABLE_LINKER)
|
target_compile_definitions(pcc PRIVATE PACCIANI_ENABLE_LINKER)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
install(TARGETS mcc RUNTIME DESTINATION bin)
|
install(TARGETS pcc RUNTIME DESTINATION bin)
|
||||||
|
|
|
@ -16,13 +16,13 @@
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
#include <string>
|
#include <string>
|
||||||
|
|
||||||
#ifdef MONICELLI_ENABLE_LINKER
|
#ifdef PACCIANI_ENABLE_LINKER
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
#include <sys/wait.h>
|
#include <sys/wait.h>
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
namespace monicelli {
|
namespace pacciani {
|
||||||
|
|
||||||
void registerTargets() {
|
void registerTargets() {
|
||||||
llvm::InitializeNativeTarget();
|
llvm::InitializeNativeTarget();
|
||||||
|
@ -68,7 +68,7 @@ void writeAssembly(const std::string& to_filename, llvm::Module* module,
|
||||||
output.flush();
|
output.flush();
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef MONICELLI_ENABLE_LINKER
|
#ifdef PACCIANI_ENABLE_LINKER
|
||||||
|
|
||||||
static const char* C_COMPILER = "c99";
|
static const char* C_COMPILER = "c99";
|
||||||
|
|
||||||
|
@ -120,4 +120,4 @@ void linkAssembly(const std::string& output_name, const std::vector<std::string>
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
} // namespace monicelli
|
} // namespace pacciani
|
||||||
|
|
10
src/asmgen.h
10
src/asmgen.h
|
@ -1,5 +1,5 @@
|
||||||
#ifndef MONICELLI_ASMGEN_H
|
#ifndef PACCIANI_ASMGEN_H
|
||||||
#define MONICELLI_ASMGEN_H
|
#define PACCIANI_ASMGEN_H
|
||||||
|
|
||||||
// Copyright 2017 the Monicelli project authors. All rights reserved.
|
// Copyright 2017 the Monicelli project authors. All rights reserved.
|
||||||
// Use of this source code is governed by a GPLv3 license, see LICENSE.txt.
|
// Use of this source code is governed by a GPLv3 license, see LICENSE.txt.
|
||||||
|
@ -10,7 +10,7 @@
|
||||||
#include <string>
|
#include <string>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
|
||||||
namespace monicelli {
|
namespace pacciani {
|
||||||
|
|
||||||
void registerTargets();
|
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,
|
void writeAssembly(const std::string& to_filename, llvm::Module* module,
|
||||||
llvm::TargetMachine* target_machine);
|
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,
|
void linkAssembly(const std::string& output_name, const std::vector<std::string>& object_files,
|
||||||
bool keep_object_files = false);
|
bool keep_object_files = false);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
} // namespace monicelli
|
} // namespace pacciani
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -6,7 +6,7 @@
|
||||||
|
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
|
|
||||||
using namespace monicelli;
|
using namespace pacciani;
|
||||||
|
|
||||||
namespace {
|
namespace {
|
||||||
|
|
||||||
|
@ -257,11 +257,11 @@ private:
|
||||||
|
|
||||||
} // namespace
|
} // namespace
|
||||||
|
|
||||||
namespace monicelli {
|
namespace pacciani {
|
||||||
|
|
||||||
void printAst(std::ostream& stream, const AstNode* node) {
|
void printAst(std::ostream& stream, const AstNode* node) {
|
||||||
AstPrinter printer{stream};
|
AstPrinter printer{stream};
|
||||||
printer.visit(node);
|
printer.visit(node);
|
||||||
}
|
}
|
||||||
|
|
||||||
} // namespace monicelli
|
} // namespace pacciani
|
||||||
|
|
|
@ -1,17 +1,17 @@
|
||||||
#ifndef MONICELLI_AST_PRINTER_H
|
#ifndef PACCIANI_AST_PRINTER_H
|
||||||
#define MONICELLI_AST_PRINTER_H
|
#define PACCIANI_AST_PRINTER_H
|
||||||
|
|
||||||
// Copyright 2017 the Monicelli project authors. All rights reserved.
|
// Copyright 2017 the Monicelli project authors. All rights reserved.
|
||||||
// Use of this source code is governed by a GPLv3 license, see LICENSE.txt.
|
// Use of this source code is governed by a GPLv3 license, see LICENSE.txt.
|
||||||
|
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
|
|
||||||
namespace monicelli {
|
namespace pacciani {
|
||||||
|
|
||||||
class AstNode;
|
class AstNode;
|
||||||
|
|
||||||
void printAst(std::ostream& stream, const AstNode* node);
|
void printAst(std::ostream& stream, const AstNode* node);
|
||||||
|
|
||||||
} // namespace monicelli
|
} // namespace pacciani
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
#ifndef MONICELLI_AST_VISITOR_H
|
#ifndef PACCIANI_AST_VISITOR_H
|
||||||
#define MONICELLI_AST_VISITOR_H
|
#define PACCIANI_AST_VISITOR_H
|
||||||
|
|
||||||
// Copyright 2017 the Monicelli project authors. All rights reserved.
|
// Copyright 2017 the Monicelli project authors. All rights reserved.
|
||||||
// Use of this source code is governed by a GPLv3 license, see LICENSE.txt.
|
// Use of this source code is governed by a GPLv3 license, see LICENSE.txt.
|
||||||
|
@ -8,7 +8,7 @@
|
||||||
#include "ast.h"
|
#include "ast.h"
|
||||||
#include "errors.h"
|
#include "errors.h"
|
||||||
|
|
||||||
namespace monicelli {
|
namespace pacciani {
|
||||||
|
|
||||||
#define DECLARE_CLASS(NAME) class NAME;
|
#define DECLARE_CLASS(NAME) class NAME;
|
||||||
|
|
||||||
|
@ -43,6 +43,6 @@ private:
|
||||||
#undef DEFAULT_VISIT
|
#undef DEFAULT_VISIT
|
||||||
#undef DISPATCH_CONST_STATEMENT
|
#undef DISPATCH_CONST_STATEMENT
|
||||||
|
|
||||||
} // namespace monicelli
|
} // namespace pacciani
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -4,7 +4,7 @@
|
||||||
#include "ast.h"
|
#include "ast.h"
|
||||||
#include "errors.h"
|
#include "errors.h"
|
||||||
|
|
||||||
namespace monicelli {
|
namespace pacciani {
|
||||||
|
|
||||||
// static
|
// static
|
||||||
const char* BinaryExpression::getOperatorRepresentation(BinaryExpression::Type type) {
|
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
|
#ifndef PACCIANI_AST_DEF
|
||||||
#define MONICELLI_AST_DEF
|
#define PACCIANI_AST_DEF
|
||||||
|
|
||||||
// Copyright 2017 the Monicelli project authors. All rights reserved.
|
// Copyright 2017 the Monicelli project authors. All rights reserved.
|
||||||
// Use of this source code is governed by a GPLv3 license, see LICENSE.txt.
|
// Use of this source code is governed by a GPLv3 license, see LICENSE.txt.
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
#ifndef MONICELLI_AST_H
|
#ifndef PACCIANI_AST_H
|
||||||
#define MONICELLI_AST_H
|
#define PACCIANI_AST_H
|
||||||
|
|
||||||
// Copyright 2017 the Monicelli project authors. All rights reserved.
|
// Copyright 2017 the Monicelli project authors. All rights reserved.
|
||||||
// Use of this source code is governed by a GPLv3 license, see LICENSE.txt.
|
// Use of this source code is governed by a GPLv3 license, see LICENSE.txt.
|
||||||
|
@ -13,7 +13,7 @@
|
||||||
#include <string>
|
#include <string>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
|
||||||
namespace monicelli {
|
namespace pacciani {
|
||||||
|
|
||||||
class Variable final : public LocationMixin {
|
class Variable final : public LocationMixin {
|
||||||
public:
|
public:
|
||||||
|
@ -443,6 +443,6 @@ private:
|
||||||
friend class Parser;
|
friend class Parser;
|
||||||
};
|
};
|
||||||
|
|
||||||
} // namespace monicelli
|
} // namespace pacciani
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -26,7 +26,7 @@
|
||||||
#include <memory>
|
#include <memory>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
|
||||||
using namespace monicelli;
|
using namespace pacciani;
|
||||||
|
|
||||||
namespace {
|
namespace {
|
||||||
|
|
||||||
|
@ -758,7 +758,7 @@ llvm::Type* ResultTypeCalculator::visitFunctionCallExpression(const FunctionCall
|
||||||
return f->getReturnType();
|
return f->getReturnType();
|
||||||
}
|
}
|
||||||
|
|
||||||
namespace monicelli {
|
namespace pacciani {
|
||||||
|
|
||||||
std::unique_ptr<llvm::Module> generateIR(llvm::LLVMContext& context, Module* ast) {
|
std::unique_ptr<llvm::Module> generateIR(llvm::LLVMContext& context, Module* ast) {
|
||||||
IRGenerator codegen{context, ast->getSourceFilename()};
|
IRGenerator codegen{context, ast->getSourceFilename()};
|
||||||
|
@ -785,4 +785,4 @@ void printIR(std::ostream& stream, llvm::Module* module) {
|
||||||
module->print(llvm_stream, nullptr);
|
module->print(llvm_stream, nullptr);
|
||||||
}
|
}
|
||||||
|
|
||||||
} // namespace monicelli
|
} // namespace pacciani
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
#ifndef MONICELLI_CODEGEN_DEF
|
#ifndef PACCIANI_CODEGEN_DEF
|
||||||
#define MONICELLI_CODEGEN_DEF
|
#define PACCIANI_CODEGEN_DEF
|
||||||
|
|
||||||
// Copyright 2017 the Monicelli project authors. All rights reserved.
|
// Copyright 2017 the Monicelli project authors. All rights reserved.
|
||||||
// Use of this source code is governed by a GPLv3 license, see LICENSE.txt.
|
// Use of this source code is governed by a GPLv3 license, see LICENSE.txt.
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
#ifndef MONICELLI_CODEGEN_H
|
#ifndef PACCIANI_CODEGEN_H
|
||||||
#define MONICELLI_CODEGEN_H
|
#define PACCIANI_CODEGEN_H
|
||||||
|
|
||||||
// Copyright 2017 the Monicelli project authors. All rights reserved.
|
// Copyright 2017 the Monicelli project authors. All rights reserved.
|
||||||
// Use of this source code is governed by a GPLv3 license, see LICENSE.txt.
|
// Use of this source code is governed by a GPLv3 license, see LICENSE.txt.
|
||||||
|
@ -8,7 +8,7 @@
|
||||||
#include "llvm/IR/Module.h"
|
#include "llvm/IR/Module.h"
|
||||||
#include <memory>
|
#include <memory>
|
||||||
|
|
||||||
namespace monicelli {
|
namespace pacciani {
|
||||||
|
|
||||||
class Module;
|
class Module;
|
||||||
|
|
||||||
|
@ -18,6 +18,6 @@ void runFunctionOptimizer(llvm::Module* module);
|
||||||
|
|
||||||
void printIR(std::ostream& stream, llvm::Module* module);
|
void printIR(std::ostream& stream, llvm::Module* module);
|
||||||
|
|
||||||
} // namespace monicelli
|
} // namespace pacciani
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -8,7 +8,7 @@
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
#include <string>
|
#include <string>
|
||||||
|
|
||||||
namespace monicelli {
|
namespace pacciani {
|
||||||
|
|
||||||
[[noreturn]] void UNREACHABLE(const std::string& message) {
|
[[noreturn]] void UNREACHABLE(const std::string& message) {
|
||||||
std::cerr << message << '\n';
|
std::cerr << message << '\n';
|
||||||
|
@ -49,4 +49,4 @@ void ErrorReportingMixin::printErrorLocation(std::ostream& stream, const Locatio
|
||||||
stream << '\n' << from << ": error: ";
|
stream << '\n' << from << ": error: ";
|
||||||
}
|
}
|
||||||
|
|
||||||
} // namespace monicelli
|
} // namespace pacciani
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
#ifndef MONICELLI_ERRORS_H
|
#ifndef PACCIANI_ERRORS_H
|
||||||
#define MONICELLI_ERRORS_H
|
#define PACCIANI_ERRORS_H
|
||||||
|
|
||||||
// Copyright 2017 the Monicelli project authors. All rights reserved.
|
// Copyright 2017 the Monicelli project authors. All rights reserved.
|
||||||
// Use of this source code is governed by a GPLv3 license, see LICENSE.txt.
|
// Use of this source code is governed by a GPLv3 license, see LICENSE.txt.
|
||||||
|
@ -10,7 +10,7 @@
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
#include <string>
|
#include <string>
|
||||||
|
|
||||||
namespace monicelli {
|
namespace pacciani {
|
||||||
|
|
||||||
[[noreturn]] void UNREACHABLE(const std::string& message);
|
[[noreturn]] void UNREACHABLE(const std::string& message);
|
||||||
|
|
||||||
|
@ -54,6 +54,6 @@ private:
|
||||||
std::string source_filename_;
|
std::string source_filename_;
|
||||||
};
|
};
|
||||||
|
|
||||||
} // namespace monicelli
|
} // namespace pacciani
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
#ifndef MONICELLI_ITERATORS_H
|
#ifndef PACCIANI_ITERATORS_H
|
||||||
#define MONICELLI_ITERATORS_H
|
#define PACCIANI_ITERATORS_H
|
||||||
|
|
||||||
// Copyright 2017 the Monicelli project authors. All rights reserved.
|
// Copyright 2017 the Monicelli project authors. All rights reserved.
|
||||||
// Use of this source code is governed by a GPLv3 license, see LICENSE.txt.
|
// Use of this source code is governed by a GPLv3 license, see LICENSE.txt.
|
||||||
|
@ -7,7 +7,7 @@
|
||||||
#include <memory>
|
#include <memory>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
|
||||||
namespace monicelli {
|
namespace pacciani {
|
||||||
|
|
||||||
template<typename T> class PointerVectorConstIter final {
|
template<typename T> class PointerVectorConstIter final {
|
||||||
public:
|
public:
|
||||||
|
@ -43,6 +43,6 @@ private:
|
||||||
IterT end_;
|
IterT end_;
|
||||||
};
|
};
|
||||||
|
|
||||||
} // namespace monicelli
|
} // namespace pacciani
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -6,7 +6,7 @@
|
||||||
|
|
||||||
#include <cstring>
|
#include <cstring>
|
||||||
|
|
||||||
namespace monicelli {
|
namespace pacciani {
|
||||||
|
|
||||||
static const char* builtinTypeToString(Token::BuiltinTypeValue type) {
|
static const char* builtinTypeToString(Token::BuiltinTypeValue type) {
|
||||||
switch (type) {
|
switch (type) {
|
||||||
|
@ -99,4 +99,4 @@ void Lexer::advanceBuffer() {
|
||||||
buffer_.imbue(input_);
|
buffer_.imbue(input_);
|
||||||
}
|
}
|
||||||
|
|
||||||
} // namespace monicelli
|
} // namespace pacciani
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
#ifndef MONICELLI_LEXER_DEF
|
#ifndef PACCIANI_LEXER_DEF
|
||||||
#define MONICELLI_LEXER_DEF
|
#define PACCIANI_LEXER_DEF
|
||||||
|
|
||||||
// Copyright 2017 the Monicelli project authors. All rights reserved.
|
// Copyright 2017 the Monicelli project authors. All rights reserved.
|
||||||
// Use of this source code is governed by a GPLv3 license, see LICENSE.txt.
|
// Use of this source code is governed by a GPLv3 license, see LICENSE.txt.
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
#ifndef MONICELLI_LEXER_H
|
#ifndef PACCIANI_LEXER_H
|
||||||
#define MONICELLI_LEXER_H
|
#define PACCIANI_LEXER_H
|
||||||
|
|
||||||
// Copyright 2017 the Monicelli project authors. All rights reserved.
|
// Copyright 2017 the Monicelli project authors. All rights reserved.
|
||||||
// Use of this source code is governed by a GPLv3 license, see LICENSE.txt.
|
// Use of this source code is governed by a GPLv3 license, see LICENSE.txt.
|
||||||
|
@ -13,7 +13,7 @@
|
||||||
#include <memory>
|
#include <memory>
|
||||||
#include <string>
|
#include <string>
|
||||||
|
|
||||||
namespace monicelli {
|
namespace pacciani {
|
||||||
|
|
||||||
class Token final : public LocationMixin {
|
class Token final : public LocationMixin {
|
||||||
public:
|
public:
|
||||||
|
@ -181,6 +181,6 @@ private:
|
||||||
bool trace_enabled_;
|
bool trace_enabled_;
|
||||||
};
|
};
|
||||||
|
|
||||||
} // namespace monicelli
|
} // namespace pacciani
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
53
src/lexer.rl
53
src/lexer.rl
|
@ -13,10 +13,9 @@ accent_u = "u`"|"ù";
|
||||||
accent_vowels = "à"|"è"|"é"|"ì"|"ò"|"ó"|"ù"| [aeiou] "`";
|
accent_vowels = "à"|"è"|"é"|"ì"|"ò"|"ó"|"ù"| [aeiou] "`";
|
||||||
articles = "il"|"lo"|"la"|"l'"|"i"|"gli"|"le"|"un"|"un'"|"una"|"dei"|"delle";
|
articles = "il"|"lo"|"la"|"l'"|"i"|"gli"|"le"|"un"|"un'"|"una"|"dei"|"delle";
|
||||||
di = "di"|"dei"|"del"|"della"|"dell'";
|
di = "di"|"dei"|"del"|"della"|"dell'";
|
||||||
prematura = [bp] "rematura";
|
|
||||||
supercazzola = "supercazzo" [lr] "a";
|
supercazzola = "supercazzo" [lr] "a";
|
||||||
|
comment_start = "il"|"al"|"con"|"per"|"con il"|"per il";
|
||||||
comment = "#"|"bituma";
|
comment = "#"|(comment_start " "[nN]"ostro "[sS]"ignore "[Gg]"es" accent_u);
|
||||||
identifier = (alpha | accent_vowels) (alnum | accent_vowels)*;
|
identifier = (alpha | accent_vowels) (alnum | accent_vowels)*;
|
||||||
integer = [+\-]? digit+;
|
integer = [+\-]? digit+;
|
||||||
float = [+\-]? (digit* "." digit+ | digit+ "."?) [eE] [+\-]? digit+
|
float = [+\-]? (digit* "." digit+ | digit+ "."?) [eE] [+\-]? digit+
|
||||||
|
@ -41,59 +40,59 @@ initial := |*
|
||||||
"meno" => { SET_TOKEN(OP_MINUS); fbreak; };
|
"meno" => { SET_TOKEN(OP_MINUS); fbreak; };
|
||||||
"per" => { SET_TOKEN(OP_TIMES); fbreak; };
|
"per" => { SET_TOKEN(OP_TIMES); fbreak; };
|
||||||
"diviso" => { SET_TOKEN(OP_DIV); 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; };
|
"minore " di => { SET_TOKEN(OP_LT); fbreak; };
|
||||||
"maggiore " di => { SET_TOKEN(OP_GT); fbreak; };
|
"maggiore " di => { SET_TOKEN(OP_GT); fbreak; };
|
||||||
"minore " "o "? "uguale " ("a"|di) => { SET_TOKEN(OP_LE); fbreak; };
|
"minore " "o "? "uguale " ("a"|di) => { SET_TOKEN(OP_LE); fbreak; };
|
||||||
"maggiore " "o "? "uguale " ("a"|di) => { SET_TOKEN(OP_GE); fbreak; };
|
"maggiore " "o "? "uguale " ("a"|di) => { SET_TOKEN(OP_GE); fbreak; };
|
||||||
|
|
||||||
"vaffanzum" => { SET_TOKEN(RETURN); fbreak; };
|
"seduti" => { SET_TOKEN(RETURN); fbreak; };
|
||||||
"voglio" => { SET_TOKEN(VARDECL); fbreak; };
|
"venga" => { SET_TOKEN(VARDECL); fbreak; };
|
||||||
"come " ("se "?) "fosse" => { SET_TOKEN(ASSIGN); fbreak; };
|
accent_e " amico " di => { SET_TOKEN(ASSIGN); fbreak; };
|
||||||
"a posterdati" => { SET_TOKEN(PRINT); fbreak; };
|
("sono"|accent_e) " espuls"[oaei]" dall'aula" => { SET_TOKEN(PRINT); fbreak; };
|
||||||
"mi porga" => { SET_TOKEN(INPUT); fbreak; };
|
"chiamo a testimoniare" => { SET_TOKEN(INPUT); fbreak; };
|
||||||
"ho visto" => { SET_TOKEN(ASSERT); fbreak; };
|
"ma cosa dice" => { SET_TOKEN(ASSERT); fbreak; };
|
||||||
"avvertite don ulrico" => { SET_TOKEN(ABORT); fbreak; };
|
"viva idduce" => { SET_TOKEN(ABORT); fbreak; };
|
||||||
|
|
||||||
"stuzzica" => { SET_TOKEN(LOOP_BEGIN); fbreak; };
|
"allora" => { SET_TOKEN(LOOP_BEGIN); fbreak; };
|
||||||
"e " prematura " anche, se" => { SET_TOKEN(LOOP_CONDITION); fbreak; };
|
"si calmi, se" => { SET_TOKEN(LOOP_CONDITION); fbreak; };
|
||||||
|
|
||||||
"che cos'" accent_e => { SET_TOKEN(BRANCH_CONDITION); fbreak; };
|
"lei conosce" => { SET_TOKEN(BRANCH_CONDITION); fbreak; };
|
||||||
"o tarapia tapioco" => { SET_TOKEN(BRANCH_ELSE); fbreak; };
|
"insomma" => { SET_TOKEN(BRANCH_ELSE); fbreak; };
|
||||||
"e velocit" accent_a " di esecuzione" => { SET_TOKEN(BRANCH_END); fbreak; };
|
"e facevate le merende insieme" => { SET_TOKEN(BRANCH_END); fbreak; };
|
||||||
"o magari" => { SET_TOKEN(CASE_END); fbreak; };
|
"o merenda" => { SET_TOKEN(CASE_END); fbreak; };
|
||||||
|
|
||||||
"Lei ha clacsonato" => { SET_TOKEN(ENTRY_POINT); fbreak; };
|
"Tutti in piedi" => { SET_TOKEN(ENTRY_POINT); fbreak; };
|
||||||
"blinda la " supercazzola => { SET_TOKEN(FUN_DECL); fbreak; };
|
"idromassaggiatore" => { SET_TOKEN(FUN_DECL); fbreak; };
|
||||||
"con" => { SET_TOKEN(FUN_PARAMS); fbreak; };
|
"con" => { SET_TOKEN(FUN_PARAMS); fbreak; };
|
||||||
prematura "ta la " supercazzola => { SET_TOKEN(FUN_CALL); fbreak; };
|
"noi condividiamo" => { SET_TOKEN(FUN_CALL); fbreak; };
|
||||||
"o scherziamo" ("?"?) => { SET_TOKEN(FUN_END); fbreak; };
|
"innocente" => { SET_TOKEN(FUN_END); fbreak; };
|
||||||
|
|
||||||
"Necchi" => {
|
"Pacciani" => {
|
||||||
SET_TOKEN(TYPENAME);
|
SET_TOKEN(TYPENAME);
|
||||||
token->setBuiltinTypeValue(Token::BUILTIN_TYPE_INTEGER);
|
token->setBuiltinTypeValue(Token::BUILTIN_TYPE_INTEGER);
|
||||||
fbreak;
|
fbreak;
|
||||||
};
|
};
|
||||||
|
|
||||||
"Mascetti" => {
|
"Vanni" => {
|
||||||
SET_TOKEN(TYPENAME);
|
SET_TOKEN(TYPENAME);
|
||||||
token->setBuiltinTypeValue(Token::BUILTIN_TYPE_CHAR);
|
token->setBuiltinTypeValue(Token::BUILTIN_TYPE_CHAR);
|
||||||
fbreak;
|
fbreak;
|
||||||
};
|
};
|
||||||
|
|
||||||
"Perozzi" => {
|
"Pucci" => {
|
||||||
SET_TOKEN(TYPENAME);
|
SET_TOKEN(TYPENAME);
|
||||||
token->setBuiltinTypeValue(Token::BUILTIN_TYPE_FLOAT);
|
token->setBuiltinTypeValue(Token::BUILTIN_TYPE_FLOAT);
|
||||||
fbreak;
|
fbreak;
|
||||||
};
|
};
|
||||||
|
|
||||||
"Melandri" => {
|
"Lotti" => {
|
||||||
SET_TOKEN(TYPENAME);
|
SET_TOKEN(TYPENAME);
|
||||||
token->setBuiltinTypeValue(Token::BUILTIN_TYPE_BOOL);
|
token->setBuiltinTypeValue(Token::BUILTIN_TYPE_BOOL);
|
||||||
fbreak;
|
fbreak;
|
||||||
};
|
};
|
||||||
|
|
||||||
"Sassaroli" => {
|
"Canessa" => {
|
||||||
SET_TOKEN(TYPENAME);
|
SET_TOKEN(TYPENAME);
|
||||||
token->setBuiltinTypeValue(Token::BUILTIN_TYPE_DOUBLE);
|
token->setBuiltinTypeValue(Token::BUILTIN_TYPE_DOUBLE);
|
||||||
fbreak;
|
fbreak;
|
||||||
|
@ -134,7 +133,7 @@ initial := |*
|
||||||
|
|
||||||
#include <string>
|
#include <string>
|
||||||
|
|
||||||
namespace monicelli {
|
namespace pacciani {
|
||||||
|
|
||||||
#define SET_TOKEN(NAME) \
|
#define SET_TOKEN(NAME) \
|
||||||
do { \
|
do { \
|
||||||
|
|
|
@ -1,12 +1,12 @@
|
||||||
#ifndef MONICELLI_LOCATION_H
|
#ifndef PACCIANI_LOCATION_H
|
||||||
#define MONICELLI_LOCATION_H
|
#define PACCIANI_LOCATION_H
|
||||||
|
|
||||||
// Copyright 2017 the Monicelli project authors. All rights reserved.
|
// Copyright 2017 the Monicelli project authors. All rights reserved.
|
||||||
// Use of this source code is governed by a GPLv3 license, see LICENSE.txt.
|
// Use of this source code is governed by a GPLv3 license, see LICENSE.txt.
|
||||||
|
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
|
|
||||||
namespace monicelli {
|
namespace pacciani {
|
||||||
|
|
||||||
class Location final {
|
class Location final {
|
||||||
public:
|
public:
|
||||||
|
@ -54,6 +54,6 @@ static inline bool operator==(const Location& a, const Location& b) {
|
||||||
return a.getLine() == b.getLine() && a.getColumn() == b.getColumn();
|
return a.getLine() == b.getLine() && a.getColumn() == b.getColumn();
|
||||||
}
|
}
|
||||||
|
|
||||||
} // namespace monicelli
|
} // namespace pacciani
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -13,7 +13,7 @@
|
||||||
#include <string>
|
#include <string>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
|
||||||
using namespace monicelli;
|
using namespace pacciani;
|
||||||
|
|
||||||
int main(int argc, char** argv) {
|
int main(int argc, char** argv) {
|
||||||
ProgramOptions options = ProgramOptions::fromCommandLine(argc, argv);
|
ProgramOptions options = ProgramOptions::fromCommandLine(argc, argv);
|
||||||
|
@ -35,7 +35,7 @@ int main(int argc, char** argv) {
|
||||||
auto target_machine =
|
auto target_machine =
|
||||||
getTargetMachine(triple, options.getCPU(), options.getCPUFeatures(), options.shouldEmitPIC());
|
getTargetMachine(triple, options.getCPU(), options.getCPUFeatures(), options.shouldEmitPIC());
|
||||||
|
|
||||||
#ifdef MONICELLI_ENABLE_LINKER
|
#ifdef PACCIANI_ENABLE_LINKER
|
||||||
std::vector<std::string> object_filenames;
|
std::vector<std::string> object_filenames;
|
||||||
object_filenames.reserve(options.input_filenames_size());
|
object_filenames.reserve(options.input_filenames_size());
|
||||||
#endif
|
#endif
|
||||||
|
@ -78,12 +78,12 @@ int main(int argc, char** argv) {
|
||||||
|
|
||||||
writeAssembly(object_filename, ir.get(), target_machine);
|
writeAssembly(object_filename, ir.get(), target_machine);
|
||||||
|
|
||||||
#ifdef MONICELLI_ENABLE_LINKER
|
#ifdef PACCIANI_ENABLE_LINKER
|
||||||
object_filenames.emplace_back(std::move(object_filename));
|
object_filenames.emplace_back(std::move(object_filename));
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef MONICELLI_ENABLE_LINKER
|
#ifdef PACCIANI_ENABLE_LINKER
|
||||||
if (!options.shouldSkipCompilation() && !options.shouldOnlyCompile() &&
|
if (!options.shouldSkipCompilation() && !options.shouldOnlyCompile() &&
|
||||||
!object_filenames.empty()) {
|
!object_filenames.empty()) {
|
||||||
linkAssembly(options.getOutputFilename(), object_filenames);
|
linkAssembly(options.getOutputFilename(), object_filenames);
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
#ifndef MONICELLI_OPERATORS_DEF
|
#ifndef PACCIANI_OPERATORS_DEF
|
||||||
#define MONICELLI_OPERATORS_DEF
|
#define PACCIANI_OPERATORS_DEF
|
||||||
|
|
||||||
// Copyright 2017 the Monicelli project authors. All rights reserved.
|
// Copyright 2017 the Monicelli project authors. All rights reserved.
|
||||||
// Use of this source code is governed by a GPLv3 license, see LICENSE.txt.
|
// Use of this source code is governed by a GPLv3 license, see LICENSE.txt.
|
||||||
|
|
|
@ -7,7 +7,7 @@
|
||||||
#include <cstring>
|
#include <cstring>
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
|
|
||||||
namespace monicelli {
|
namespace pacciani {
|
||||||
|
|
||||||
// static
|
// static
|
||||||
ProgramOptions ProgramOptions::fromCommandLine(int argc, char** argv) {
|
ProgramOptions ProgramOptions::fromCommandLine(int argc, char** argv) {
|
||||||
|
@ -41,7 +41,7 @@ ProgramOptions ProgramOptions::fromCommandLine(int argc, char** argv) {
|
||||||
options.emit_pic_ = false;
|
options.emit_pic_ = false;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
#ifdef MONICELLI_ENABLE_LINKER
|
#ifdef PACCIANI_ENABLE_LINKER
|
||||||
if (strcmp(argv[i], "-c") == 0 || strcmp(argv[i], "--only-compile") == 0) {
|
if (strcmp(argv[i], "-c") == 0 || strcmp(argv[i], "--only-compile") == 0) {
|
||||||
options.compile_only_ = true;
|
options.compile_only_ = true;
|
||||||
continue;
|
continue;
|
||||||
|
@ -71,7 +71,7 @@ ProgramOptions ProgramOptions::fromCommandLine(int argc, char** argv) {
|
||||||
}
|
}
|
||||||
options.input_filenames_.emplace_back(argv[i]);
|
options.input_filenames_.emplace_back(argv[i]);
|
||||||
}
|
}
|
||||||
#ifndef MONICELLI_ENABLE_LINKER
|
#ifndef PACCIANI_ENABLE_LINKER
|
||||||
options.compile_only_ = true;
|
options.compile_only_ = true;
|
||||||
#endif
|
#endif
|
||||||
return options;
|
return options;
|
||||||
|
@ -82,7 +82,7 @@ void ProgramOptions::printHelp(const char* program_name) {
|
||||||
std::cout << "Usage: " << program_name
|
std::cout << "Usage: " << program_name
|
||||||
<< " [options...] [input.mc ...]\n\n"
|
<< " [options...] [input.mc ...]\n\n"
|
||||||
"Options:\n"
|
"Options:\n"
|
||||||
#ifdef MONICELLI_ENABLE_LINKER
|
#ifdef PACCIANI_ENABLE_LINKER
|
||||||
" --only-compile, -c : Compile only, do not link.\n"
|
" --only-compile, -c : Compile only, do not link.\n"
|
||||||
#endif
|
#endif
|
||||||
" --no-compile, -n : Do not compile, only print (see below).\n"
|
" --no-compile, -n : Do not compile, only print (see below).\n"
|
||||||
|
@ -98,4 +98,4 @@ void ProgramOptions::printHelp(const char* program_name) {
|
||||||
exit(0);
|
exit(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
} // namespace monicelli
|
} // namespace pacciani
|
||||||
|
|
|
@ -1,15 +1,15 @@
|
||||||
// Copyright 2017 the Monicelli project authors. All rights reserved.
|
// Copyright 2017 the Monicelli project authors. All rights reserved.
|
||||||
// Use of this source code is governed by a GPLv3 license, see LICENSE.txt.
|
// Use of this source code is governed by a GPLv3 license, see LICENSE.txt.
|
||||||
|
|
||||||
#ifndef MONICELLI_OPTIONS_H
|
#ifndef PACCIANI_OPTIONS_H
|
||||||
#define MONICELLI_OPTIONS_H
|
#define PACCIANI_OPTIONS_H
|
||||||
|
|
||||||
#include "iterators.h"
|
#include "iterators.h"
|
||||||
|
|
||||||
#include <string>
|
#include <string>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
|
||||||
namespace monicelli {
|
namespace pacciani {
|
||||||
|
|
||||||
class ProgramOptions final {
|
class ProgramOptions final {
|
||||||
public:
|
public:
|
||||||
|
@ -55,6 +55,6 @@ private:
|
||||||
bool emit_pic_;
|
bool emit_pic_;
|
||||||
};
|
};
|
||||||
|
|
||||||
} // namespace monicelli
|
} // namespace pacciani
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -4,7 +4,7 @@
|
||||||
#include "parser.h"
|
#include "parser.h"
|
||||||
#include "errors.h"
|
#include "errors.h"
|
||||||
|
|
||||||
namespace monicelli {
|
namespace pacciani {
|
||||||
|
|
||||||
std::unique_ptr<Module> Parser::parseModule() {
|
std::unique_ptr<Module> Parser::parseModule() {
|
||||||
std::unique_ptr<Module> module{new Module};
|
std::unique_ptr<Module> module{new Module};
|
||||||
|
@ -539,4 +539,4 @@ std::unique_ptr<Token> Parser::getNextToken() {
|
||||||
return token;
|
return token;
|
||||||
}
|
}
|
||||||
|
|
||||||
} // namespace monicelli
|
} // namespace pacciani
|
||||||
|
|
|
@ -1,8 +1,8 @@
|
||||||
// Copyright 2017 the Monicelli project authors. All rights reserved.
|
// Copyright 2017 the Monicelli project authors. All rights reserved.
|
||||||
// Use of this source code is governed by a GPLv3 license, see LICENSE.txt.
|
// Use of this source code is governed by a GPLv3 license, see LICENSE.txt.
|
||||||
|
|
||||||
#ifndef MONICELLI_PARSER_H
|
#ifndef PACCIANI_PARSER_H
|
||||||
#define MONICELLI_PARSER_H
|
#define PACCIANI_PARSER_H
|
||||||
|
|
||||||
#include "ast.h"
|
#include "ast.h"
|
||||||
#include "errors.h"
|
#include "errors.h"
|
||||||
|
@ -13,7 +13,7 @@
|
||||||
#include <memory>
|
#include <memory>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
|
||||||
namespace monicelli {
|
namespace pacciani {
|
||||||
|
|
||||||
class Parser final : public ErrorReportingMixin {
|
class Parser final : public ErrorReportingMixin {
|
||||||
public:
|
public:
|
||||||
|
@ -68,6 +68,6 @@ private:
|
||||||
std::unique_ptr<Token> current_token_;
|
std::unique_ptr<Token> current_token_;
|
||||||
};
|
};
|
||||||
|
|
||||||
} // namespace monicelli
|
} // namespace pacciani
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
|
|
||||||
#include "support.h"
|
#include "support.h"
|
||||||
|
|
||||||
namespace monicelli {
|
namespace pacciani {
|
||||||
|
|
||||||
std::string basename(std::string input_filename) {
|
std::string basename(std::string input_filename) {
|
||||||
auto base_name_start = input_filename.find_last_of("\\/");
|
auto base_name_start = input_filename.find_last_of("\\/");
|
||||||
|
@ -14,4 +14,4 @@ std::string basename(std::string input_filename) {
|
||||||
return input_filename;
|
return input_filename;
|
||||||
}
|
}
|
||||||
|
|
||||||
} // namespace monicelli
|
} // namespace pacciani
|
||||||
|
|
|
@ -1,13 +1,13 @@
|
||||||
// Copyright 2017 the Monicelli project authors. All rights reserved.
|
// Copyright 2017 the Monicelli project authors. All rights reserved.
|
||||||
// Use of this source code is governed by a GPLv3 license, see LICENSE.txt.
|
// Use of this source code is governed by a GPLv3 license, see LICENSE.txt.
|
||||||
|
|
||||||
#ifndef MONICELLI_SUPPORT_H
|
#ifndef PACCIANI_SUPPORT_H
|
||||||
#define MONICELLI_SUPPORT_H
|
#define PACCIANI_SUPPORT_H
|
||||||
|
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
#include <string>
|
#include <string>
|
||||||
|
|
||||||
namespace monicelli {
|
namespace pacciani {
|
||||||
|
|
||||||
#define USE(x) ((void)(x))
|
#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);
|
std::string basename(std::string input_filename);
|
||||||
|
|
||||||
} // namespace monicelli
|
} // namespace pacciani
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
#ifndef MONICELLI_TYPES_DEF
|
#ifndef PACCIANI_TYPES_DEF
|
||||||
#define MONICELLI_TYPES_DEF
|
#define PACCIANI_TYPES_DEF
|
||||||
|
|
||||||
// Copyright 2017 the Monicelli project authors. All rights reserved.
|
// Copyright 2017 the Monicelli project authors. All rights reserved.
|
||||||
// Use of this source code is governed by a GPLv3 license, see LICENSE.txt.
|
// 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
|
// symbol_name, ir_type, input_format, output_format, src_name, ast_name
|
||||||
#define BUILTIN_TYPES(V) \
|
#define BUILTIN_TYPES(V) \
|
||||||
V(VOID, Void, nullptr, nullptr, "", "void") \
|
V(VOID, Void, nullptr, nullptr, "", "void") \
|
||||||
V(INTEGER, Int32, "%d", "%d\n", "Necchi", "int") \
|
V(INTEGER, Int32, "%d", "%d\n", "Pacciani", "int") \
|
||||||
V(CHAR, Int8, "%c", "%c", "Mascetti", "char") \
|
V(CHAR, Int8, "%c", "%c", "Vanni", "char") \
|
||||||
V(FLOAT, Float, "%f", "%f\n", "Perozzi", "float") \
|
V(FLOAT, Float, "%f", "%f\n", "Pucci", "float") \
|
||||||
V(BOOL, Int1, "%d", "%d\n", "Melandri", "bool") \
|
V(BOOL, Int1, "%d", "%d\n", "Lotti", "bool") \
|
||||||
V(DOUBLE, Double, "%lf", "%f\n", "Sassaroli", "double")
|
V(DOUBLE, Double, "%lf", "%f\n", "Canessa", "double")
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
Reference in New Issue
Block a user