Editeur expression
Publié : lun. 13/févr./2017 8:18
Salut,
Je souhaiterais faire un éditeur d'expression pour calculer une opération et aussi la vérifier.
Je sais que c'est un travail énorme, et que je n'est pas les compétences pour.
Existe t-il un code que je pourrais utiliser ?
J'ai rien trouver sur ce forum.
J'ai réussi à adapté un code de Danilo qui date de 2011 qu'on m'as donnée:
http://forums.purebasic.com/german/view ... =8&t=24256
C'est déjà pas mal, un bon début mais ça ne fait pas tous
notamment les expressions de mats.
Existe t-il un editeur d'expression complet ?
Faudrait que ça face toutes les expressions math de pb.
Je poste mon code d'adaptation au cas ou ça intéresse:
Je souhaiterais faire un éditeur d'expression pour calculer une opération et aussi la vérifier.
Je sais que c'est un travail énorme, et que je n'est pas les compétences pour.
Existe t-il un code que je pourrais utiliser ?
J'ai rien trouver sur ce forum.
J'ai réussi à adapté un code de Danilo qui date de 2011 qu'on m'as donnée:
http://forums.purebasic.com/german/view ... =8&t=24256
C'est déjà pas mal, un bon début mais ça ne fait pas tous
notamment les expressions de mats.
Existe t-il un editeur d'expression complet ?
Faudrait que ça face toutes les expressions math de pb.
Je poste mon code d'adaptation au cas ou ça intéresse:
Code : Tout sélectionner
; Interface Editeur D'expression 01.01
; Créer par Monsieur Dieppedalle David le 12/02/2017.
#GENERATE_STACKMASCHINE_ASM = 1
; by Danilo, May 2011
; german forum: http://forums.purebasic.com/german/viewtopic.php?f=8&t=24256
XIncludeFile "Evaluate.pbi"
Procedure.l Option_Fenetre(SystemMenu, TitleBar, MinimizeGadget, MaximizeGadget, SizeGadget, ScreenCentered, WindowCentered, Tool, Minimize, Maximize, BorderLess, NoGadgets, Invisible)
If SystemMenu = 1
Option_Fenetre|#PB_Window_SystemMenu
EndIf
If TitleBar = 1
Option_Fenetre|#PB_Window_TitleBar
EndIf
If MinimizeGadget = 1
Option_Fenetre|#PB_Window_MinimizeGadget
EndIf
If MaximizeGadget = 1
Option_Fenetre|#PB_Window_MaximizeGadget
EndIf
If SizeGadget = 1
Option_Fenetre|#PB_Window_SizeGadget
EndIf
If ScreenCentered = 1
Option_Fenetre|#PB_Window_ScreenCentered
EndIf
If WindowCentered = 1
Option_Fenetre|#PB_Window_WindowCentered
EndIf
If Tool = 1
Option_Fenetre|#PB_Window_Tool
EndIf
If Minimize = 1
Option_Fenetre|#PB_Window_Minimize
EndIf
If Maximize = 1
Option_Fenetre|#PB_Window_Maximize
EndIf
If BorderLess = 1
Option_Fenetre|#PB_Window_BorderLess
EndIf
If NoGadgets = 1
Option_Fenetre|#PB_Window_NoGadgets
EndIf
If Invisible = 1
Option_Fenetre|#PB_Window_Invisible
EndIf
ProcedureReturn Option_Fenetre
EndProcedure
Global Numero_InterfaceEditeurExpression = 1
Global Position_X_InterfaceEditeurExpression = 440
Global Position_Y_InterfaceEditeurExpression = 170
Global Largeur_InterfaceEditeurExpression = 395
Global Hauteur_InterfaceEditeurExpression = 435
Global Titre_InterfaceEditeurExpression$ = "Editeur D'expression 1.01"
Global Option_InterfaceEditeurExpression = Option_Fenetre(1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0)
Enumeration
#Boutton_0
#Boutton_1
#Boutton_2
#Boutton_3
#Boutton_4
#Boutton_5
#Boutton_6
#Boutton_7
#Boutton_8
#Boutton_9
#Boutton_Point
#Boutton_Or
#Boutton_Xor
#Boutton_And
#Boutton_Divise
#Boutton_Parenthese_Ouvrente
#Boutton_Parenthese_Fermente
#Boutton_Plus
#Boutton_Moins
#Boutton_Multiplie
#Boutton_Inferieur
#Boutton_Superieur_Ou_Egale
#Boutton_Inferieur_Ou_Egale
#Boutton_Decalage_Droite
#Boutton_Decalage_Gauche
#Boutton_Superieur
#Boutton_Not
#Boutton_Modulo_Binaire
#Boutton_Exponentiel
#Boutton_Hexadecimal
#Boutton_Different
#Boutton_Egale
#Editor_Opperation
#Editor_Resultat_Opperation
#Editor_Erreur
#ButtonImage_Valider
#ButtonImage_Annuler
#Text_Info_Expression
#Text_Info_Resultat_Opperation
#Text_Info_Erreur
EndEnumeration
Procedure myErrorHandler(ERREUR.l,arg1.s)
Define msg.s
Select ERREUR
Case #evalError_HexNumExpected
msg="ERREUR: nombre HEX attendu après $"
Case #evalError_BinNumExpected
msg="ERREUR: nombre binaire attendu après %"
Case #evalError_IllegalInput
msg="ERREUR: entrée illégale détectée: '" + arg1 +"' - (Chr: "+Str(Asc(arg1))+")"
Case #evalError_MissingOperator
msg="ERREUR: opérateur attendue"
Case #evalError_MissingOperand
msg="ERREUR: opérande manquant après: " +arg1
Case #evalError_MissingExpression
msg="ERREUR: expression attendue après " + arg1
Case #evalError_MissingRParenthesis
msg="ERREUR: ')' manquant"
Case #evalError_MissingDecimalPlace
msg="ERREUR: . manquant après la décimale"
Case #evalError_BinaryNotWithFloats
msg="ERREUR: "+arg1+" binaire avec des valeurs en virgule flottante n'est pas pris en charge, utiliser des entiers"
Case #evalError_DivisionWithNull
msg="ERREUR: division par 0"
Case #evalError_ModuloWithNull
msg="ERREUR: modulo (%) par 0"
Case #evalError_TokenCantStartExpression
msg="ERREUR: "+arg1+" ne peut pas commencer une expression"
Default
msg="ERREUR: erreur inconnue"
EndSelect
AddGadgetItem(#Editor_Erreur,-1,msg)
EndProcedure
Procedure InterfaceEditeurExpression()
If OpenWindow(Numero_InterfaceEditeurExpression, Position_X_InterfaceEditeurExpression, Position_Y_InterfaceEditeurExpression, Largeur_InterfaceEditeurExpression, Hauteur_InterfaceEditeurExpression, Titre_InterfaceEditeurExpression$, Option_InterfaceEditeurExpression)
; Création des Gadgets:
ButtonGadget(#Boutton_0, 10, 395, 75, 30, "0")
GadgetToolTip(#Boutton_0, "0")
ButtonGadget(#Boutton_1, 10, 360, 35, 30, "1")
GadgetToolTip(#Boutton_1, "1")
ButtonGadget(#Boutton_2, 50, 360, 35, 30, "2")
GadgetToolTip(#Boutton_2, "2")
ButtonGadget(#Boutton_3, 90, 360, 35, 30, "3")
GadgetToolTip(#Boutton_3, "3")
ButtonGadget(#Boutton_4, 10, 325, 35, 30, "4")
GadgetToolTip(#Boutton_4, "4")
ButtonGadget(#Boutton_5, 50, 325, 35, 30, "5")
GadgetToolTip(#Boutton_5, "5")
ButtonGadget(#Boutton_6, 90, 325, 35, 30, "6")
GadgetToolTip(#Boutton_6, "6")
ButtonGadget(#Boutton_7, 10, 290, 35, 30, "7")
GadgetToolTip(#Boutton_7, "7")
ButtonGadget(#Boutton_8, 50, 290, 35, 30, "8")
GadgetToolTip(#Boutton_8, "8")
ButtonGadget(#Boutton_9, 90, 290, 35, 30, "9")
GadgetToolTip(#Boutton_9, "9")
ButtonGadget(#Boutton_Point, 90, 395, 35, 30, ".")
GadgetToolTip(#Boutton_Point, ".")
ButtonGadget(#Boutton_Or, 310, 360, 35, 30, "Or")
GadgetToolTip(#Boutton_Or, "Ou Logique (|)")
ButtonGadget(#Boutton_Xor, 350, 360, 35, 30, "Xor")
GadgetToolTip(#Boutton_Xor, "Ou Exclusif Logique (!)")
ButtonGadget(#Boutton_And, 310, 325, 35, 30, "And")
GadgetToolTip(#Boutton_And, "Et Logique (&)")
ButtonGadget(#Boutton_Divise, 130, 290, 35, 30, "/")
GadgetToolTip(#Boutton_Divise, "Division")
ButtonGadget(#Boutton_Parenthese_Ouvrente, 310, 290, 35, 30, "(")
GadgetToolTip(#Boutton_Parenthese_Ouvrente, "Parenthese Fermente")
ButtonGadget(#Boutton_Parenthese_Fermente, 350, 290, 35, 30, ")")
GadgetToolTip(#Boutton_Parenthese_Fermente, "Parenthese Ouvrente")
ButtonGadget(#Boutton_Plus, 130, 395, 35, 30, "+")
GadgetToolTip(#Boutton_Plus, "Addition")
ButtonGadget(#Boutton_Moins, 130, 360, 35, 30, "-")
GadgetToolTip(#Boutton_Moins, "Soustraction")
ButtonGadget(#Boutton_Multiplie, 130, 325, 35, 30, "*")
GadgetToolTip(#Boutton_Multiplie, "Multiplication")
ButtonGadget(#Boutton_Inferieur, 220, 290, 35, 30, "<")
GadgetToolTip(#Boutton_Inferieur, "Inferieur à")
ButtonGadget(#Boutton_Superieur_Ou_Egale, 260, 325, 35, 30, ">=")
GadgetToolTip(#Boutton_Superieur_Ou_Egale, "Supérieur ou égale à")
ButtonGadget(#Boutton_Inferieur_Ou_Egale, 220, 325, 35, 30, "<=")
GadgetToolTip(#Boutton_Inferieur_Ou_Egale, "Inferieur ou egale à")
ButtonGadget(#Boutton_Decalage_Droite, 260, 395, 35, 30, ">>")
GadgetToolTip(#Boutton_Decalage_Droite, "Décalage à droite")
ButtonGadget(#Boutton_Decalage_Gauche, 220, 395, 35, 30, "<<")
GadgetToolTip(#Boutton_Decalage_Gauche, "Décalage à gauche")
ButtonGadget(#Boutton_Superieur, 260, 290, 35, 30, ">")
GadgetToolTip(#Boutton_Superieur, "Superieur à")
ButtonGadget(#Boutton_Not, 350, 325, 35, 30, "Not")
GadgetToolTip(#Boutton_Not, "N'est pas (~)")
ButtonGadget(#Boutton_Modulo_Binaire, 170, 325, 35, 30, "%")
GadgetToolTip(#Boutton_Modulo_Binaire, "Modulo / Binaire")
ButtonGadget(#Boutton_Exponentiel, 170, 290, 35, 30, "^")
GadgetToolTip(#Boutton_Exponentiel, "Exponentiel")
ButtonGadget(#Boutton_Hexadecimal, 170, 360, 35, 30, "$")
GadgetToolTip(#Boutton_Hexadecimal, "Hexadecimal")
ButtonGadget(#Boutton_Different, 220, 360, 75, 30, "<>")
GadgetToolTip(#Boutton_Different, "Différent de")
ButtonGadget(#Boutton_Egale, 170, 395, 35, 30, "=")
GadgetToolTip(#Boutton_Egale, "Egale à")
EditorGadget(#Editor_Opperation, 10, 27, 375, 95)
EditorGadget(#Editor_Resultat_Opperation, 10, 153, 375, 20, #PB_Editor_ReadOnly)
TextGadget(#Text_Info_Expression, 10, 10, 375, 15, "Entrez votre expression:", #PB_Text_Center)
EditorGadget(#Editor_Erreur, 10, 205, 375, 75, #PB_Editor_ReadOnly)
TextGadget(#Text_Info_Resultat_Opperation, 10, 137, 375, 15, "Résultat:", #PB_Text_Center)
TextGadget(#Text_Info_Erreur, 10, 188, 375, 15, "Erreurs:", #PB_Text_Center)
ButtonImageGadget(#ButtonImage_Valider, 310, 395, 35, 30, 0)
ButtonImageGadget(#ButtonImage_Annuler, 350, 395, 35, 30, 0)
SetActiveGadget(#Editor_Opperation)
Repeat ; Départ des évènements de boucle
Event = WaitWindowEvent(1) ; Cette ligne attend pendent (Minuteur) qu'un évènement soit recus par la fenêtre
EventWindow = EventWindow() ; La fenêtre ou l'évènement c'est produit
EventGadget = EventGadget() ; Pour savoir sur quel gadget c'est produis l'évènement
EventMenu = EventMenu() ; Pour savoir sur quel menue c'est produis l'évènement
EventType = EventType() ; Le type d'évènement qui c'est produis sur le gadget
Select Event
Case 512 ; Déplacement de la souris sur la fenêtre
Case 513 ; Bouton gauche appuiler avec la souris sur la fenêtre
Case 514 ; Bouton gauche relacher avec la souris sur la fenêtre
Case 515 ; Double clique gauche avec la souris sur la fenêtre
Case 516 ; Bouton droit appuiler avec la souris sur la fenêtre
Case 517 ; Bouton droit relacher avec la souris sur la fenêtre
Case 518 ; Double clique droit avec la souris sur la fenêtre
Case #PB_Event_Gadget
Select EventGadget
Case #Boutton_0
SendMessage_(GadgetID(#Editor_Opperation), #EM_REPLACESEL, 0, "0")
Case #Boutton_1
SendMessage_(GadgetID(#Editor_Opperation), #EM_REPLACESEL, 0, "1")
Case #Boutton_2
SendMessage_(GadgetID(#Editor_Opperation), #EM_REPLACESEL, 0, "2")
Case #Boutton_3
SendMessage_(GadgetID(#Editor_Opperation), #EM_REPLACESEL, 0, "3")
Case #Boutton_4
SendMessage_(GadgetID(#Editor_Opperation), #EM_REPLACESEL, 0, "4")
Case #Boutton_5
SendMessage_(GadgetID(#Editor_Opperation), #EM_REPLACESEL, 0, "5")
Case #Boutton_6
SendMessage_(GadgetID(#Editor_Opperation), #EM_REPLACESEL, 0, "6")
Case #Boutton_7
SendMessage_(GadgetID(#Editor_Opperation), #EM_REPLACESEL, 0, "7")
Case #Boutton_8
SendMessage_(GadgetID(#Editor_Opperation), #EM_REPLACESEL, 0, "8")
Case #Boutton_9
SendMessage_(GadgetID(#Editor_Opperation), #EM_REPLACESEL, 0, "9")
Case #Boutton_Point
SendMessage_(GadgetID(#Editor_Opperation), #EM_REPLACESEL, 0, ".")
Case #Boutton_Or
SendMessage_(GadgetID(#Editor_Opperation), #EM_REPLACESEL, 0, "Or")
Case #Boutton_Xor
SendMessage_(GadgetID(#Editor_Opperation), #EM_REPLACESEL, 0, "Xor")
Case #Boutton_And
SendMessage_(GadgetID(#Editor_Opperation), #EM_REPLACESEL, 0, "And")
Case #Boutton_Not
SendMessage_(GadgetID(#Editor_Opperation), #EM_REPLACESEL, 0, "Not")
Case #Boutton_Parenthese_Ouvrente
SendMessage_(GadgetID(#Editor_Opperation), #EM_REPLACESEL, 0, "(")
Case #Boutton_Parenthese_Fermente
SendMessage_(GadgetID(#Editor_Opperation), #EM_REPLACESEL, 0, ")")
Case #Boutton_Plus
SendMessage_(GadgetID(#Editor_Opperation), #EM_REPLACESEL, 0, "+")
Case #Boutton_Moins
SendMessage_(GadgetID(#Editor_Opperation), #EM_REPLACESEL, 0, "-")
Case #Boutton_Multiplie
SendMessage_(GadgetID(#Editor_Opperation), #EM_REPLACESEL, 0, "*")
Case #Boutton_Divise
SendMessage_(GadgetID(#Editor_Opperation), #EM_REPLACESEL, 0, "/")
Case #Boutton_Inferieur
SendMessage_(GadgetID(#Editor_Opperation), #EM_REPLACESEL, 0, "<")
Case #Boutton_Superieur
SendMessage_(GadgetID(#Editor_Opperation), #EM_REPLACESEL, 0, ">")
Case #Boutton_Superieur_Ou_Egale
SendMessage_(GadgetID(#Editor_Opperation), #EM_REPLACESEL, 0, ">=")
Case #Boutton_Inferieur_Ou_Egale
SendMessage_(GadgetID(#Editor_Opperation), #EM_REPLACESEL, 0, "<=")
Case #Boutton_Different
SendMessage_(GadgetID(#Editor_Opperation), #EM_REPLACESEL, 0, "<>")
Case #Boutton_Egale
SendMessage_(GadgetID(#Editor_Opperation), #EM_REPLACESEL, 0, "=")
Case #Boutton_Decalage_Droite
SendMessage_(GadgetID(#Editor_Opperation), #EM_REPLACESEL, 0, ">>")
Case #Boutton_Decalage_Gauche
SendMessage_(GadgetID(#Editor_Opperation), #EM_REPLACESEL, 0, "<<")
Case #Boutton_Modulo_Binaire
SendMessage_(GadgetID(#Editor_Opperation), #EM_REPLACESEL, 0, "%")
Case #Boutton_Exponentiel
SendMessage_(GadgetID(#Editor_Opperation), #EM_REPLACESEL, 0, "^")
Case #Boutton_Hexadecimal
SendMessage_(GadgetID(#Editor_Opperation), #EM_REPLACESEL, 0, "$")
Case #Editor_Opperation
Texte$ = ""
ClearGadgetItems(#Editor_Erreur)
For i = 0 To CountGadgetItems(#Editor_Opperation)
Texte$ + GetGadgetItemText(#Editor_Opperation,i)
Next
ResultatExpressionEvaluer$ = Evaluate(Texte$)
SetGadgetText(#Editor_Resultat_Opperation, ResultatExpressionEvaluer$)
Case #Editor_Erreur
Case #Text_Info_Expression
Case #Text_Info_Erreur
Case #ButtonImage_Valider
Debug ResultatExpressionEvaluer$
Case #ButtonImage_Annuler
Event = #PB_Event_CloseWindow
CloseWindow(Numero_InterfaceEditeurExpression)
EndSelect
Case #PB_Event_Menu
Select EventMenu
Case 0
EndSelect
Case #PB_Event_CloseWindow
EndSelect
Until Event = #PB_Event_CloseWindow ; Fin des évènements de boucle
EndIf
EndProcedure
SetEvaluateErrorHandler(@myErrorHandler())
InterfaceEditeurExpression()