Я пытаюсь написать очень простой парсер. Я использую JFlex с Java CUP. Вот мой код: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 ввода
Но ясно, что мы определили правильный вывод для "|".
Почему это происходит?
EDIT:
- "начать с myrule;" не помогает
Может ли быть спецификация во входном файле? https://msdn.microsoft.com/en-us/library/windows/desktop/dd374101(v=vs.85).aspx –
Насколько я могу судить, нет. – Plex
Я использовал 'file -' и получил' ASCII-текст' (я использую Ubuntu) – Plex