2016-11-29 36 views
2

我正在嘗試編寫一個非常簡單的解析器。我在Java CUP中使用JFlex。這裏是我的代碼: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 「|」。

爲什麼會發生?

編輯:
- 「從myrule開始;」沒有幫助

+0

輸入文件中是否有BOM? https://msdn.microsoft.com/en-us/library/windows/desktop/dd374101(v=vs.85).aspx –

+0

據我所知,沒有。 – Plex

+0

我用'file -'獲得了'ASCII文本'(我使用的是Ubuntu) – Plex

回答