2017-09-22 20 views
1

J'ai créé adder.jj fichier suivant this tutoriel (jusqu'à la page 13, juste avant de commencer avec l'exemple de la calculatrice), pour créer un additionneur, qui fonctionne très bien pour obtenir le résultat des nombres et des signes positifs d'une manière syntaxiquement correcte. +3 +7 "renvoie 14, alors que" 4 ++ 3 "donne une erreur), ces chiffres et les signes + proviennent d'un fichier texte (ceci est expliqué dans un peu). Le code que j'utilise pour générer les classes nécessaires pour faire ce qui est expliqué précédemment.Comment puis-je changer javaCC adder.jj pour recevoir une chaîne au lieu d'un flux à partir de l'invite de commande?

options 
{ 
    STATIC = false ; 
} 
PARSER_BEGIN(Adder) 
    class Adder 
    { 
     public static void main (String[] args) 
     throws ParseException, TokenMgrError, NumberFormatException 
     { 
      Adder parser = new Adder (System.in) ; 
      int val = parser.Start() ; 
      System.out.println(val) ; 
     } 
    } 
PARSER_END(Adder) 

SKIP : { " " } 
SKIP : { "\n" | "\r" | "\r\n" } 
TOKEN : { < PLUS :"+"> } 
TOKEN : { < NUMBER : (["0"-"9"])+ > } 

int Start() throws NumberFormatException : 
{ 
    int i ; 
    int value ; 
} 
{ 
    value = Primary() 
    (
     <PLUS> 
     i = Primary() 
     { value += i ; } 
    )* 
    { return value ; } 
} 

int Primary() throws NumberFormatException : 
{ 
    Token t ; 
} 
{ 
    t=<NUMBER> 
    { return Integer.parseInt(t.image) ; } 
} 

Les classes sont générées avec

javacc adder.jj 

Puis je compile les classes générées avec

javac *.java 

Et enfin

java Adder < ex1.txt 

donne la sortie à droite si le contenu de ex1.txt a le format que j'ai expliqué auparavant.

Comment puis-je modifier ce code pour recevoir une chaîne afin que je puisse réellement l'utiliser dans mon projet au lieu du flux de la ligne de commande?

Répondre

2

Essayez de remplacer

Adder parser = new Adder (System.in) ; 

avec

Reader reader = new StringReader(someString) ; 
Adder parser = new Adder(reader) ; 
+0

J'ai essayé, il est dit ce qui suit 'Adder.java:7: erreur: ne peut pas trouver le symbole lecteur Reader = new StringReader (» 4 + 2 + 88 "); ^ symbole: class Lecteur emplacement: class Adder Adder.java:7: erreur: ne peut pas trouver le symbole Reader reader = new StringReader ("4 + 2 + 88"); symbole ^ : classe StringReader Lieu: classe Adder 2 errors' éclipse également dit ne reconnaît pas StringReader même après que j'importer java.io.Reader – newbie

+0

Désolé, je devais importer 'importer java.io.Reader; import java.io.StringReader; ' dans la classe générée par Adder.java Et ça marche! merci beaucoup, mec ... maintenant je dois juste le changer pour travailler avec une méthode statique différente de la principale! – newbie