Google


  1. Introduction

  

   Any time ago i have downloaded from Oasis hintp - .ppo interpreter. It

   works but not as good as i expected. So i wrote my own interpreter -

   BL. BL is scripting language for Clipper programs. Source code of BL

   is pure Clipper and can be compiled with any Clipper 5.x compiler or

   FlagShip. BL is simple and rather fast because uses Clipper for

   expression evaluation. BL is not a ppo interpreter, it's a different

   language.

   

    1.1 Where to get BL

    

   You can download sources here (about 12Kb)

   

    1.2 How to contact author

    

   My name is Sergey Aleshin, i am programmer from Russia

   

   e-mail: asg2@mail.ru

   

  2. Expressions

  

   Expressions in BL same as Clipper expressions except for ++,--,+= etc.

   You can't write code blocks like in Clipper but can use 'block'

   function: {|x,y,..| f(x,y,...)} must be replaced with

   block("f(x,y,...)",{"x","y",...})

   

   In short, you can use any expression that allowed in code block.

   

  3. Program structure

  

   BL program consists from main part - sequence of operators, and

   procedure definitions:

<operator0>

...

<operatorN>

proc p1

<operators>

endp

...

proc pN

<operators>

endp



   For BL program sample see *.bl files.

   

   Operators delimited by CR+LF (LF on UNIX) so you can write only one

   operator per line.

   

  4. Operators

  

    4.1 If

    

   Syntax:

if <expr>

<operators>

[elif <expr>

<operators>]

...

[elif <expr>

<operators>]

[else

<operators>]

endif



    4.2 For

    

   Syntax (similar to C):

for [<init_expr>];[<exit_expr>];[<iteration_expr>]

<operators>

next



   Sample:

for i:=1;i<=10;i:=i+1

 s:=s+i

next



   Endless loop:

for ;;

k:=inkey(0)

if k==27

 exit

endif

next



    4.3 While

    

   Syntax:

while <expr>

<operators>

endw



    4.4 Exit

    

   Exits closest For or While.

   

    4.5 Loop

    

   Go to next loop iteration.

   

    4.6 Call

    

   Syntax:

call <BL procedure name>



    4.7 Return

    

   Return from any place of BL procedure  Syntax:

return [<expr>]



   If <expr> is specified, it will evaluated and pushed to stack

   

    4.8 Private

    

   Declare private variables. Syntax:

private var1,...,varN



    4.9 Public

    

   Declare public variables. Syntax same as for private.

   

    4.10 Release

    

   Destroy any private or public variables. Syntax:

release var1,...,varN



  5. Procedures

  

   Syntax:

proc <procedure name>

[param p1,...,pN]

<operators>

endp



   Keyword 'param' can be used to declare procedure parameters.

   Parameters for procedure must be placed in stack with push operator,

   then procedure can be called with call operator:

push x

push y

call mul

pop result



proc mul

param a,b

return a*b

endp



   param p1,...,pN is short representation of

private p1,..,pN

pop pN

...

pop p1



   You can use recursion in BL.

   

  6. Using external scripts

  

   You can use loadlib operator to include code from other file to your

   script. Syntax:

loadlib <filename.ext>



  7. Using BL from Clipper

  

   There are 2 functions, 'progparse' and 'progrun'. PROGPARSE takes the

   text of program and produces array with precompiled code. Then code

   can be executed with PROGRUN function. See main.prg for example.

   

  8. Licence

  

   Public Domain

   

  9. Known problems

  

   BL stores procedures entry points in static array. So you can't

   execute more than one precompiled script if it uses procedures:

   progparse clears that array. You'll need to call both progparse and

   progrun for such scripts.

   

  10. Future plans

  

   I think that simple visual debugger like cld may be useful.