2010-11-05 7 views
2

J'ai un fichier avec un format spécifique que je voudrais analyser. Dans ce fichier, j'ai un nombre sur une ligne qui spécifie le nombre de lignes à suivre.analyse un nombre spécifique de lignes dans javacc

extrait par exemple à partir du fichier:

3 // number of lines to follow = 3 
1 3 // 1st line 
3 5 // 2nd line 
2 7 // 3rd line 

Je veux lire le numéro (3 dans cet exemple), puis en lecture seule les 3 lignes suivantes. S'il y a moins de lignes, je veux générer une erreur. Comment puis-je faire cela dans javacc?

Merci

Répondre

1

Voici une manière:

/* file: Lines.jj */ 
options { 
    STATIC = false ; 
} 

PARSER_BEGIN(Lines) 

class Lines { 
    public static void main(String[] args) throws ParseException, TokenMgrError { 
     Lines parser = new Lines(System.in); 
     System.out.println("diff="+parser.parse());   
    } 
} 

PARSER_END(Lines) 

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

int parse() : 
{ 
    int linesToRead = 0; 
    int linesRead = 0; 
    Token n = null; 
} 
{ 
    n = <NUMBER> <NL> {linesToRead = Integer.parseInt(n.image);} 
    (
     (<NUMBER>)+ <NL> {linesRead++;} 
    )* 
    <EOF> 
    {return linesToRead - linesRead;} 
} 

La méthode Lines.parse() : int renvoie la différence entre le nombre de lignes qu'il est censé lire, et le nombre réel de lignes qui sont lues.

Générer l'analyseur comme ceci:

javacc Lines.jj 

compilez toutes les classes:

java *.java 

et le nourrir vos données de test (test.txt):

3 
1 3 
3 5 
2 7 

comme ceci:

java Lines < test.txt 

qui produit la sortie:

diff=0 
Questions connexes