CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

(script) priorité et expressions

maskware
maskware
Niveau 8
21 juillet 2003 à 14:02:24

bonjour ! j´ai commencé a creer un langage scripté pour mon moteur et je suis face a un probleme, les expressions ! En effet, j´ai tous les tokens ( merci lex =) et j´ai commencé comme ca ( en gros)

int Parse(_Function* Func) {
if(Func->getnexttoken() == STATE_IF) {
verify_syntax_and_brackets(Func);
if(!ComputeExp())
GOTO_EndBracket();
Parse(Func);
}

voila, le probleme est dans la fonction ComputeExp, j´y arrive avec ce type de valeur
ex1: 1 * 2
ex2: 1 * 2 + 3 ( meme si y´a pas encore les priorités :p)
Mais ca, je vois pas du tout
ex1: ( (1 + 3 * 4) + ( 5 * 6)) * 7
ex2: ( (1==1)&&(2==2))

Si quelqu´un saurait comment se dresse le coeur de l´algorithme ou aurait des liens vers des sites de theorie de langage, je suis preneur

ps: J´ai aussi une question un peu plus globale, que vaut cette type d´approche ( immediate execution), face a une approche avec machine virtuelle ( en termes de vitesse). Paske dans ce cas je pourrait utiliser yacc =)

Evanescence
Evanescence
Niveau 5
21 juillet 2003 à 16:38:26

Notation postfixée
C´est à mon avis l´une des solutions les plus simples.
ton ( (1+3*4)+(5*6))*7 deviendrait ( (((3 4 *) 1 +) ( 5 6 *) +) 7 *)
Sachant que les parenthèses sont tout à fait inutiles dans ce cas.

JeanYvesYves
JeanYvesYves
Niveau 10
22 juillet 2003 à 11:02:57

ça me rappelle des cours compilation que j´ai eu en maitrise avec LEX et de YACC
ce sont des petits langages qui s´associent au C pour la reconnaissance de syntaxe ( c´est ce que tu fais)
essaie de te documenter sur ces langages :)
( LEX et YACC)

ça parle tout a fait de ce que tu fais :)
entre autres, YACC génere un code C a partir d´un code assez bizarre ou tu mets juste les regles de compilation...

good luck :)

JeanYvesYves
JeanYvesYves
Niveau 10
22 juillet 2003 à 11:18:05

sinon, pour la reconnaissance d´opération, je te conseille d´y ranger dans des arbres
pour cela tu fais une fonction qui analyse une chaine, et range les nombres dans des arbres binaires : une fois cela fait, tu peux facilement évaluer des expressions :)

mais il te faut une struct ou une classe d´arbre binaire, donc bien gérer des pointeurs, et une fonction d´analyse qui est longue ( j´en avais fait une dans le temps, pour un TP de C)

Sous forums
  • Aide à l'achat Mac
  • Steam Deck
  • Création de sites web
  • Création de Jeux
  • Linux
  • Programmation
  • Internet
  • Macintosh
  • Hardware
La vidéo du moment