2017-09-22 10 views
1

this 자습서 (계산기 예제로 시작하기 직전까지 13 번째 페이지까지) 파일을 작성하여 숫자 결과를 얻고 구문 적으로 올바른 방법으로 더하기 기호 (예 : "4 +3 +7 "은 14를 반환하고,"4 ++ 3 "은 오류를 나타냄), 숫자와 + 기호는 텍스트 파일에서 가져옵니다 (이것은 약간 설명되어 있습니다). 이전에 설명한 작업을 수행하는 데 필요한 클래스를 생성하는 데 사용하는 코드.javaCC adder.jj를 어떻게 변경하여 명령 프롬프트에서 스트림 대신 문자열을받을 수 있습니까?

options 
{ 
    STATIC = false ; 
} 
PARSER_BEGIN(Adder) 
    class Adder 
    { 
     public static void main (String[] args) 
     throws ParseException, TokenMgrError, NumberFormatException 
     { 
      Adder parser = new Adder (System.in) ; 
      int val = parser.Start() ; 
      System.out.println(val) ; 
     } 
    } 
PARSER_END(Adder) 

SKIP : { " " } 
SKIP : { "\n" | "\r" | "\r\n" } 
TOKEN : { < PLUS :"+"> } 
TOKEN : { < NUMBER : (["0"-"9"])+ > } 

int Start() throws NumberFormatException : 
{ 
    int i ; 
    int value ; 
} 
{ 
    value = Primary() 
    (
     <PLUS> 
     i = Primary() 
     { value += i ; } 
    )* 
    { return value ; } 
} 

int Primary() throws NumberFormatException : 
{ 
    Token t ; 
} 
{ 
    t=<NUMBER> 
    { return Integer.parseInt(t.image) ; } 
} 

클래스 내가

javac *.java 

그리고 마지막으로

java Adder < ex1.txt 

으로 생성 된 클래스를 컴파일 그리고

javacc adder.jj 

으로 생성되는이의 내용 경우 오른쪽 출력을 제공합니다 ex1.txt은 앞서 설명한 형식을 가지고 있습니다.

문자열을받는 대신 실제로 명령 줄의 스트림 대신 프로젝트에서 사용할 수 있도록이 코드를 변경할 수 있습니까? 오류 :

답변

2

Reader reader = new StringReader(someString) ; 
Adder parser = new Adder(reader) ; 
나는 그것이 다음 `Adder.java:7을 말한다 것을 시도
+0

Adder parser = new Adder (System.in) ; 

를 교체하십시오 "(기호 리더 리더 = 새로운 StringReader를 찾을 수 없습니다 4 + 2 + 88 "); ^ 기호 : 클래스 Reader 위치 : 클래스 Adder Adder.java:7 : 오류 : 기호를 찾을 수 없습니다. 독자 reader = new StringReader ("4 + 2 + 88"); ^ 기호 : 클래스 StringReader를 위치 : 클래스 가산기 2 errors' 또한 일식 내가 java.io.Reader를 가져 후에도 StringReader를 인식하지 않습니다 말한다 – newbie

+0

내가 '수입하는 java.io.Reader를 가져올 수 있었다 죄송합니다; import java.io.StringReader; 'Adder.java 생성 클래스의 그리고 작동합니다! 고마워, 남자 ... 지금은 그냥 메인과 다른 정적 방법으로 작동하도록 변경해야합니다! – newbie