IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage Java Discussion :

Analyse lexicale avec un StreamTokenizer


Sujet :

Langage Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2011
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Octobre 2011
    Messages : 22
    Par défaut Analyse lexicale avec un StreamTokenizer
    Bonjour

    je developpe actuellement une calculatrice qui utilise la notation polonaise inverse mais, là n'est pas le problème^^
    Pour faire les calculs, je dois ouvrir un fichier qui contient les données au bon format NPI.
    Lorsque le StreamTokenizer (ST par la suite) que j'utilise sur un BufferReader(FileReader) analyse les tokens j'ai quelques petits effets de bords:
    - Si le fichier commence par un chiffre ou un nombre (sans espace avant), le ST reconnait ce chiffre
    comme une chaine (celà ne me le fait pas lorsque j'insère un espace avant le nombre au début du fichier)
    - Lorsque je compare les caractères de signe du fichier je n'arrive pas à les matcher, j'ai essayé:
    * de créer un tableau de char contenant l'ensembles de signes autorisés ca ne fonctionnait pas dans tous les cas
    * de comparer la valeur retournée par sval.charAt(0) aux char '+' '-' '*' '/'
    * de comparer la valeur retournée par Character.getNumericalValue(ST.sval.charAt(0)) aux Character.getNumericalValue() de'+' '-' '*' '/'
    * de comparer la valeur contenue dans ST.sval avec par exemple la chaine "+" "-" "*" "/"
    Tout ça sans grand succès jusqu'à présent...
    En sachant qu'au départ j'étais parti sur un FileReader qui gère uniquement l'encodage par défaut de l'os hôte,
    j'ai l'impression d'echaîner galères sur galères avec cet exercice pourtant pas compliqué
    Autre petite question:
    J'utilise une switch sur ST.nextTokken() pour ensuite determiner par case StreamTokenizer.TT_WORD ou case StreamTokenizer.TT_NUMBER
    si la valeur contenue dans ttype est celle d'un nombre ou d'une chaine
    Est-ce la bonne façon de faire?
    A priori celà fonctionne jusqu'à présent.
    Je crie à l'aide

    Merci par avance pour vos réponses

    $@t@n-lui-]v[ ]v[

  2. #2
    Membre averti
    Homme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2011
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Octobre 2011
    Messages : 22
    Par défaut Petite avancée
    Bonsoir

    J'ai finalement pus gérer les opérateurs en les traitant comme des mots via la méthode wordChars puis en testant la valeur de sval via la méthode equals.
    Je suis ensuite tombé sur un autre problème, le cas du moins (-)...
    Alors que les autres opérateurs étaient reconnu, le moins quand à lui avait un comportement bizarre, le ttype a pris la valeur du moins de la table ascii soit 45 ...

    Bon en rajoutant un case 45 ce se laisse traiter mais je trouve ça dégueulasse
    Pour l'instant tout marche, excepté le fait qu'il faille que j'insère un espace en début de ligne pour que les caractères numériques soit reconnus
    je ne passe donc pas le topic en résolu et j'aimerais bien avoir quelques avis sur la chose!

    Bonne nuit

  3. #3
    Membre averti
    Homme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2011
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Octobre 2011
    Messages : 22
    Par défaut
    Bon j'ai fini par trouver la solution

    Le problème des chiffres reconnus comme des chaines en début de fichiers étaient lié à l'encodage utf8 de mes fichiers, sans avoir de détails les basculer dans l'encodage en ANSI sur notepad++ à résolu le problème.

    Il reste des cas dans lesquels ma calculette échoue dans mes tests JUnit mais comme la plateforme de tests de mon école ne me balance plus aucunes erreurs je laisse tomber ^^

  4. #4
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 582
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    Sûrement le BOM, reconnu comme un (ou des) caractère "normal," en tout cas ni chiffre ni blanc.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. ANTLR (analyse lexicale)
    Par amelia dans le forum EDI et Outils pour Java
    Réponses: 1
    Dernier message: 12/04/2008, 23h05
  2. Réponses: 1
    Dernier message: 21/05/2007, 10h44
  3. Réponses: 2
    Dernier message: 11/04/2007, 18h25
  4. analyse lexicale et syntaxique avec java
    Par hasnaouiwafa dans le forum API standards et tierces
    Réponses: 4
    Dernier message: 08/03/2007, 14h16
  5. Requête analyse croisée avec MySQL
    Par drakenzara dans le forum Requêtes
    Réponses: 4
    Dernier message: 12/09/2006, 10h14

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo