Scriptol
Table des Matières
Description du langage Scriptol ... 3
Caractéristiques de Scriptol ... 3
Pourquoi utiliser Scriptol ... 5
Comment utiliser Scriptol? ... 5
Influence de Scriptol sur les autres langages de programmation ... 7
La licence ... 7
Exemples de code Scriptol ... 8
Description du langage Scriptol
Scriptol est un langage de programmation qui est soit interprété soit compilé, conçu pour être simple et facile à apprendre, permettant aux nouveaux utilisateurs d'être prêts à programmer en quelques heures, et qui réduit énormément le temps de travail.
Scriptol est orienté objets, extensible, universel, utilise les librairies de C++, PHP ou Java et GTK comme interface utilisateur graphique. Il est universel ce qui signifie qu'il convient pour faire des scripts, pour construire des applications ou pour créer des pages web dynamiques.
Des compilateurs Scriptol gratuits existent pour Windows et Unix.
Caractéristiques de Scriptol
Scriptol est :
Objectivement moderne: il a été défini selon sept règles de simplicité et, sureté, et n'hérite pas de syntaxes anciennes et obsolètes.
Orienté objet, même de simples scalaires comme
"int", ou des litéraux comme "123", sont des objets et ont des méthodes.
Typé: le compilateur peut comparer le contenu que l'on assigne et le type des variables, ce qui est impossible avec les langages de scripts.
Naturel: les types ne sont pas basés sur le matériel de l'ordinateur mais sur les concepts humains et ensembles
mathématiques: text, number, integer,real, etc...
Puissant et sûr: de nouvelles structures de contrôle ont été introduite avec Scriptol.
Exemples:
- if composite, qui est à la fois une instruction if et un switch case, mais avec toutes sortes de valeurs.
- while let, qui protèges des boucles sans fin.
- for .. in liste, or for .. in a..b, le moyen le plus simple d'exprimer un intervalle.
Simple. Pas de symboles du genre -> ou ::, seulement un point dans tous les cas.
Ajouter 1 à x s'écrit juste: x + 1, et non pas x +=
1
Pas de gestion de mémoire requise, un garbage collector est inclus.
Clair. Le point-virgule est un séparateur. La fin de ligne est un terminateur. D'autres langages
cumulent inutilement les deux.
Le langage est conçu pour les éditeurs modernes à coloration syntaxique. C, Java etc... utilisent des symboles comme { }, #, convenant aux éditeurs anciens.
Compatible avec C++. Vous avez juste à lier des fichiers objet C++ ou des fichiers librairies, et utiliser directement les fonctions qu'ils contiennent,
pas d'extension à écrire.
Par exemple, il suffit d'ajouter les libraires GTK dans le fichier de configuration d'un programme, pour disposer de l'interface utilisateur graphique.
Compatible avec PHP: vous pouvez programmer des pages web en Scriptol, le code est converti en PHP, toutes les fonctions PHP peuvent être utilisées.
Portable, fonctionne sur toute plateformes supportant l'interpréteur PHP ou le compilateur C++.
Pourquoi utiliser Scriptol
Principalement pour:
Intégrer du code sûr et naturel à l'intérieur de pages html. Cela fonctionnera sur tout serveur supportant PHP 4.
Protéger votre travail en distribuant des exécutables binaires.
Ecrire facilement et rapidement des scripts, grâce à la syntaxe de haut niveau.
Prototyping, tester rapidement un programme avec l'interpréteur avant de construire un exécutable natif.
Construire des applications. Scriptol peut être intégré dans des outils de développement rapide et peut utiliser des librairies inter-plateformes comme GTK.
Scriptol n'a pas besoin de fichier project.
Comment utiliser Scriptol?
Vous pouvez ouvrir une console Windows, quelquefois appelée "Fenêtre Dos", et taper la commande:
solc or solp pour voir les options.
Uitiliser Scriptol en ligne de commande
Un éditeur est fourni avec les compilateurs qui dispose de la coloration syntaxique pour les sources Scriptol, C++ ou PHP.
On peut compiler et lancer à partir de l'éditeur.
Les sources colorés peuvent être sauvés en fichiers Html ou Pdf.
Vous pouvez aussi intégrer le compilateur Scriptol C++
dans C Builder (version proffessionelle) ou Visual Studio, qui permettent de compile le source Scriptol d'abord, puis le code C++ généré ensuite.
Influence de Scriptol sur les autres langages de programmation
Plusieurs caractéristiques de Scriptol on été reprises par des langages plus récents et aident ainsi à améliorer la programmation.
Un nom de variable global ne peut pas être réutilisé dans un bloc local. Dans Dart cela déclenche un avertissement.
Utilisation conjointe de variables dynamiques et statiquement typées. C'est le cas de Dart. Dart utilise aussi un typenum, qui est proche de number en Scriptol.
switch case utilise des tests différent. Cela se retrouve dans Go puis dans Xtend.
La suppression des parenthèses dans les conditions avec if ou for, est reprise par Go, ainsi que la suppression des points-virgule. Malheureusement pas dans Dart.
La licence
Le langage est gratuit mais copyrighted. Le compilateur est sous Licence Mozilla. Un interpréteur ou compilateur peut être écrit par n'importe qui pourvu que la
compatibilité soit préservée.
L'edition commune (common) des compilateurs Scriptol est gratuite, même pour réaliser des logiciels commerciaux.
Exemples de code Scriptol
Algorithme de Fibonacci itératif int fibmax = 20
int fibonacci(int n) int u = 0
int v = 1 int t
for int i in 2 .. n t = u + v u = v v = t /for return v
for int x in 1..fibmax echo "fib(" , x , ") ", fibonacci(x), "\n"
Passer des arguments à un script Usage: sol ex_main [paramètres]
A la différence de for .. in, qui lite chaque élément d'une séquence dans une variable, scan pointe sur chacun et chacun peut être lu et modifié parce que le symbole [] vide désignre l'élément courant.
int main(array arglist, int argnum) print argnum, "arguments"
int i = 0
scan arglist ` scan the array
print "$i)", arglist[] ` display the next argument
i + 1 /scan return 0
main($argv, $argc) ` argv and argc are Php variables directly used.
fcomp - Comparer deux fichiers
die() affiche un message et termine le programme.
int main(int argnum, array arglist)
if argnum <> 3 ? die("usage: php fcomp.php file1 file2")
print "Comparing", arglist[1], arglist[2]
array f1, f2
f1.load(arglist[1]) ` array filled with a file f2.load(arglist[2])
if f1.size() <> f2.size() ? die("sizes differ") for int i in 0..f1.size() - 1
if f1[i] <> f2[i] ? die("files differ") /for
print "No difference found."
return 0
main($argv) ` argv est une variable PHP.
Compter les occurences d'une chaîne
Text, array, dict, file, sont des classes virtuelles et chaque instance peut utiliser des méthodes virtuelles comme ici find méthode de text.
class String
int count(text base, text sea) int ctr = 0
int i = 0
while forever
i = base.find(sea, i) if i = nil break i + 1
ctr + 1 /while return ctr /class
String str
print str.count("somestring", "string")
Classe et héritage (ex_car.sol)
A partir de la classe de base "Car", on peut hériter d'autres classes utilisant ses méthodes, faire des instance de Car ou de ses classes dérivées.
class Car
int power = 850
int getPower() return power text color(int c)
text tc = "other"
if c
= 1: tc = "blue"
= 2: tc = "green"
= 4: tc = "red"
/if
return "color is " + tc /class
class FormulaOne is Car int speed
int getSpeed()
speed = getPower() * 2 / 4 return speed
/class
FormulaOne f1 // instance de FormulaOne print f1.power // attribut de la superclasss print f1.getPower() // méthodd de la
superclasss
print f1.getSpeed() // méthode de la classe elle- même
print FormulaOne.color(4) // méthode statique de la superclasss (Car.color() marche aussi).
Utiliser GTK include "gtk.sol"
include <gtk/gtk.h>
int main(int argc, array argv) GtkWidget window = null gtk_init(null, null)
window =
gtk_window_new($GTK_WINDOW_TOPLEVEL) gtk_widget_show(window)
gtk_main() return 0
Récursion
Algorithme de Fibonacci récursif. Calcul des nombres de Fibonacci.
constant int fibmax = 16 int z = 0
int fib(int n)
if n <= 1 : z = n else
z = 0 + fib(n - 1) + fib(n - 2) /if
return z
for int i in 0..fibmax print "fib($i)=" , fib(i) /for
Fonctions intégrées
L'heure et la date courante ou dernière modification d'un fichier.
print "Example of date and time"
print "Format ISO 8601 (PHP 5/Scriptol C++)"
real d = time()
print "Current date and time:", date("c", d) d = filetime("exdate.sol")
text filedate = date("c", d)
print "Date of this file:", filedate[ .. 9]
Ligne de commande
Hello You. Fonctions d'entrée-sorties de base en ligne de commande.
text name
input "What is you name? ", name print "Hello", name
Arguments de ligne de commande. Passer des arguments en ligne de commande.
extern int argc extern array argv
int main(int argnum, array arglist) print argnum, "arguments"
int i = 0
scan arglist ` scan the array
echo i, ")", " ", arglist[], "\n" ` display next argument
i + 1 /scan return 0
main(argc, argv) ` argv and argc are PHP or C variables.
Graphismes utilisant GD (Scriptol PHP)
Dessiner un bouton. Créer un bouton avec un libellé, avec la bibliothèque Scriptol Image.
include "phpgd.h"
include "image.sol"
print "Program Button - Testing GD"
Image button
button.create(88,31)
int black = button.createColor(0, 0, 0)
int white = button.createColor(255,255,255) int green = button.createColor(0, 192, 0)
` filling background and drawing borders button.fill(green)
button.line(0,0,87,0, white) button.line(0,0,0,30, white) button.line(0,30,87,30, black) button.line(87,0,87,30, black)
` now, writing a label button.setFontSize(5)
button.write(26, 8, "Label", black)
text bname = "button.jpg"
button.saveJpeg(bname, 100) print bname,"created"
Charger une page XML
`` Ce petit programme teste le chargeur XML sax
`` et affiche les noms de pilotes F1.
xml dom /xml
text fname = "demos\f1-drivers.xml"
print "loading", fname, "..."
if not dom.load(fname)
print fname, "file not found"
exit() /if
print dom.document.driver.at() while dom.isFound()
dom.down() // set current to name text driver = dom.getData()
print driver.trim() dom.up()
let dom.inc()
Créer un simple fichier XML accessible par les méthodes de DOM.
text tag = "Internet"
text title = "My article"
text article ="Here is the story I am speaking of..."
text fname="article.xml"
array arr = array("<?xml version=\"1.0\" ?>\n",
"<articles>\n",
" <article tag=\"" + tag + "\" title=\"" + title+ "\"
>\n", article + "\n",
" </article>\n", "</articles>\n" )
file nfile = fopen(fname, "w") for text x in arr
nfile.write(x) /for
nfile.close()
Le fichier XML créé:
<?xml version="1.0" ?>
<articles>
<article tag="Internet" title="My article" >
Here is the story I am speaking of...
</article>
</articles>
Charger le fichier XML et lire le contenu par les attributs et méthodes de DOM.
text name = "article.xml";
DOMDocument doc DOMNodeList articles
DOMNode node
DOMElement article = null
doc.load(name)
articles = doc.getElementsByTagName("article") node= articles.item(0)
article = node
text tag = article.getAttribute("tag") text title= article.getAttribute("title") text content= article.textContent
print "Title:",title,"Tag:",tag,"Content:",content