Abstract:
At present, there are very few programming languages to develop and run applications in communications, especially in messaging.  
     The invention includes three new programming languages for this purpose:  
     QUELAN (question-answer language) to develop and run the quizzes (tests, trivia games)  
     DIALAN (dialogue language) to develop and run the dialogues  
     SCELAN (scenario language) procedural programming language with statements  ” send“ and  ” receive“ (to send and receive messages)  
     The program is written and then interpreted or translated. After the program is started, it runs, performing the programming statements. The communication with the user is done by messaging, e.g. via WWW, email or SMS.

Description:
FIELD  
         [0001]    The present invention relates to programming languages for developing and running applications in communications.  
         BACKGROUND  
         [0002]    There are very few programming languages to develop and run applications in communications. Three programming languages and their interpreters are written to solve this situation and to enable the users to develop, very simply, their own communication applications.  
         SUMMARY OF THE INVENTION  
         [0003]    The invention includes three programming languages for developing and running communication applications.  
           [0004]    QUELAN (Question-answer Language)  
           [0005]    This is a programming language to develop and run the quizzes (tests, trivia games).  
           [0006]    DIALAN (Dialogue Language)  
           [0007]    This is a programming language to develop and run the dialogues.  
           [0008]    SCELAN (Scenario Language)  
           [0009]    This is a programming language with statements “send” and “receive” (to send and receive messages).  
         DETAILED DESCRIPTION OF THE INVENTION  
         [0010]    Developing and Running Procedure  
           [0011]    The user writes the program and saves it to a file. In the case of QUELAN, the user writes questions and answers. In the case of DIALAN, the user writes dialogue in the form of blocks of questions, answers, reactions and further steps. In the case of SCELAN, the user writes a procedural program, in which he/she uses the statements “send” and “receive” to send and receive messages.  
           [0012]    The program can be either interpreted (e.g. by Perl interpreter) or translated into other programming languages (C++) or translated into machine code. After the program is saved (translated, compiled), it can run.  
           [0013]    The program can be started via WWW pages (by clicking on an icon), via email (by sending email with a keyword and parameters) or via SMS (by sending SMS with a keyword and parameters). For example, the user sends email or an SMS message in the form “GAME XOS FIRST” first, which means, that he/she wants to play the XOS game as the first player.  
           [0014]    After the program is started, it performs the initial statements (operations) and then sends a message to the user. For QUELAN, it is the first question of the quiz (test, trivia game). For DIALAN, it is the first question of the first block of the dialogue. For SCELAN, it is the message, contained in the first “send” statement.  
           [0015]    After sending the message, the interpreter or running system waits for the reply. A received reply may be assigned to the original sent message, for example, by making a temporary connection, by including some subject information into the sent and received message or by using a reply recognition in communications method.. Thus, the reply is assigned to the sent message, then evaluated and a further procedure taken.  
           [0016]    In the case of QUELAN, the reply to the user answers are stored and evaluated (whether good or bad, or scaled). The evaluation can be sent to the user and/or can be added to the quiz (test, trivia game) results. In the case of DIALAN, the keywords of the block are searched in the text of the reply. According to which keywords were found in the reply, the reaction is sent to the user and the next dialogue block to perform is chosen. In the case of SCELAN, the program continues by statements, following the “receive” statement. These statements evaluate somehow the reply, perform defined operations and continue until the next “send” or “receive” statement or until END of program.  
           [0017]    QUELAN  
           [0018]    Syntax  
           [0019]    &lt;program&gt;::=&lt;block&gt;|&lt;program&gt;&lt;block&gt; 
           [0020]    &lt;block&gt;::=&lt;question&gt;&lt;answers and evaluations&gt; 
           [0021]    &lt;question&gt;::=&lt;question body&gt;&lt;question end&gt; 
           [0022]    &lt;question body&gt;::=&lt;text&gt; 
           [0023]    &lt;question end&gt;:: ?&lt;answers and evaluations&gt;::=&lt;answers and evaluations variant 1&gt;|&lt;answers and evaluations variant 2&gt;| 
           [0024]    &lt;answers and evaluations variant 3&gt;|&lt;answers and evaluations variant 4&gt;|&lt;answers and evaluations variant 5&gt; 
           [0025]    &lt;answers and evaluations variant 1&gt;::=&lt;correct answer keywords&gt; 
           [0026]    &lt;answers and evaluations variant 2&gt;::=&lt;correct answer keywords&gt;&lt;points for correct answer&gt; 
           [0027]    &lt;answers and evaluations variant 3&gt;::=&lt;possible answer keywords rows&gt;&lt;correct answer letter&gt; 
           [0028]    &lt;answers and evaluations variant 4&gt;::=&lt;possible answer keywords rows&gt; 
           [0029]    &lt;correct answer letter&gt;&lt;points for correct answer&gt; 
           [0030]    &lt;answers and evaluations variant 5&gt;::=&lt;possible answer keywords and evaluation row pairs&gt; 
           [0031]    &lt;correct answer keywords&gt;::=&lt;correct answer keyword&gt;| 
           [0032]    &lt;correct answer keywords&gt;, &lt;correct answer keyword&gt; 
           [0033]    &lt;correct answer keyword&gt;::=&lt;name&gt;|&lt;number&gt;|&lt;interval&gt; 
           [0034]    &lt;points for correct answer&gt;::=&lt;unsigned integer number&gt; 
           [0035]    &lt;possible answer keywords rows&gt;::=&lt;possible answer keywords row&gt;| 
           [0036]    &lt;possible answer keywords rows&gt;&lt;possible answer keywords row&gt; 
           [0037]    &lt;possible answer keywords row&gt;::=&lt;possible answer keywords&gt; 
           [0038]    &lt;points for correct answer&gt;::=&lt;unsigned integer number&gt; 
           [0039]    &lt;possible answer keywords&gt;::=&lt;possible answer keyword&gt;| 
           [0040]    &lt;possible answer keywords&gt;, &lt;possible answer keyword&gt; 
           [0041]    &lt;possible answer keyword&gt;::=&lt;name&gt;|&lt;number&gt;|&lt;interval&gt; 
           [0042]    &lt;correct answer letter&gt;::=&lt;letter&gt; 
           [0043]    &lt;points for possible answer&gt;::=&lt;unsigned integer number&gt; 
           [0044]    &lt;possible answer keywords and evaluation row pairs&gt;::= 
           [0045]    &lt;possible answer keywords and evaluation row pairs&gt;| 
           [0046]    &lt;possible answer keywords and evaluation row pairs&gt;&lt;possible answer keywords and evaluation row pair&gt; 
           [0047]    &lt;possible answer keywords and evaluation row pair&gt; 
           [0048]    &lt;possible answer keywords&gt;&lt;points for possible answer&gt; 
           [0049]    &lt;name&gt;::=&lt;name begin&gt;|&lt;name body&gt; 
           [0050]    &lt;name begin&gt;::=&lt;letter&gt; 
           [0051]    &lt;name body&gt;::=&lt;empty&gt;|&lt;letter&gt;|&lt;name body element&gt;|&lt;name body&gt;&lt;name body element&gt; 
           [0052]    &lt;name body element&gt;::=&lt;letter&gt;|&lt;digit&gt;|&lt;underscore character&gt;|&lt;space&gt; 
           [0053]    &lt;text&gt;::=&lt;character&gt;|&lt;text&gt;&lt;character&gt; 
           [0054]    &lt;number&gt;::=&lt;number sign&gt;&lt;number body&gt; 
           [0055]    &lt;number sign&gt;::=&lt;empty&gt;|+|−| 
           [0056]    &lt;number body&gt;::=&lt;integer part&gt;&lt;decimal part&gt; 
           [0057]    &lt;integer part&gt;::=&lt;digit&gt;|&lt;integer part&gt;&lt;digit&gt; 
           [0058]    &lt;decimal part&gt;::=&lt;decimal point&gt;&lt;decimal part body&gt; 
           [0059]    &lt;decimal point&gt;::=.  
           [0060]    &lt;decimal part body&gt;::=&lt;digit |&lt;decimal part body&gt;&lt;digit&gt; 
           [0061]    &lt;unsigned integer number&gt;::=&lt;integer part&gt; 
           [0062]    &lt;interval&gt;::=&lt;lower level&gt;−&lt;upper level&gt; 
           [0063]    &lt;lower level&gt;:=&lt;number&gt; 
           [0064]    &lt;upper level&gt;:=&lt;number&gt; 
           [0065]    &lt;character&gt;::=&lt;letter&gt;|&lt;digit&gt;|&lt;special character&gt; 
           [0066]    &lt;letter&gt;::=a|b|c|d|e|f|g|h|i|j|k|l|m|n|o|p|q|r|s|t|u|v|w|x |y|z|A|B|C|D|E|F|G|H|I|J|K|L|M|N|O|P|Q|R|S|T|U|V|W|X|Y|Z  
           [0067]    &lt;digit&gt;:=0|1|2|3|4|5|6|7|8|9| 
           [0068]    &lt;special character&gt;::=any not letter or digit character (e.g. ‘˜!@#$%{circumflex over ( )}&amp;*()−_=+[]\;’,./{}|:&lt;&gt;?space)  
           [0069]    &lt;space&gt;::= 
           [0070]    Semantics  
           [0071]    The program consists of blocks of questions and answers.  
           [0072]    The first line of each block is the question.  
           [0073]    Question are followed by answering and evaluation lines.  
           [0074]    Each answering line consists of possible or correct answer keywords, numbers or intervals.  
           [0075]    Possible or correct answer keywords (phrases), numbers and intervals are separated by commas.  
           [0076]    When the possible or correct answer is a number, then instead of keyword the possible or correct interval (range) may written in the form “from-to” (e.g. 10-20).  
           [0077]    Answering lines may be followed by evaluation lines, containing the item letter (e.g., a, b, c etc.) of the correct answer and/or number of points for each possible or correct answer.  
           [0078]    An empty line separates two consecutive question-answer blocks.  
           [0079]    There are five variants of the question-answer blocks:  
           [0080]    1.  
           [0081]    Question  
           [0082]    Correct answer keywords  
           [0083]    2.  
           [0084]    Question  
           [0085]    Correct answer keywords  
           [0086]    Points for correct answer  
           [0087]    3.  
           [0088]    Question  
           [0089]    Possible answer keywords a  
           [0090]    Possible answer keywords b  
           [0091]    Possible answer keywords c  
           [0092]    . . .  
           [0093]    Possible answer keywords n  
           [0094]    Correct answer letter a, b, c . . . n  
           [0095]    4.  
           [0096]    Question  
           [0097]    Possible answer keywords a  
           [0098]    Possible answer keywords b  
           [0099]    Possible answer keywords c  
           [0100]    . . .  
           [0101]    Possible answer keywords n  
           [0102]    Correct answer letter a, b, c . . . n  
           [0103]    Points for correct answer  
           [0104]    5.  
           [0105]    Question  
           [0106]    Possible answer keywords a  
           [0107]    Points for possible answer a  
           [0108]    Possible answer keywords b  
           [0109]    Points for possible answer b  
           [0110]    Possible answer keywords c Points for possible answer c  
           [0111]    . . .  
           [0112]    Possible answer keywords n  
           [0113]    Points for possible answer n 
       
    
    
     EXAMPLE  
       [0114]    How many planets has our solar system? 
         [0115]    9, nine  
         [0116]    Translate the word “nice” into the german language.  
         [0117]    schon, schoen, hubsch, huebsch  
         [0118]    What is the longest river in the world? 
         [0119]    missisipi  
         [0120]    Amazon  
         [0121]    Nile  
         [0122]    c  
         [0123]    On which continent is the country Malawi?  
         [0124]    Africa  
         [0125]    America  
         [0126]    Europe  
         [0127]    a  
         [0128]    3  
         [0129]    Which woman do You like most? 
         [0130]    Cindy Crawford  
         [0131]    Rachel Welch  
         [0132]    5  
         [0133]    Your wife  
         [0134]    6  
         [0135]    DIALAN  
         [0136]    Syntax  
         [0137]    &lt;program&gt;::=&lt;block&gt;|&lt;program&gt;&lt;block&gt; 
         [0138]    &lt;block&gt;::=&lt;block name&gt;&lt;block type&gt;&lt;question&gt;&lt;answer parts&gt; 
         [0139]    &lt;block name&gt;::=&lt;name&gt; 
         [0140]    &lt;block type&gt;::=main|subsidiary|end  
         [0141]    &lt;question&gt;::=&lt;question body&gt;&lt;question end&gt; 
         [0142]    &lt;question body&gt;::=&lt;text&gt; 
         [0143]    &lt;question end&gt;:: ? 
         [0144]    &lt;answer parts&gt;::=&lt;answer parts&gt;|&lt;answer parts&gt;&lt;answer part&gt; 
         [0145]    &lt;answer part&gt;::=&lt;answer keywords&gt;&lt;reaction&gt;&lt;next block&gt; 
         [0146]    &lt;answer keywords&gt;::=&lt;answer keyword&gt;|&lt;answer keywords&gt;, &lt;answer keyword&gt;|else  
         [0147]    &lt;answer keyword&gt;::=&lt;name&gt;|&lt;number&gt;|&lt;interval&gt; 
         [0148]    &lt;reaction&gt;::=&lt;text&gt; 
         [0149]    &lt;next block&gt;::=&lt;block name&gt;|next|random|end  
         [0150]    &lt;name&gt;::=&lt;name begin&gt;|&lt;name body&gt; 
         [0151]    &lt;name begin&gt;::=&lt;letter&gt; 
         [0152]    &lt;name body&gt;::=&lt;empty&gt;|&lt;letter&gt;|&lt;name body element&gt;|&lt;name body&gt;&lt;name body element&gt; 
         [0153]    &lt;name body element&gt;::=&lt;letter&gt;|&lt;digit&gt;|&lt;underscore character&gt;|&lt;space&gt; 
         [0154]    &lt;text&gt;::=&lt;character&gt;|&lt;text&gt;&lt;character&gt; 
         [0155]    &lt;number&gt;::=&lt;number sign&gt;&lt;number body&gt; 
         [0156]    &lt;number sign&gt;::=&lt;empty&gt;|+|−| 
         [0157]    &lt;number body&gt;::=&lt;integer part&gt;&lt;decimal part&gt; 
         [0158]    &lt;integer part&gt;::=&lt;digit&gt;|&lt;integer part&gt;&lt;digit&gt; 
         [0159]    &lt;decimal part&gt;::=&lt;decimal point&gt;&lt;decimal part body&gt; 
         [0160]    &lt;decimal point&gt;::=.  
         [0161]    &lt;decimal part body&gt;::=&lt;digit|&lt;decimal part body&gt;&lt;digit&gt;&lt;interval&gt;::=&lt;lower level&gt;−&lt;upper level&gt; 
         [0162]    &lt;lower level&gt;:=&lt;number&gt; 
         [0163]    &lt;upper level&gt;:=&lt;number&gt; 
         [0164]    &lt;character&gt;::=&lt;letter&gt;|&lt;digit&gt;|&lt;special character&gt; 
         [0165]    &lt;letter&gt;::=a|b|c|d|e|f|g|h|i|j|k|l|m|n|o|p|q|r|s|t|u|v|w|x |y|z|A|B|C|D|E|F|G|H|I|J|K|L|M|N|O|P|Q|R|S|T|U|V|W|X|Y|Z  
         [0166]    &lt;digit&gt;:=0|1|2|3|4|5|6|7|8|9  
         [0167]    &lt;special character&gt;::=any not letter or digit character (e.g. ‘˜!@#$%{circumflex over ( )}&amp;*()−_=+[]\;’,./{}|:“&lt;&gt;?&lt;space&gt;)  
         [0168]    &lt;space&gt;::= 
         [0169]    Semantics  
         [0170]    The program consists of dialogue blocks.  
         [0171]    Each dialogue block consists of 3 rows followed by several trios of rows.  
         [0172]    The first row of the block contains the block name.  
         [0173]    The second row of the block contains the word “main” for main question, or the word “subsidiary” for question, which is derived from some preceding answer.  
         [0174]    The word “end” may be used here to end the dialogue.  
         [0175]    The third row of the block contains a question to send from the computer to the conversing person.  
         [0176]    A question is followed by trios of rows.  
         [0177]    Each of these trios corresponds to one possibility (variant) of the answer, received from the conversing person.  
         [0178]    The first row of the trio contains the keywords (phrases), which are expected in the conversing person&#39;s answer. These keywords are separated by commas. If one of these keywords occurs in the conversing person&#39;s answer, then this trio becomes a valid, computer reaction, written in the second row of the trio, sent to the conversing person. The dialogue continues by the block, the name of which is written in the third row of the trio. Instead of the answer keywords, the word “else” may be written. In this case this trio becomes valid without evaluating the conversing person&#39;s answer.  
         [0179]    The second row of the trio contains the computer reaction, which is to be sent to the conversing person. It will be sent, when the conversing person&#39;s answer contains some keyword, written in the first row of the trio. Instead of the computer reaction, the word “no” may be written here. In this case no computer answer is sent and the dialogue continues directly by the block, which name is written in the third row of the trio.  
         [0180]    The third row of the trio contains the name of the block to proceed. This third row may also contain the words: “next”, “random”, “end”. For the word “next”, the block to proceed is the one which follows in the program (file) the present block in the dialogue text. For the name “random”, the block to proceed is chosen by random from the main blocks of the dialogue, which have not performed yet. For the name “end”, the dialogue ends.  
         [0181]    Dialogue blocks are separated from each other by empty row.  
       EXAMPLE  
       [0182]    name  
         [0183]    main  
         [0184]    Hello, would you please tell me your name? 
         [0185]    no  
         [0186]    Sorry, since you won&#39;t tell me your name then I guess our conversation ends here.  
         [0187]    Bye.  
         [0188]    end  
         [0189]    greeting  
         [0190]    main  
         [0191]    Hello $answer, How are you today? 
         [0192]    good, ok, fine thanks, great, terrific, splendid, superb, groovy  
         [0193]    I am glad to hear it! 
         [0194]    cat  
         [0195]    bad, terrible, rotten, crappy, miserable, depressed, upset  
         [0196]    Don&#39;t be too down! 
         [0197]    weather  
         [0198]    other  
         [0199]    no next  
         [0200]    cat  
         [0201]    main  
         [0202]    Do you have a cat? 
         [0203]    yes, ye, ya, yip  
         [0204]    That&#39;s nice!  
         [0205]    cats name  
         [0206]    no  
         [0207]    Never mind.  
         [0208]    random no next  
         [0209]    other  
         [0210]    Sorry, do not understand. Please answer following question: NO or YES  
         [0211]    cat  
         [0212]    cats name  
         [0213]    subsidiary  
         [0214]    What is the cats&#39; name? 
         [0215]    any  
         [0216]    So palm this $answer, please.  
         [0217]    random no weather  
         [0218]    weather  
         [0219]    main  
         [0220]    What is the weather in your city today? 
         [0221]    good, ok, nice, beautiful, , excellent,  
         [0222]    Glad to read it!  
         [0223]    end dialogue  
         [0224]    rainy, sunny, snowing, drizzly, pouring, grey, overcast, bad, cloudy, crazy, storming, blowing,  
         [0225]    windy  
         [0226]    Hope it will get better.  
         [0227]    end dialogue  
         [0228]    other  
         [0229]    no  
         [0230]    end dialogue  
         [0231]    end dialogue  
         [0232]    end  
         [0233]    Sorry, I have no further questions at this time. Bye.  
         [0234]    SCELAN  
         [0235]    Syntax  
         [0236]    &lt;program&gt;::=&lt;program head&gt;&lt;program body&gt; 
         [0237]    &lt;program head&gt;::=program &lt;program name&gt; 
         [0238]    &lt;program name&gt;::=&lt;name&gt; 
         [0239]    &lt;program body&gt;::=&lt;block&gt;|&lt;subprogram&gt;|&lt;program body&gt;&lt;block&gt; 
         [0240]    &lt;block&gt;::=&lt;block begin&gt;&lt;block body&gt;&lt;block end&gt; 
         [0241]    &lt;block begin&gt;begin  
         [0242]    &lt;block body&gt;&lt;empty&gt;|&lt;statement&gt;|&lt;block body&gt;&lt;statement&gt; 
         [0243]    &lt;statement&gt;::=&lt;compound statement&gt;|&lt;simple statement&gt; 
         [0244]    &lt;compound statement&gt;::=&lt;possible conditional statement&gt;|&lt;block&gt; 
         [0245]    &lt;possible conditional statement&gt;::=&lt;empty&gt;|&lt;conditional statement&gt; 
         [0246]    &lt;conditional statement&gt;::=&lt;if statement&gt;|&lt;elseif statement&gt;|&lt;else statement&gt;|&lt;while statement&gt; 
         [0247]    &lt;if statement&gt;::=if (&lt;relation&gt;)  
         [0248]    &lt;elseif statement&gt;::=elseif (&lt;relation&gt;)  
         [0249]    &lt;else statement&gt;::=else  
         [0250]    &lt;while statement&gt;::=while (&lt;relation&gt;)  
         [0251]    &lt;simple statement&gt;::=&lt;conditional statement&gt;|&lt;unconditional statement&gt; 
         [0252]    &lt;unconditional statement&gt;::=&lt;unconditional statement body&gt;&lt;unconditional statement end&gt; 
         [0253]    &lt;unconditional statement body&gt;::=&lt;run statement&gt;|&lt;call statement&gt;| 
         [0254]    &lt;assignment statement&gt;| 
         [0255]    &lt;receive statement&gt;|&lt;send statement&gt;|&lt;label statement&gt;|&lt;goto statement&gt;| 
         [0256]    &lt;quitif statement&gt;|&lt;quitwhile statement&gt;|&lt;return statement&gt;|&lt;stop  
         [0257]    statement&gt;|&lt;exit statement&gt;| 
         [0258]    &lt;comment statement&gt; 
         [0259]    &lt;run statement&gt;::=run &lt;program name&gt; 
         [0260]    &lt;call statement&gt;::=call  
         [0261]    &lt;assignment statement&gt; 
         [0262]    &lt;receive statement&gt;::=receive mymobile &lt;variable name&gt; 
         [0263]    &lt;send statement&gt;::=send mymobile &lt;expression&gt; 
         [0264]    &lt;label statement&gt;label &lt;name&gt; 
         [0265]    &lt;goto statement&gt;::=goto &lt;name&gt; 
         [0266]    &lt;quitif statement&gt;::=quitif  
         [0267]    &lt;quitwhile statement&gt;::=quitwhile  
         [0268]    &lt;return statement&gt;::=return  
         [0269]    &lt;stop statement&gt;stop  
         [0270]    &lt;exit statement&gt;::=exit  
         [0271]    &lt;comment statement&gt;::=comment &lt;comment body&gt; 
         [0272]    &lt;comment body&gt;::=any character with the exception of;  
         [0273]    &lt;unconditional statement end&gt; 
         [0274]    &lt;block end&gt;::=end  
         [0275]    &lt;subprogram&gt;::=&lt;subprogram head&gt;&lt;subprogram body&gt; 
         [0276]    &lt;subprogram head&gt;::=subprogram &lt;subprogram name&gt; 
         [0277]    &lt;subprogram name&gt;::=&lt;name&gt; 
         [0278]    &lt;subprogram body&gt;::=&lt;empty&gt;|&lt;block&gt;|&lt;subprogram body&gt;&lt;block&gt; 
         [0279]    &lt;relation&gt;::=&lt;variable name&gt;&lt;conditional operator&gt;&lt;expression&gt; 
         [0280]    &lt;expression&gt;::=&lt;term&gt;|&lt;possible left  
         [0281]    bracket&gt;&lt;expression&gt;&lt;operator&gt;&lt;term&gt;&lt;possible right bracket&gt; 
         [0282]    &lt;term&gt;::=&lt;variable&gt;|&lt;string&gt;|&lt;number&gt; 
         [0283]    &lt;variable name&gt;::=$&lt;name&gt; 
         [0284]    &lt;name&gt;::=&lt;name begin&gt;|&lt;name body&gt; 
         [0285]    &lt;name begin&gt;::=&lt;letter&gt; 
         [0286]    &lt;name body&gt;::=&lt;empty&gt;|&lt;letter&gt;|&lt;name body element&gt;|&lt;name body&gt;&lt;name body element&gt; 
         [0287]    &lt;name body element&gt;::=&lt;letter&gt;|&lt;digit&gt;|&lt;underscore character&gt; 
         [0288]    &lt;letter&gt;::=a|b|c|d|e|f|g|h|i|j|k|l|m|n|o|p|q|r|s|t|u|v|w|x |y|z|A|B|C|D|E|F|G|H|I|J|K|L|M|N|O|P|Q|R|S|T|U|V|W|X|Y|Z  
         [0289]    &lt;digit&gt;:=0|1|2|3|4|5|6|7|8|9| 
         [0290]    &lt;underscore character&gt;::= 
         [0291]    &lt;string&gt;::=&lt;string begin&gt;&lt;string body&gt;.&lt;string end&gt; 
         [0292]    &lt;string begin&gt;::=” 
         [0293]    &lt;string body&gt;::=any character with the exception of ” 
         [0294]    &lt;string end&gt;::= 
         [0295]    &lt;number&gt;::=&lt;number sign&gt;&lt;number body&gt; 
         [0296]    &lt;number sign&gt;::=&lt;empty&gt;|+|−| 
         [0297]    &lt;number body&gt;::=&lt;integer part&gt;&lt;decimal part&gt; 
         [0298]    &lt;integer part&gt;::=&lt;digit&gt;|&lt;integer part&gt;&lt;digit&gt; 
         [0299]    &lt;decimal part&gt;::=&lt;decimal point&gt;&lt;decimal part body&gt; 
         [0300]    &lt;decimal point&gt;::=.  
         [0301]    &lt;decimal part body&gt;::=&lt;digit|&lt;decimal part body&gt;&lt;digit&gt; 
         [0302]    &lt;possible left bracket&gt;::=&lt;empty&gt;|(  
         [0303]    &lt;possible right bracket&gt;::=&lt;empty&gt;|)  
         [0304]    &lt;operator&gt;::=&lt;conditional operator&gt;|&lt;unconditional operator&gt; 
         [0305]    &lt;conditional operator&gt;::=ne|eq|gt|ge|It|le|el|cw|cp  
         [0306]    &lt;unconditional operator&gt;::=&lt;concatenation operator&gt;|&lt;arithmetic operator&gt; 
         [0307]    &lt;concatenation operator&gt; 
         [0308]    &lt;arithmetic operator&gt;::=+|−|*|/| 
         [0309]    &lt;empty&gt;::= 
         [0310]    Semantics  
         [0311]    SCELAN is a simple, structural, procedural language.  
         [0312]    The program consists of statements.  
         [0313]    Each statement must be written on one row.  
         [0314]    The statement must be finished with a semicolon.  
         [0315]    There is no semicolon at the end of the following statements: program, subprogram, begin, end, if, elseif, else, while.  
         [0316]    The statements program, subprogram, if, elseif, else, while must be followed by a block (begin . . . end).  
         [0317]    Conditions following the keywords if, elseif, while must be enclosed in brackets.  
         [0318]    Variables names must start with $ and contain letters, digits and underscores.  
         [0319]    Texts are written within quotes.  
         [0320]    Variables and texts may be joined by space dot space (.).  
         [0321]    Spaces are meaningful—syntactical units must be separated by one space.  
         [0322]    Program Units  
         [0323]    program name—defines name of program (scenario)  
         [0324]    subprogram name—defines name of subprogram  
         [0325]    if ($variable condition_operator expression)—if valid perform next block  
         [0326]    elseif ($variable conditional_operator expression)—if valid perform next block  
         [0327]    else—perform next block  
         [0328]    while ($variable conditional_operator expression)—if valid repeat cycle  
         [0329]    begin—begin of block  
         [0330]    end—end of block  
         [0331]    run program_name;—run program  
         [0332]    call subprogram_name;—call subprogram  
         [0333]    $variable=expression;—assign expression to the variable  
         [0334]    $variable=eval (expression);—evaluate expression and assign to the variable  
         [0335]    $variable=random (from, to);—random number will be generated into the variable  
         [0336]    receive mymobile $variable;—receives message into the variable  
         [0337]    send mymobile expression;—send message containing the expression  
         [0338]    label label_name;—designate place in program, where to jump  
         [0339]    goto label_name;—jump to label  
         [0340]    quitif;—quit block, which belongs to the actual if statement  
         [0341]    quitwhile;—quit block, which belongs to the actual while statement  
         [0342]    return;—return from subprogram  
         [0343]    stop;—stop present running program  
         [0344]    exit;—end of scenario (first program)  
         [0345]    comment text;—comment, no program action  
         [0346]    Conditional Operators  
         [0347]    ne—not equal  
         [0348]    eq—equal  
         [0349]    gt—greater than  
         [0350]    ge—greater or equal  
         [0351]    It—less than  
         [0352]    le—less  
         [0353]    el—equal without respect to capital letters  
         [0354]    cw—contains word  
         [0355]    cp—contains part  
       EXAMPLE  
       [0356]    [0356]                                                                                                                                                                                                               program myvirtualfriend       begin                comment This is example of virtual friend dialogue;           label start_dialogue;           $dialogue_is_about_cat = “no”;           $dialogue_is_about_weather = “no”;           send mymobile “Good morning, how are You today?”;           receive mymobile $answer;           $answer_how_are_you = $answer;           if ($answer eq “good”)           begin                send mymobile “This is good.”;           send mymobile “And what about Your cat?”;           $dialogue_is_about_cat = “yes”;           receive mymobile $answer_cat;                end           elseif ($answer eq “bad”)           begin                send mymobile “Do not cry, it could be worse.”;           call weather;                end           else           begin                send mymobile “Sorry, do not understand. Please send good or bad or END GAME.”;           goto start_dialogue;                end           if ($dialogue_is_about_cat eq “yes”)           begin                send mymobile “My cat is OK.”;                end           elseif ($dialogue_is_about_weather eq “yes”)           begin                send mymobile “Weather is not the best at Vancouver. Cloudy, raining.”;                end           send mymobile “Continue conversation?”;           receive mymobile $answer;           if ($answer cw “yes”)           begin                send mymobile “OK, let continue.”;           goto start_dialogue;                end           else           begin                send mymobile “OK, end of game.”;           exit;                end            end       subprogram weather       begin                send mymobile “What is the weather in Your city today?”;           $dialogue_is_about_weather = “yes”;           receive mymobile $answer_weather;            end