Scriptol/Printable version


The current, editable version of this book is available in Wikibooks, the open-content textbooks collection, at

Permission is granted to copy, distribute, and/or modify this document under the terms of the Creative Commons Attribution-ShareAlike 3.0 License.

The Scriptol Programming Language

The Scriptol Programming LanguageEdit

A clean syntaxEdit

C++ syntax:

for(int x = 0; x < 10; x++)
 printf("%d\n", x);

Scriptol syntax:

for int x in 0 .. 9 print x

Scriptol doesn't need for semi-colon et end of statements. The end of line is also the end of statement unless several statements fits on a same line, in this case they are separated by semi-colons. If an instruction fits on two lines, the compiler recognizes the instruction.

Objective designEdit

Unlike C that was designed with limited hardware in mind, Perl that has added features day after day, and other languages that depends upon the fantasy of the author, Scriptol apply objectives rules, and it near the more used syntax in computer world, the xml one... Xml is tagged and has as C one-line syntax. Scriptol has one-line syntax, (see above) and is tagged:


Universal operatorsEdit

Some programming languages use the same operator for unrelated things. For example, The C programming language uses the "*" operator for both "deferencing" and "multiply". The C programming language uses the "&" for both "address-of" and "binary and".

Scriptol tries to avoid such confusion by making each operator mean something very similar in all the different ways it is used.

For example, the range operator " .. " is used:

  • as the range in the "for" loop (see above).
  • as an interval of an array or a dictionary (see array).
  • as a range in an expression:

if x in 0 .. 9 
  print "x inside range"

Types from the real wordEdit

In the 1970s, C and Pascal invented types that were related to hardware: char, long, short, char *, float, etc...

Scriptol uses types related to the real word: text, number, integer, natural, real, array, dict, dir, etc...


A complicated and unreadable part of C++ code...

int x[] = { 1, 2, 3, 4 };
int i;
for(i = 0; i < 4; i++)
  if(x[i] == test) std::cout << test << " found" << std::endl;

may be replaced by a single and clear Scriptol statement.

if test in { 1, 2, 3, 4 } print test, "found"

If Control Structure

If Control StructureEdit

Common syntaxEdit

For a conditional process, the statement is a "if" keyword, followed by a boolean expression, a list of statements to execute or no, depending of the condition, and the "/if" keyword.

If x = 5
  print "equal"

Introducing an alternative by the "else" keyword: when the condition is false, another list of statements may be processed.

If x = 5
  print "equal"
  print "not equal"

One-line structureEdit

When the body of the structure is just one statement, and not another structure, the syntax may be shortened to only a single line.

If x = 5 print x 

If the statement is not a command as "print", "break", "continue" etc..., the "let" keyword is required.

If x = 5 let y + 1 

Composite ifEdit

The structure may be extended into a more powerful construct that is both an "if" and a "switch case" structure, even more advanced than the C counterpart since you can test any type of variable.

if x 
  = 5: print "equal"
  > 5: print "more"
  print "less"

For In

For InEdit

Common syntaxEdit

The standard syntax assigns a variable with the elements of a range, and Scriptol writes a range as it is commonly written, with a double dot between two values (or variables).

for int x in 0 .. 10
  print x

One-line syntaxEdit

If the body of the structure is only one statement, a simplified syntax is used.

for int x in 0 .. 10 print x 

For in listEdit

The for control structure may scan an interal as above, but also a text or an array.

text hello = "hello"
for text t in hello print t 

array a = { 1, 2, 3 }
for dyn x in a print x

While Let

While LetEdit

Common syntaxEdit

while x < 5
 print x
 x + 1

To increment a variable, Scriptol uses x + 1. This could not work in C and other languages.

Infinite loop in CEdit

The C and C-like languages (C++, Java, C#) leads easily into infinite loop. Here hare two simple examples.

while(x < 5);
  printf("%d\n", x);
  x += 1:

Perhaps you have instantaneously noticed it (and perhaps no), but the construct is bad, due to the semi-colon after the condition!

Another example without the misplaced semi-colon:

while(x < 10)
  printf("%d\n", x);
  if(x = 5) continue;
  ... some statements ...
  x += 1;

Scan By

Scan ByEdit

Common syntaxEdit

The scan control structure allows to parse one or several arrays, and to apply a process onto each element of the array(s).

scan a

a[] * a[] 
print a[] 


The current element is denoted by an empty indice.

Example with two arrays:

scan a, b
 print a[] + b[] 

Scan with a functionEdit

You can apply instead a predefined function. The argument of the function is an element of the array.

array a = {1,2,3,4 } 
void fun(number x) 
 print x * x
scan a by fun 

If you use several arrays, the number of argument of the function must be the number of array.

Xml or class

Xml or classEdit

Common classEdit

Scriptol is object-oriented and has classes and inheritance. Defining a class is easy. Example of a very simple class.

class car
  int speed
  void getSpeed()
     ... some statements ...
  return speed 


But Scriptol has also xml. Defining a xml document is simple also.

xml Car
  speed value = "10" /
  wheels number = "4"
  passengers number = "5"
     Clara, Charly, Corinna, Cyril, Cecilia

Using XmlEdit

Classes are used directly or by creating an instance, and making reference to attributes or calls to methods.

Using Xml is not different. You can define how many instances of xml documents you want, and modify the content of each of them. The content of elements or attributes may be assigned, and elements and attributes may be added of removed.

Car myCar ` myCar is an instance of the Car Xml document.
print myCar.speed ` displaying the value of the "speed" attribute.
print myCar.passengers ` displaying the content of the "passengers" tag.

Importing xml documentEdit

Xml is mainly useful for performing processes on documents produced by various tools, word processors, spreadsheets, etc....

To load such documents, Scriptol integrates a sax parser. You have just to declare a xml document, load le xml file, and you can use the document as a class declared in the source.

xml Car ` declaring an empty xml document.
Car myCar` defining an instance (not required).
myCar.load("document.xml")  ` loading an external xml document
Car.load("document.xml")  ` you can use directly the xml class itself 


Iterator on xml document is as iterator on array, plus the down() and up() methods. Iterator allows to parse an entire xml document or just sub-elements of of an element.

while demo.isFound() 
print demo.getData()