BNF for wlshell

NON-TERMINALS

script ::= commands <EOF>
commands ::= ( ( command )? eol )*
eol ::= <EOL>
command ::= ( atSign )? ( useVarCmd | assignmentCmd | c2wCmd | callCmd | cdCmd | chDomCmd | connectCmd | d2wCmd | dateCmd | descrCmd | dirCmd | disconnectCmd | domainsCmd | echoCmd | evalCmd | exitCmd | exploreCmd | exprCmd | findCmd | forCmd | getCmd | helpCmd | historyCmd | ifCmd | infoCmd | invokeCmd | keysCmd | mdCmd | optionCmd | outputCmd | pingCmd | promptCmd | pwdCmd | readCmd | reconnectCmd | reloadCmd | rdCmd | setCmd | sleepCmd | uploadCmd | verCmd | whileCmd ) ( redirect )?
redirect ::= ( <GT> | <RSIGNEDSHIFT> ) literal
assignmentCmd ::= identifier ( arrayIndex )? <ASSIGN> ( singleValue )+
background ::= <BIT_AND>
c2wCmd ::= <C2W> ( cmdOptions )? singleValue singleValue
callCmd ::= <CALL> ( cmdOptions )? ( singleValue )+ ( background )?
cdCmd ::= <CD> ( singleValue )?
chDomCmd ::= <DOMAIN_NAME>
connectCmd ::= <CONNECT> ( cmdOptions )? ( singleValue ( singleValue ( singleValue )? )? )?
d2wCmd ::= <D2W> ( cmdOptions )? singleValue singleValue
dateCmd ::= <DATE> ( cmdOptions )?
descrCmd ::= <DESCR> singleValue
dirCmd ::= ( <DIR> | <LS> ) ( cmdOptions )? ( singleValue )?
disconnectCmd ::= <DISCONNECT>
domainsCmd ::= <DOMAINS> ( cmdOptions )?
echoCmd ::= ( <ECHO> | <PRINT> ) ( singleValue )*
evalCmd ::= ( <EVAL> command )
exitCmd ::= ( <EXIT> | <QUIT> | <BYE> ) ( singleValue )?
exploreCmd ::= ( <EXPLORE> | <EXPLORER> )
exprCmd ::= ( <EXPR> <LPAREN> expression <RPAREN> )
findCmd ::= ( <FIND> | <SEARCH> ) ( cmdOptions )? ( singleValue | <STAR> )?
forCmd ::= <FOR> variable <IN> sequence ( <DO> )? eol ( commands ) <END>
getCmd ::= <GET> ( cmdOptions )? ( ( <LPAREN> singleValue <COMMA> singleValue <COMMA> singleValue <COMMA> singleValue <RPAREN> )? ) ( singleValue )+
helpCmd ::= <HELP> ( cmdOptions )? ( <PARSEABLE_LITERAL> | <C2W> | <CALL> | <CD> | <CONNECT> | <DATE> | <DESCR> | <DIR> | <LS> | <DISCONNECT> | <DOMAINS> | <ECHO> | <PRINT> | <EXIT> | <BYE> | <QUIT> | <EXPLORE> | <EXPLORER> | <FIND> | <FOR> | <GET> | <HELP> | <IF> | <INFO> | <INVOKE> | <KEYS> | <MKDIR> | <MD> | <OPTION> | <OPTIONS> | <OUTPUT> | <PING> | <PROMPT> | <PWD> | <READ> | <RECONNECT> | <RELOAD> | <REFRESH> | <RMDIR> | <RD> | <RUN> | <SEARCH> | <SET> | <SLEEP> | <UPLOAD> | <VER> | <WHILE> )?
historyCmd ::= <HISTORY> ( cmdOptions )?
ifCmd ::= <IF> expression ( <THEN> )? eol commands ( <ELSE> eol commands )? <END>
infoCmd ::= <INFO> ( cmdOptions )?
invokeCmd ::= ( <INVOKE> | <RUN> ) ( cmdOptions )? ( singleValue )+
mdCmd ::= ( <MD> | <MKDIR> ) ( cmdOptions )? singleValue ( singleValue )?
optionCmd ::= ( <OPTION> | <OPTIONS> ) ( cmdOptions )? ( singleValue )*
outputCmd ::= <OUTPUT> ( cmdOptions )? ( singleValue )*
keysCmd ::= <KEYS> ( cmdOptions )? ( singleValue )*
pingCmd ::= <PING> ( cmdOptions )? ( singleValue ( singleValue ( singleValue )? )? )?
promptCmd ::= <PROMPT> ( singleValue )*
pwdCmd ::= <PWD>
readCmd ::= <READ> ( cmdOptions )? singleValue
reconnectCmd ::= <RECONNECT> ( cmdOptions )?
reloadCmd ::= ( <RELOAD> | <REFRESH> ) ( cmdOptions )?
rdCmd ::= ( <RD> | <RMDIR> ) ( cmdOptions )? singleValue
setCmd ::= <SET> ( cmdOptions )? ( singleValue singleValue )?
sleepCmd ::= <SLEEP> ( cmdOptions )? singleValue
uploadCmd ::= <UPLOAD> ( cmdOptions )? singleValue ( singleValue )?
useVarCmd ::= variable ( singleValue )*
verCmd ::= <VER>
whileCmd ::= <WHILE> expression ( <DO> )? eol commands <END>
atSign ::= <AT>
cmdOptions ::= <CMD_OPTIONS>
sequence ::= expression ( <TO> expression )?
expression ::= conditionalExpression
conditionalExpression ::= conditionalOrExpression
conditionalOrExpression ::= conditionalAndExpression ( <OR> conditionalOrExpression )*
conditionalAndExpression ::= equalityExpression ( <AND> conditionalAndExpression )*
equalityExpression ::= relationalExpression ( ( <EQ> | <NE> ) equalityExpression )*
relationalExpression ::= additiveExpression ( ( <GT> | <GE> | <LT> | <LE> ) relationalExpression )*
additiveExpression ::= multiplicativeExpression ( <PLUS> multiplicativeExpression | <MINUS> multiplicativeExpression )*
multiplicativeExpression ::= unaryExpression ( <STAR> unaryExpression | ":" unaryExpression | <REM> unaryExpression )*
unaryExpression ::= ( <LPAREN> expression <RPAREN> | ( not )? singleValue )
not ::= <NOT>
singleValue ::= ( <LPAREN> literal <RPAREN> )? ( inExpressionCommand | exprCmd )
inExpressionCommand ::= ( literal | inExpressionGet | inExpressionInvoke | <PROMPT> literal )
inExpressionGet ::= <GET> ( cmdOptions )? literal
inExpressionInvoke ::= ( <INVOKE> | <RUN> ) ( cmdOptions )? ( singleValue )+
literal ::= ( integerLiteral | floatingPointLiteral | characterLiteral | stringLiteral | booleanLiteral | variable | arrayLiteral | newObject | identifier | parseableLiteral )
integerLiteral ::= <INTEGER_LITERAL>
floatingPointLiteral ::= <FLOATING_POINT_LITERAL>
characterLiteral ::= <CHARACTER_LITERAL>
stringLiteral ::= <STRING_LITERAL>
booleanLiteral ::= <BOOLEAN_LITERAL>
variable ::= <VARIABLE> ( arrayIndex )?
arrayIndex ::= <LBRACKET> expression <RBRACKET>
parseableLiteral ::= <PARSEABLE_LITERAL>
arrayLiteral ::= <LBRACKET> expression ( <COMMA> expression )* <RBRACKET>
identifier ::= <IDENTIFIER>
newObject ::= <NEW> ( identifier | parseableLiteral ) ( newParams | arrayIndex )
newParams ::= ( singleValue )*