Анализатор CUP возвращает синтаксическую ошибку для правильного ввода

Я пытаюсь написать очень простой парсер. Я использую JFlex с Java CUP. Вот мой код:

LEX файл:

import java_cup.runtime.*;


%%

%class Lexer
%line
%column
%cup


%{   
    /*********************************************************************************/
    /* Create a new java_cup.runtime.Symbol with information about the current token */
    /*********************************************************************************/
    private Symbol symbol(int type)               {return new Symbol(type, yyline, yycolumn);}
    private Symbol symbol(int type, Object value) {return new Symbol(type, yyline, yycolumn, value);}

%}



%%


<YYINITIAL> {
<<EOF>>             { return symbol(sym.EOF); }
"|"                 { return symbol(sym.PIPE); } 

}

CUP файл:

import java_cup.runtime.*;


terminal PIPE;

non terminal myrule;   

myrule  ::=  PIPE {: RESULT = 42; :};

Main.java

import java.io.FileReader;

public class Main {

    public static void main(String[] args) throws Exception {
        CUP_FILECup parser = new CUP_FILECup(new Lexer(new FileReader(args[0])));
        parser.debug_parse();
    }

}

Как вы можете видеть, я попытался сделать это как можно проще, я получаю следующую ошибку для входного файла, содержащего только один символ: "|".

Синтаксическая ошибка в символе 0 ввода

Но ясно мы определили правильный вывод для "|".

Почему это происходит?

РЕДАКТИРОВАТЬ:
- "начни с мируле"; не помогает

1 ответ

Не могли бы вы попробовать FileInputStream вместо FileReader?

(Если это работает, вы можете взглянуть на /questions/2320570/fileinputstream-protiv-filereader/2320596#2320596)

И вы также можете попробовать только лексер в первую очередь.

Другие вопросы по тегам