2016-11-29 14 views
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;" 도움이되지 않습니다

+0

입력 파일에 BOM이있을 수 있습니까? https://msdn.microsoft.com/en-us/library/windows/desktop/dd374101(v=vs.85).aspx –

+0

내가 말할 수있는 한, 안된다. – Plex

+0

'file -'을 사용하고'ASCII text'를 받았습니다 (저는 우분투를 사용하고 있습니다) – Plex

답변

0

FileReader 대신 FileInputStream을 사용해 주시겠습니까?

(작동 경우 https://stackoverflow.com/a/5155255/1415645에서 살펴 봐야 할 수 있습니다) 그리고 당신은 또한 처음에만 렉서를 시도 할 수 있습니다.