/* ** Valido casio, by pyro (also known as pylaterreur on Planete Casio) ** Any questions, bugs ? => http://www.planet-casio.com/Fr/forums/ */ #ignore["my"] ::= [ '#' -> '\n' ] ; Basic ::= => global gotoArray; => global lblArray; #ignore("my") Body #continue #empty ; EndInstruction ::= '\n' | ':' ; Body ::= [ EndInstruction ]* [ [ Expr ]? EndInstruction ]* [ Expr ]? ; BodyLoop ::= [ EndInstruction ]* [ [ Expr ]? EndInstruction ]* ; Expr ::= [ [ [ NumExpr "=>" ]? [ VoidFunctions | Assignment | NumExpr | MatExpr | ListExpr | Text ] ] | IfThenElseIend | DoLpWhile | WhileWend | ForNext ] ; Text ::= '"' -> '"' ; NumExpr ::= [ [ [ '(' ]* [ Num | IntFunctions | Var ] [ ')' ]* ] [ [ '(' ]* [ [ Operator Num ] | [ [ Operator ]? [ IntFunctions | Var ] ] ] [ ')' ]* ]* ] ; Assignment ::= [ LeftValue "->" RightValue ] | [ DimMat "->Dim " Mat ] | [ ListExpr "->" List ] | [ MatExpr "->" Mat ] ; MatExpr ::= Mat | MatFunctions | [ => local linesize=-1; '[' [ '[' => local temp=0; [ NumExpr [ ',' NumExpr =>temp = $temp + 1$; ]* ] => if (linesize == -1 || temp == linesize) linesize = temp; else { traceLine("Erreur matrice !"); exit -1; } ']' ]+ ']' ] ; DimMat ::= '{' NumExpr ',' NumExpr '}' ; LeftValue ::= [ NumExpr | '?' ] ; // ne pas mettre les MatIndexed !!! SmallRightValue ::= ListIndexed | [ 'A'..'Z' [ #!ignore !["ist" | "at" | "~" ] ]] ; // ajouter le theta RightValue ::= SmallRightValue | MatIndexed | [ "Dim " List] | [ [ [ 'A'..'Z' ]:first '~' [ 'A'..'Z' ]:second ] #check(first <= second) ] ; Var ::= RightValue | "Ans" ; Index ::= '[' NumExpr ']' ; ListIndexed ::= List Index ; MatIndexed ::= Mat Index Index ; Mat ::= "Mat" MatName ; MatName ::= 'A'..'Z' | "Ans" ; ListExpr ::= [ List | ListFunctions | [ '{' NumExpr [ ',' NumExpr ]* '}' ] ] ; List ::= [ "List" [ ' ' ]? ListName ] ; DoLpWhile ::= "Do" EndInstruction BodyLoop "LpWhile " NumExpr ; ForNext ::= "For " Assignment " To " NumExpr [ "Step " NumExpr ]? EndInstruction BodyLoop "Next" ; WhileWend ::= "While " NumExpr EndInstruction BodyLoop "WhileEnd" ; IfThenElseIend ::= "If " NumExpr EndInstruction "Then " BodyLoop [ "Else " BodyLoop ]? "IfEnd" ; ListName ::= '1'..'9' | "Ans" ; Num ::= [ Unary ]* [ [ [ [ '0'..'9' ]* '.' ['0'..'9']+ ] | [ '0'..'9' ]+ ] | ListIndexed | MatIndexed ] ; Unary ::= [ '+' | [ '-' ] ] ; Operator ::= Binary | ComparOperator | LogicOperator ; Binary ::= [ Unary | '*' | '/' | '^' ] ; ComparOperator ::= [ "!=" | [ '<' | '>' ] [ '=' ]? | '=' ] ; LogicOperator ::= "And" | "Or" | "Xor" | "Not" ; Functions ::= VoidFunctions | IntFunctions | MatFunctions | ListFunctions ; IntFunctions ::= "Ans" | [ "Abs " NumExpr ] | [ "Dim " List ] | [ "Frac " NumExpr ] | "GetKey" | [ "Int " NumExpr ] | [ "Intg " NumExpr ] | [ "Max(" List [ ')' ]? ] | [ "Min(" List [ ')' ]? ] | [ "PxlTest " NumExpr ',' NumExpr ] | "Ran#" | [ "Sum " List ] ; ListFunctions ::= "Seq(" NumExpr ',' NumExpr ',' NumExpr ',' NumExpr ',' NumExpr ; MatFunctions ::= [ "List->Mat(" ListName [ ',' ListName ]* ')' ] | [ "Trn " Mat ] ; VoidFunctions ::= "AxesOff" | "AxesOn" | "BG-None" | // checker si le parametre est du bon type [ "BG-Pict " '0'..'9' ] | [ "Circle " NumExpr ',' NumExpr ',' NumExpr ] | "ClrGraph" | ["ClrList " [ ListName ]? ] | [ "ClrMat " MatName ] | "ClrText" | "Cls" | "CoordOff" | "CoordOn" | "Deg" | "DerivOff" | "DerivOn" | [ "Dim " Mat ] | "DrawDyna" | "DrawGraph" | "Drawstat" | // Ne marche pas avec les matrices sur g<100 (Cf Planete Casio) [ "Dsz " SmallRightValue ] | [ "F-Line " NumExpr ',' NumExpr ',' NumExpr ',' NumExpr ] | [ "File" '1'..'6' ] | "G-Connect" | "G-Plot" | [ "Goto" LblName:lbl => insert gotoArray[lbl] = true; ] | "Gra" | "GridOff" | "GridOn" | [ "Horizontal " NumExpr ] | "LabelOff" | "LabelOn" | [ "Lbl " LblName:lbl => insert lblArray[lbl] = true; ] [ "Isz " SmallRightValue ] | // besoin de check les Plot ? "Line" | [ "Locate " NumExpr ',' NumExpr ',' Text] | [ "Plot " NumExpr ',' NumExpr ] | [ "PlotChg " NumExpr ',' NumExpr ] | [ "PlotOff " NumExpr ',' NumExpr ] | [ "PlotOn " NumExpr ',' NumExpr ] | [ "Prog " Text ] | [ "Rad" ] | [ "RclPict " [ '1'..'6' ] ] | [ "Return" ] | [ "S-Grph" ['1'..'3'] [ "DrawOn" | "DrawOff" ] [ ',' [ "Scatter" | "xyLine" ] ',' List ',' List ',' NumExpr ',' [ "Dot" | "Cross" | "Square" ] ]? ] | "S-WindAuto" | "S-WindMan" | "SimulOff" | "SimulOn" | // manque "Stop" | [ "StoPict " [ '1'..'6' ] ] | [ "Swap " MatName ',' NumExpr ',' NumExpr ] | [ "Text " NumExpr ',' NumExpr ',' Text ] | [ "ViewWindow " NumExpr ',' NumExpr ',' NumExpr ',' NumExpr [ ',' NumExpr ',' NumExpr ',' NumExpr ]? ] | [ "Vertical " NumExpr ] ; // ajouter theta et l'autre LblName ::= '0'..'9' | 'A'..'Z' ;