Algorithmic natural language interpreter (language using french keywords)
Usage
Installation
npm install -g algo-lang
Command line
Basic usage:
algo-lang path/to/file.algo
Pretty print your file in console:
algo-lang --pretty-print path/to/file.algo
Language
Quick example
algorithme test variables entier i, j algorithme procedure swap parametres globaux entier i, j variables entier tmp debut tmp ← i i ← j j ← tmp fin algorithme procedure swap debut i ← 2 j ← 4 swap(i, j) afficher(chaine(i) + chaine(j)) /* prints 42 */fin algorithme test
Language documentation
Note
selon
expressions differ slightly from the previous documentation. There is a cas
keyword added in the mix to allow LALR parsing :
selon expression faire cas val1, val2: expr1 expr2 autrement expr3 expr4fin selon
Good to know
Operator aliases
Some operators have aliases to ease development:
<-
is equivalent to←
^
is equivalent to↑
nul
There is a special nul
keyword to assign the null pointer to any pointer variable and check if a pointer is null.
Available types
Only those base types are available:
booleen
(defined just likebooleen = (faux, vrai)
)caractere
(can be cast with system routines to:chaine
,entier
)chaine
(can be cast with system routines to:entier
,reel
)entier
(can be cast with system routines to:caractere
,chaine
,reel
)reel
(can be cast with system routines to:chaine
,entier
)
System routines
There are some system routines you can use:
afficher(chaine)
: prints the string on stdout (no endline is added automatically)allouer(pointer)
: allocate memory for the pointed valuecaractere(value)
: try to castvalue
incaractere
chaine(value)
: try to castvalue
inchaine
entier(value)
: try to castentier
inchaine
liberer(pointer)
: free memory pointed by the provided pointer, do nothing if pointer isnul
, resetspointer
tonul
longueur(chaine)
: returns the length of the string
[]
Operator The operator also allows you to access characters (caractere
) in a string (chaine
) like in:
afficher("toto"[1])
Important note: In this language, index are from 1
to n
and not from 0
to n − 1
!