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

Algorithme de vérification de structure (if/else) ?

gorz94
gorz94
Niveau 6
20 janvier 2017 à 13:51:41

Salut.

J'ai un petit problème depuis quelques jours, je me suis rendu compte que mon algo était complètement foireux. :hap:

J'ai besoin d'un algorithme qui valide la syntaxe d'une structure en if, else if, else.
En gros, mon algorithme doit valider:
if bool {
---- ...
}
else {
---- ...
}

Mais ne doit pas valider
if bool {
--- -else {
---- ...
---- }
}

Je pense que c'est assez simple à comprendre hein. :noel:
Sachant que j'utilise des if, des elseif et des else, j'ai commencé par utiliser une pile, dont le nombre d'item correspondrait à la tabulation actuelle, mais ce n'est pas assez complet Je n'arrive pas à coder un algo qui marcherait pour tous les cas possibles et imaginables. :(

Vu que c'est un algorithme, le langage n'a pas trop d'importance, mais je fais ça en C#, et je peux vérifier la tabulation de la ligne de code étudiée ...

Si quelqu'un a déjà fait quelque chose du genre et aurait une piste ... :hap:

Pseudo supprimé
Pseudo supprimé 20 janvier 2017 à 14:14:57

Puis je voir ton code :)

Bunyan
Bunyan
Niveau 17
20 janvier 2017 à 14:47:32

Tu as bien pris en compte les accolades, dans ta pile ?
Si tu fais des checks "if -> { -> } -> else", tu ne pourras pas valider la structure "if -> { -> else -> }"

gorz94
gorz94
Niveau 6
20 janvier 2017 à 16:39:36

Merci d'avoir pris le temps de lire. :hap:

@Bunyan: J'ai pris en compte les accolades, mais j'ai pas trop compris ton exemple. :noel:

@demonyunther: Je l'ai un peu modifié, et il a l'air de mieux marcher ...

http://img11.hostingpics.ics.net/pics/326892Capture.png
http://img11.hostingpics.cs.net/pics/438260Capture2.png

dark_drow
dark_drow
Niveau 15
20 janvier 2017 à 17:44:01

C'est dommage de se contenter de jouer avec les lignes et les espaces/tabulations, ça élimine les codes en une seule ligne ou les codes mal indentés :(
Tu pourrais aussi déclarer des mots clefs "if" "{" "}" puis parcourir ton fichier caractère par caractère en recherchant "if" puis "{" puis "}"

Message édité le 20 janvier 2017 à 17:44:58 par dark_drow
Bunyan
Bunyan
Niveau 17
20 janvier 2017 à 17:55:26

De ce que je vois, tu prends en compte :

  • if
  • else
  • elseif
  • }

En ne prenant pas l'accolade ouvrante, tu pourras toujours valider des cas "if -> else -> }", ce qui est problématique.

gorz94
gorz94
Niveau 6
20 janvier 2017 à 19:03:15

@dark_drow, whiteapplex: En fait c'est pas un compilateur que je code, c'est juste un jeu, qui utilise une syntaxe très très très très simple (qui n'existe pas d'ailleurs), et dont la façon de coder limite les possibilités. En fait, dans ce jeu, on ne code pas en tapant tout à la main, il y a une méthode très simplifiée qui limite les possibilités. Du coup le code que mon algo doit vérifier est syntaxiquement correct. J'ai seulement besoin d'un algo simple pour vérifier la structure des if, else et tout ça.

@Buyan: J'ai toujours pas compris ton exemple ... :hap:

lokilok
lokilok
Niveau 16
20 janvier 2017 à 19:47:14

@Buyan: J'ai toujours pas compris ton exemple ... :hap:

Qu'est ce que tu comprends pas ? Je vois pas trop comment tu peux simplifier ce qu'il dit.

Bunyan
Bunyan
Niveau 17
20 janvier 2017 à 22:13:49

Je ne peux pas vraiment simplifier, c'est vrai, je ne peux qu'expliciter.

La structure d'un "if" est la suivante (je vais utiliser des regex par commodité) :

  • if
  • (.+)
  • {
  • .+
  • }
  • optionnel : else | elseif

La structure d'un elseif est la suivante :

  • elseif
  • {
  • .+
  • }
  • optionnel : elseif | else

La structure d'un else est la suivante :

  • else
  • {
  • .+
  • }

Je présente ça comme je peux sur JV.com, le tout est à mettre en une grammaire (ou un automate), et je ne prends pas en compte les possibilités de one-liner que tu ne peux pas reconnaître et qui te demandera de revoir ton code en profondeur pour passer, comme un compilateur, par des phases de constructions/reconnaissances/vérifications (lexeur, lexème...). Bref, un p'tit cours de compilation.

Si tu veux pouvoir découper correctement ton if ainsi que ses suites possibles, il faut obligatoirement que tu prennes en compte l'accolade ouvrante, ce que tu ne fais pas du tout actuellement.

J'espère que c'est plus clair, car je pourrai difficilement expliciter plus.

Bunyan
Bunyan
Niveau 17
20 janvier 2017 à 22:26:18

Et merde, me suis foiré sur le elseif et je ne peux plus éditer...

Bon, le elseif est ainsi :

  • elseif
  • (.+)
  • {
  • .+
  • }
  • optionnel : elseif | else
gorz94
gorz94
Niveau 6
20 janvier 2017 à 22:47:23

Ouais je vois où tu veux en venir, sauf que je vérifie pas la syntaxe mot à mot, mais ligne par ligne, du coup ça change tout.

En tout cas j'ai réussi à valider mon algo en faisant des tonnes d'essai, merci. :hap:

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