PWCT 1.9 Art Documentation ( http://doublesvsoop.sourceforge.net )

2006-2011, Mahmoud Fayed ( msfclipper@users.sourceforge.net )

_____________________________________________________________________________________

 

 

Language details

·         Reasons behind the low performance

·         Error messages

·         Grammar

----------------------------------------------------------------------

      Reasons behind the low performance of Supernova applications

----------------------------------------------------------------------

 

This low performance comes from:-

 

[1] Language Implementation Tools

 

Supernova developed using HarbourPWCT (Programming Without Coding Technology).

Harbour uses a Compiler + VM (Virtual Machine)

And Supernova Interpreter are based on hybrid implementation

Using a Compiler + VM (Virtual Machine)

So we have this architecture

 

   ----------------------------

       Supernova Application

   ----------------------------

        Supernova Compiler ||     Supernova Interpreter

           Supernova VM    ||  (Hybrid Implementation)

   ----------------------------

           Harbour VM

   ----------------------------

 

        It's clear when you run a Supernova Application

        You run a Compiler + 2 Virtual Machines

 

[2] Some Language features:-

 

    2.1) - Source code not Case/Space/Line/Tab Sensitive.

    2.2) - No Need for Variable/Array declaration

    2.3) - No Need for initial variable value before using it

    2.4) - No Variable type

    2.5) - Support for Events Based on variable value (State Events).

    2.6) - Multi-Language Source Code Support (Arabic/English/Mixed).

 

Samples
---------
 
        1 - Performance_LoopArray100.nova
        2 - Performance_LoopArray1000.nova
        3 - Performance_LoopArray10000.nova
        4 - Performance_LoopArray100000.nova
        5 - Performance_LoopArray1000000.nova
        6 - Performance_Loop10000.nova
 
[1] Performance_LoopArray100.nova
-----------------------------------
 
i want window and the window title is Loop Array 100.
 
[mytime1]. = the seconds.
 
[x]. = (1). and do while [x] <= (100).
                       [myarray]\[x]. = [x] x [x].
                       [x]. = [x] + (1).
                       do windows events
               end while
 
i want textbox AND the textbox value from [myarray]\(100).
 
[mytime2]. = the seconds.
 
i want textbox and the textbox value from [mytime2]-[mytime1].
 
the textbox top is 50.
 
[2] Performance_LoopArray1000.nova
------------------------------------
 
i want window and the window title is Loop Array 1,000.
 
[mytime1]. = the seconds.
 
[x]. = (1). and do while [x] <= (1000).
                       [myarray]\[x]. = [x] x [x].
                       [x]. = [x] + (1).
                       do windows events
               end while
 
i want textbox and the textbox value from [myarray]\(1000).
 
[mytime2]. = the seconds.
 
i want textbox and the textbox value from [mytime2]-[mytime1].
 
the textbox top is 50.
 
[3] Performance_LoopArray10000.nova
-------------------------------------
i want window and the window title is Loop Array 10,000.
 
[mytime1]. = the seconds.
 
[x]. = (1). and do while [x] <= (10000).
                       [myarray]\[x]. = [x] x [x]. 
                       [x]. = [x] + (1).
                       do windows events
               end while
 
i want textbox and the textbox value from [myarray]\(10000).
 
[mytime2]. = the seconds.
 
i want textbox and the textbox value from [mytime2]-[mytime1].
 
the textbox top is 50.
 
 
 
[4] Performance_LoopArray100000.nova
--------------------------------------
 
i want window and the window title is Loop Array 100,000.
 
[mytime1]. = the seconds.
 
[x]. = (1). and do while [x] <= (100000).
                       [myarray]\[x]. = [x] x [x]. 
                       [x]. = [x] + (1).
                       do windows events
               end while
 
i want textbox and the textbox value from [myarray]\(100000).
 
[mytime2]. = the seconds.
 
i want textbox and the textbox value from [mytime2]-[mytime1].
 
the textbox top is 50.
 
[5] Performance_LoopArray1000000.nova
---------------------------------------
 
i want window and the window title is Loop Array 1,000,000.
 
[mytime1]. = the seconds.
 
[x]. = (1). and do while [x] <= (1000000).
                       [myarray]\[x]. = [x] x [x]. 
                       [x]. = [x] + (1).
                       do windows events
               end while
 
i want textbox and the textbox value from [myarray]\(1000000).
 
[mytime2]. = the seconds.
 
i want textbox and the textbox value from [mytime2]-[mytime1].
 
the textbox top is 50.
 
[6] Performance_Loop10000.nova
--------------------------------
 
i want window and the window title is Loop10000.
 
[mytime1]. = the seconds.
 
[x]. = (1). and do while [x] <= (10000).
                       [Y]. = [X] x [X]. 
                       [x]. = [x] + (1).
                       do windows events
               end while
 
i want textbox and the textbox value from [Y].
 
[mytime2]. = the seconds.
 
i want textbox and the textbox value from [mytime2]-[mytime1].
 
the textbox top is 50.
 
 

 

Error Messages
----------------
 
   1) : Unexpected End IF Statement - Do IF Statement is required.
   2) : Unclosed Do IF Statement structure- End IF Statement is required.
   3) : Unexpected End While Statement - Do While Statement is required.
   4) : Unclosed Do While Statement structure- End While Statement is required.
   5) : General Syntax Error.
   6) : Command Error, The Grammer is TRUE but the Command is undefined.
   7) : Expression Error [Variable] is expected.
   8) : Expression Error (Value) is expected.
   9) : General Expression Error.
  10) : Expression Error, Cann't determine expression result.
  11) : Bad GUI Command (No Window Defined).
  12) : Bad GUI Command (No Object Defined).
  13) : Unexpected OK/End Function/End Procedure/End Of Instructions Statement
  14) : Unclosed Procedure/.....Instructions Are/Function Statement structure
 

 

Samples
---------
 
        1 - ManyUnclosedIF.nova
        2 - ManyUnexpectedEndif.nova
        3 - MixUnexpectedEndifUnclosedIF.nova
        4 - UnclosedIF.nova
        5 - UnexpectedEndif.nova
        6 - ManyUnclosedWhile.nova
        7 - ManyUnexpectedEndWhile.nova
        8 - MixUnexpectedEndWhileUnclosedWhile.nova
        9 - UnclosedWhile.nova
       10 - UnexpectedEndWhile.nova
       11 - GeneralSyntaxError.nova
       12 - CommandError.nova
       13 - DataExpr1.nova
       14 - DataExpr2.nova
       15 - DataExpr3.nova
       16 - DataExpr4.nova
       17 - DividebyZero.nova
       18 - NoWindowDefined.nova
       19 - NoObjectDefined.nova
       20 - NoWindowDefinedNoObjectDefined.nova
       21 - UnexpectedEndFunction.nova
       22 - UnexpectedFunction.nova
       23 - MixUnexpectedEndFunctionUnexpectedFunction.nova
 
 
[1] ManyUnclosedIF.nova
-------------------------
 
Application title = Error.
 
I want window and window title = Error.
Window height = 130.
 
[X]. = (1).
 
DO IF [X] = (1).
DO IF [X] = (1).
DO IF [X] = (1).
endif
DO IF [X] = (1).
DO IF [X] = (1).
 
 
[2] ManyUnexpectedEndif.nova
------------------------------
 
Application title = Error.
 
I want window and window title = Error.
Window height = 130.
 
 
endif
endif
 
do if [x] = (1).
endif
 
endif
endif
 
[3] MixUnexpectedEndifUnclosedIF.nova
---------------------------------------
 
Application title = Error.
 
I want window and window title = Error.
Window height = 130.
 
 
endif
do if [x] = (1).
 
[4] UnclosedIF.nova
---------------------
 
Application title = Error.
 
I want window and window title = Error.
Window height = 130.
 
[X]. = (1).
DO IF [X] = (1).
 
[5] UnexpectedEndif.nova
--------------------------
 
Application title = Error.
 
I want window and window title = Error.
Window height = 130.
 
 
endif
 
[6] ManyUnclosedWhile.nova
----------------------------
 
Application title = Error.
 
I want window and window title = Error.
Window height = 130.
 
[X]. = (1).
 
DO While [X] = (1).
DO While [X] = (1).
DO While [X] = (1).
endWhile
DO While [X] = (1).
DO While [X] = (1).
 
[7] ManyUnexpectedEndWhile.nova
---------------------------------
 
Application title = Error.
 
I want window and window title = Error.
Window height = 130.
 
 
endWhile
endWhile
 
do While [x] = (1).
endWhile
 
endWhile
endWhile
 
[8] MixUnexpectedEndWhileUnclosedWhile.nova
----------------------------------------------
 
Application title = Error.
 
I want window and window title = Error.
Window height = 130.
 
 
endwhile
do while [x] = (1).
 
[9] UnclosedWhile.nova
------------------------
 
Application title = Error.
 
I want window and window title = Error.
Window height = 130.
 
[X]. = (1).
DO While [X] = (1).
 
[10] UnexpectedEndWhile.nova
------------------------------
 
Application title = Error.
 
I want window and window title = Error.
Window height = 130.
 
 
endwhile
 
[11] GeneralSyntaxError.nova
------------------------------
 
Application title = Error.
 
I want window and window title = Error.
 
what
 
[12] CommandError.nova
------------------------
 
Application title = Error.
 
I want window and window title = Error.
 
You show listbox
 
[13] DataExpr1.nova
---------------------
 
Application title = Error.
 
I want window and window title from [x.
 
 
[14] DataExpr2.nova
---------------------
 
Application title = Error.
 
I want window and window title from (5.
 
 
[15] DataExpr3.nova
---------------------
 
Application title = Error.
 
I want window and window title from wow.
 
 
[16] DataExpr4.nova
---------------------
 
Application title = Error.
 
I want window and window title from + (5).
 
 
[17] DividebyZero.nova
------------------------
 
Application title = Error.
 
I want window and window title from (100) / (0).
 
 
[18] NoWindowDefined.nova
---------------------------
 
the window title is wow.
 
[19] NoObjectDefined.nova
---------------------------
 
i want window
the button caption is wow.
 
[20] NoWindowDefinedNoObjectDefined.nova
------------------------------------------
 
the textbox value is wow.
 
[21] UnexpectedEndFunction.nova
---------------------------------
 
Application title = Error.
 
I want window and window title = Error.
Window height = 130.
 
end of instructions
 
[22] UnexpectedFunction.nova
------------------------------
 
Application title = Error.
 
I want window and window title = Error.
Window height = 130.
 
function wow.
 
[23] MixUnexpectedEndFunctionUnexpectedFunction.nova
------------------------------------------------------
 
Application title = Error.
 
I want window and window title = Error.
Window height = 130.
 
End function
 
function wow.

 

Supernova Programming Language Grammar
----------------------------------------
 
* The Language is not Case/Space/Line/Tab sensitive
* The Token is a one character (Letter/Number/....etc). 
* The Grammer is ***Context Sensitive***
 
S       read as  Statement and it is the StartUp Symbol
->      read as  May be replaced by
P       read as (Pronouns + some other tokens ) Class 
V       read as (Verbs + some other tokens ) Class 
C       read as (Classes + some other tokens ) Class 
I       read as (Instructions + some other tokens ) Class 
A       read as (Attributes + some other tokens ) Class 
D       read as (Data as value or Data as Expression )
(....)  read as (Real Stack Tokens without Classification and without data)
OPCode  read as Operation Code related to a command in the language 

 

The Basic Context Controlling Rules
-------------------------------------
 
S -> SI         Rule 1
S -> SPVC       Rule 2
S -> SCAVD     Rule 3  
S -> SDI       Rule 4
S -> SDVD      Rule 5
 
Since the token is one Character classification ( I, P, V, C, A & D)
is used to manage them
 
Also there are switches determine the next class
i.e. Classes are context sensitive
 
1 - I may comes only after S or D  (See Rules 1 and 4)
2 - P may comes only after S (See Rule 2)
3 - V may comes only after P, A or D (See Rules 2,3 and 5)
4 - C may comes only after V or S (See Rules 2 and 3)
5 - A may comes only after C (See Rule 3)
 
i.e. In the start of tokens classification, the expected token class
is I,P,C or D.
 
Last accepted class              Next class must be
        S                           I,P,C OR D
        I                               S
        P                               V
        C                             S OR A
        A                               V
        D                            S, I OR V
        V                             C OR D