2
매우 간단한 파서를 작성하려고합니다. Java CUP에서 JFlex를 사용하고 있습니다. 여기에 내 코드입니다 :CUP 파서가 올바른 입력에 대한 구문 오류를 반환합니다.
는LEX 파일 :
는 CUP 파일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); }
}
:
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
구문 오류 "|".
왜 그런가?
편집 :
- "start with myrule;" 도움이되지 않습니다
입력 파일에 BOM이있을 수 있습니까? https://msdn.microsoft.com/en-us/library/windows/desktop/dd374101(v=vs.85).aspx –
내가 말할 수있는 한, 안된다. – Plex
'file -'을 사용하고'ASCII text'를 받았습니다 (저는 우분투를 사용하고 있습니다) – Plex