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開始;」沒有幫助
輸入文件中是否有BOM? https://msdn.microsoft.com/en-us/library/windows/desktop/dd374101(v=vs.85).aspx –
據我所知,沒有。 – Plex
我用'file -'獲得了'ASCII文本'(我使用的是Ubuntu) – Plex