क्या मैं पहली बार jflex का उपयोग कर रहा हूं, मैं अपनी मूल भाषा (पुर्तगाली) में इंटरनेट पर मिले एक ट्यूटोरियल का अनुसरण कर रहा हूं, मैंने सब कुछ इंस्टॉल और असेंबल किया है।

लेकिन जब मैं "लेक्सर" वर्ग उत्पन्न करने का प्रयास करता हूं, तो यह मेरी ".flex" फ़ाइल में एक वाक्यविन्यास त्रुटि दिखाता है, मुझे नहीं पता कि क्या हो रहा है क्योंकि यह सब ठीक लगता है।

.फ्लेक्स फ़ाइल

//NOME_VARIAVEL,INT,DEC,COMENTARIO,BRANCO,PALAVRA_CHAVE,ERRO
package Compilador;
import static Compilador.Token.*;
%%
%{
    private void imprimir (String token,String lexema){
            System.out.println(lexema +" ===>> " + token);
    }
%}
%class Lexer
%type Token
nomeVariavel = [_a-zA-Z][_zA-z0-9]*
inteiro = [0-9]+
decimal = [0-9]+["."]+[0-9]+
blocoComentario = "/*" ~"*/"
branco = [\t|\n|\r]+
linhaComentario = [branco]*"//" .*
palavrasChave = "if" | "class" | "int" | "while" | "for" | "do" | "float"
%%

{palavrasChave}     { imprimir("PALAVRA_CHAVE : ", yytext()); return PALAVRA_CHAVE;  } 
{nomeVariavel}      { imprimir("VARIAVEL : ", yytext()); return NOME_VARIAVEL;  }
{inteiro}           { imprimir("NUMERO INTEIRO : ", yytext()); return INT;  }
{decimal}           { imprimir("NUMERO DECIMAL : ", yytext()); return DEC;  }
{blocoComentario}   { imprimir("COMENTARIO : ", yytext()); return COMENTARIO;    }
{linhaComentario}   { imprimir("COMENTARIO : ", yytext()); return COMENTARIO; }
{branco}            ( return BRANCO; } 
.   {imprimir("<<< CARACTER INVALIDO!!! >>>   ",yytext()); return ERROR;}
<<EOF>>     {return null;}

Token.java फ़ाइल

package compilador;
public enum Token{
   NOME_VARIAVEL, INT, DEC, COMENTARIO, BRANCO, PALAVRA_CHAVE, ERROR;

}

जनरेटर.फ्लेक्स फ़ाइल

package compilador;

import java.io.*;

public class GeraLexer {
    public static void main(String[] args) throws IOException  {
     String arquivo ="<path redacted for reasons, but it is finding the file>";
     geraLexer(arquivo);
    }

    public static void geraLexer(String arq){
        File file = new File(arq);
        jflex.Main.generate(file);
    }
}

उत्पन्न करते समय त्रुटि प्रस्तुत की गई

Reading "<path redacted for reasons, but it is finding the file>"

Error in file "<path redacted for reasons, but it is finding the file>" (line 28): 
Syntax error.
.   {imprimir("<<< CARACTER INVALIDO!!! >>>   ",yytext()); return ERROR;}
 ^
Exception in thread "main" jflex.GeneratorException: Generation aborted
    at jflex.Main.generate(Main.java:139)
    at compilador.GeraLexer.geraLexer(GeraLexer.java:13)
    at compilador.GeraLexer.main(GeraLexer.java:8)
Java Result: 1
CONSTRUÍDO COM SUCESSO (tempo total: 0 segundos)

मदद करने के इच्छुक किसी भी व्यक्ति की सराहना करें, हां, मैंने पहले गुगल किया।

0
Seji evan 16 अप्रैल 2020, 00:41

1 उत्तर

सबसे बढ़िया उत्तर

पिछली पंक्ति में, आपके पास है

{branco}            ( return BRANCO; } 

( एक { होना चाहिए।

जैसा कि आप जल्द ही अपना खुद का पार्सर लिखने की खोज करेंगे, सही जगह पर त्रुटि को नोटिस करना हमेशा आसान नहीं होता है। त्रुटि का अक्सर एक टोकन बाद में पता चलता है जितना आप चाहते हैं, और कभी-कभी वह टोकन अगली पंक्ति पर होता है।

1
rici 15 अप्रैल 2020, 23:50