Clicky

Pascal Syntax

Pascal syntax

1. Overview

Current Pascal syntax supports:

  • begin .. end constructor
  • procedure and function declarations
  • if .. then .. else constructor
  • for .. to .. do .. step constructor
  • while .. do constructor
  • repeat .. until constructor
  • try .. except and try .. finally blocks
  • case statements
  • array constructors (x:=[ 1, 2, 3 ];)
  • ^ , * , / , and , + , - , or , <> , >=, <= , = , > , < , div , mod , xor , shl , shr operators
  • access to object properties and methods ( ObjectName.SubObject.Property )

2. Script structure

The script structure is made of two major blocks: a) procedure and function declarations and b) main block. Both are optional, but at least one should be present in the script. There is no need for the main block to be inside begin..end. It could be a single statement. Some examples:

SCRIPT 1:

procedure DoSomething;

begin

 CallSomething;

end;

begin

 CallSomethingElse;

end;

SCRIPT 2:

begin

 CallSomethingElse;

end;

SCRIPT 3:

function MyFunction;

begin

 result:='Ok!';

end;

SCRIPT 4:

CallSomethingElse;

Like in Pascal, statements should be terminated by ";" character. Begin..end blocks are allowed to group statements.

3. Identifiers

Identifier names in the script (variable names, function and procedure names, etc.) follow the most common rules in Pascal : should begin with a character (a..z or A..Z), or '_', and can be followed by alphanumeric chars or '_' char. Cannot contain any other character os spaces.

Valid identifiers:

VarName

_Some

V1A2

_____Some____

Invalid identifiers:

2Var

My Name

Some-more

This,is,not,valid

4. Assign statements

Just like in Pascal, assign statements (assign a value or expression result to a variable or object property) are built using ":=". Examples:

MyVar := 2;

Button.Caption := 'This ' + 'is ok.';

5. Character strings

Strings (sequence of characters) are declared in Pascal using a single quote (') character. Double quotes (") are not used. You can also use #nn to declare a character inside a string. There is no need to use '+' operator to add a character to a string. Some examples:

A := 'This is a text';

Str := 'Text '+'concat';

B := 'String with CR and LF char at the end'#13#10;

C := 'String with '#33#34' characters in the middle';

6. Comments

Comments can be inserted into the script. You can use // chars or (* *) or { } blocks. Using // char the comment will finish at the end of the line.

//This is a comment before ShowMessage

ShowMessage('Ok');

(* This is another comment *)

ShowMessage('More ok!');

{ And this is a comment

with two lines }

ShowMessage('End of okays');

7. Variables

There is no need to declare variable types in the script. Thus, you declare variable just using var directive and its name. There is no need to declare variables if scripter property OptionExplicit is set to false. In this case, variables are implicit declared. If you want to have more control over the script, set the OptionExplicit property to true. This will raise a compile error if the variable is used but not declared in the script. Examples:

SCRIPT 1:

procedure Msg;

var S;

begin

 S:='Hello world!';

 ShowMessage(S);

end;

SCRIPT 2:

var A;

begin

 A:=0;

 A:=A+1;

end;

SCRIPT 3:

var S: string;

begin

 S:='Hello World!';

 ShowMessage(S);

end;

Note that if script property OptionExplicit is set to false, then var declarations are not necessary for any of scripts above.

8. Indexes

Strings, arrays, and array properties can be indexed using "[" and "]" chars. For example, if Str is a string variable, the expression Str[3] returns the third character in the string denoted by Str, while Str[I+ 1] returns the character immediately after the one indexed by I. More examples:

MyChar:=MyStr[2];

MyStr[1]:='A';

MyArray[1,2]:=1530;

Lines.Strings[2]:='Some text';

9. Arrays

The script support sarray constructors and support to variant arrays. To construct an array, use "[" and "]" chars. You can construct multi-index array nesting array constructors. You can then access arrays using indexes. If the array is multi-index, separate indexes using ",".

If the variable is a variant array, the script automatically supports indexing in that variable. A variable is a variant array is it was assigned using an array constructor, if it is a direct reference to a Delphi variable which is a variant array (see Delphi integration later) or if it was created using VarArrayCreate procedure.

Arrays in script are 0-based index. Some examples:

NewArray := [ 2,4,6,8 ];

Num:=NewArray[1]; //Num receives "4"

MultiArray := [ ['green','red','blue'] , ['apple','orange','lemon'] ];

Str:=MultiArray[0,2]; //Str receives 'blue'

MultiArray[1,1]:='new orange';


10. If statements

There are two forms of if statement: if...then and the if...then...else. Like normal Pascal, if the if expression is true, the statement (or block) is executed. If there is else part and expression is false, statement (or block) after else is executed. Examples:

if J <> 0 then Result := I/J;

if J = 0 then Exit else Result := I/J;

if J <> 0 then

begin

 Result := I/J;

 Count := Count + 1;

end

else

 Done := True;

11. while statements

A while statement is used to repeat a statement or a block, while a control condition (expression) is evaluated as true. The control condition is evaluated before the statement. Hence, if the control condition is false at first iteration, the statement sequence is never executed. The while statement executes its constituent statement (or block) repeatedly, testing expression before each iteration. As long as expression returns True, execution continues. Examples:

while Data[I] <> X do I := I + 1;

while I > 0 do

begin

 if Odd(I) then Z := Z * X;

 I := I div 2;

 X := Sqr(X);

end;

while not Eof(InputFile) do

begin

 Readln(InputFile, Line);

 Process(Line);

end;

12. repeat statements

The syntax of a repeat statement is repeat statement1; ...; statementn; until expression where expression returns a Boolean value. The repeat statement executes its sequence of constituent statements continually, testing expression after each iteration. When expression returns True, the repeat statement terminates. The sequence is always executed at least once because the expression is not evaluated until after the first iteration. Examples:

repeat

 K := I mod J;

 I := J;

 J := K;

until J = 0;

repeat

 Write('Enter a value (0..9): ');

 Readln(I);

until (I >= 0) and (I <= 9);

13. for statements

The script supports for statements with the following syntax: for counter := initialValue to finalValue do statement

For statement set counter to initialValue, repeats execution of the statement (or block) and increment value of counter until counter reaches finalValue. Examples:

SCRIPT 1:

for c:=1 to 10 do

 a:=a+c;

SCRIPT 2:

for i:=a to b do

begin

 j:=i^2;

 sum:=sum+j;

end;

14. case statements

Scripter support case statements with the following syntax:

case selectorExpression of

caseexpr1: statement1;

...

caseexprn: statementn;

else

elsestatement;

end

if the selectorExpression matches the result of one of caseexprn expressions, the respective statement (or block) will be executed. Otherwise, elsestatement will be executed. Else part of the case statement is optional. Different from Delphi, the case statement in the script doesn't need to use only ordinal values. You can use expressions of any type in both selector expression and case expression. Example:

case uppercase(Fruit) of

 'lime': ShowMessage('green');

 'orange': ShowMessage('orange');

 'apple': ShowMessage('red');

else

 ShowMessage('black');

end;

15. function and procedure declaration

Declaration of functions and procedures are similar to Object Pascal in Delphi, with the difference you don't specify variable types. Just like OP, to return function values, use implicit declared result variable. Parameters by reference can also be used, with the restriction mentioned: no need to specify variable types. Some examples:

procedure HelloWord;

begin

 ShowMessage('Hello world!');

end;

procedure UpcaseMessage(Msg);

begin

 ShowMessage(Uppercase(Msg));

end;

function TodayAsString;

begin

 result:=DateToStr(Date);

end;

function Max(A,B);

begin

 if A>B then

   result:=A

 else

   result:=B;

end;

procedure SwapValues(var A, B);

Var Temp;

begin

 Temp:=A;

 A:=B;

 B:=Temp;

end;

Still need help? Contact Us Contact Us