Scriptol

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:

for 
... 
/for

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"
/if

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...

ReadabilityEdit

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 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"
/if 


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

If x = 5
  print "equal"
else
  print "not equal"
/if 


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"
else 
  print "less"
/if

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
/for 


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 LetEdit

Common syntaxEdit

while x < 5
 print x
 x + 1
/while 


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 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[] 

/scan


The current element is denoted by an empty indice.

Example with two arrays:

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

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
return 
scan a by fun 


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

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 
/class 


XmlEdit

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
  /passengers  
/xml 


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.
/xml
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 


IteratorEdit

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.


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

let demo.inc()

Last modified on 6 November 2010, at 05:28