728 250 상단


JAVACC 사용법과 예제 1 [계산기 예] 자바 계열

1. https://javacc.dev.java.net/[클릭]에 접속한다.


javacc 프로젝트 홈페이지javacc 프로젝트 홈페이지


2. javacc-5.0.zip을 다운받는다.


javacc 5.0 다운javacc 5.0 다운



3. C 디렉터리 아래에 압축을 푼다.


JavaCC 압축 해제 후JavaCC 압축 해제 후


4. path에 C:\JavaCC\bin을 추가한다.


환경 변수에 사용자 변수 편집환경 변수에 사용자 변수 편집


5. 간단한 덧셈에 대한 문법을 체크한다. Adder.jj라는 이름으로 다음 문서를 저장한다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
options
{
    LOOKAHEAD=2;
}
 
PARSER_BEGIN(Adder)
 
public class Adder
{
    public static void main(String args[]) throws ParseException {
        Adder parser = new Adder(System.in);
 
        while(true) {
            parser.parseOneLine();
        }
    }
}
 
PARSER_END(Adder)
 
SKIP:
{
    " " | "\r" | "\t"
}
 
TOKEN:
{
    <NUMBER: (<DIGIT>)+> | <DIGIT:["0"-"9"]> | <EOL: "\n">
}
 
void parseOneLine():
{
 
}
{
   expr() {
        System.out.println("well-defined");
    } <EOL> | <EOL> | <EOF>
    {
        System.out.println("well-defined");System.exit(-1);
    }
}
 
void expr():
{
    
}
{
  <NUMBER> "+" <NUMBER>
}
cs


6. javacc Adder.jj를 수행한다.

7. javac Adder.java를 수행한다.



8. java Adder를 수행하여 1+2, 3+4, 3-4를 수행하여 결과를 확인한다.

9. 간단한 덧셈을 수행하도록 Adder.jj에 코드를 다음과 같이 추가한다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
options
{
    LOOKAHEAD=2;
}
 
PARSER_BEGIN(Adder)
 
public class Adder
{
    public static void main(String args[]) throws ParseException{
        Adder parser = new Adder(System.in);
 
        while(true){
            parser.parseOneLine();
        }
    }
}
 
PARSER_END(Adder)
 
SKIP:
{
    " " | "\r" | "\t"
}
 
TOKEN:
{
    <NUMBER: (<DIGIT>)+> | <DIGIT:["0"-"9"]> | <EOL: "\n">
}
 
void parseOneLine():
{
    double a;
}
{
   a = expr() {
        System.out.println("well-defined");
        System.out.println(a);
    } <EOL> | <EOL> | <EOF> {
        System.out.println("well-defined");
        System.exit(-1);
    }
}
 
double expr():
{
    Token t; Token t1;
}
{
  t = <NUMBER> "+" t1 = <NUMBER> {
        return Double.parseDouble(t.toString()) + Double.parseDouble(t1.toString());
    }
}
cs


10. javacc Adder.jj를 수행하고 javac Adder.java를 수행한 후 java Adder를 수행하여 숫자 덧셈이 잘 처리되는지 확인한다.


11. 뺄셈을 추가한다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
options
{
    LOOKAHEAD=2;
}
 
PARSER_BEGIN(Adder)
 
public class Adder
{
    public static void main(String args[]) throws ParseException{
        Adder parser = new Adder(System.in);
 
        while(true){
            parser.parseOneLine();
        }
    }
}
 
PARSER_END(Adder)
 
SKIP:
{
    " " | "\r" | "\t"
}
 
TOKEN:
{
    <NUMBER: (<DIGIT>)+> | <DIGIT:["0"-"9"]> | <EOL: "\n">
}
 
void parseOneLine():
{
    double a;
}
{
   a = expr() { 
        System.out.println("well-defined");
        System.out.println(a);
    } <EOL> | <EOL> | <EOF> {
        System.out.println("well-defined");
        System.exit(-1);
    }
}
 
double expr():
{
    Token t; Token t1;
}
{
  t = <NUMBER> "+" t1 = <NUMBER> {
    return Double.parseDouble(t.toString()) + Double.parseDouble(t1.toString());} 
 
  | t = <NUMBER> "-" t1 = <NUMBER> {
    return Double.parseDouble(t.toString()) - Double.parseDouble(t1.toString());}
}
cs


12. 곱셈을 추가한다. 곱셈은 덧셈, 뺄셈에 비해 우선 순위가 높다. 즉 먼저 처리되어야 한다. 곱셈에 대한 오퍼레이션을 별도로 만들어야 한다. 식을 곱셈과 나머지 식으로 분해한다고 생각하고 오퍼레이션을 만든다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
options    
{
    LOOKAHEAD=2;
}
 
PARSER_BEGIN(Adder)
 
public class Adder
{
    public static void main(String args[]) throws ParseException{
        Adder parser = new Adder(System.in);
 
        while(true) {
            parser.parseOneLine();
        }
    }
}
 
PARSER_END(Adder)
 
SKIP:
{
    " " | "\r" | "\t"
}
 
TOKEN:
{
    <NUMBER: (<DIGIT>)+> | <DIGIT:["0"-"9"]> | <EOL: "\n">
}
 
void parseOneLine():
{
    double a;
}
{
   a = expr() {
    System.out.println("well-defined");
    System.out.println(a); } <EOL> | <EOL> | <EOF> {
    System.out.println("well-defined");
    System.exit(-1);
    }
}
 
double expr():
{
    double a; double b;
}
{
  a = term()("+" b = expr(){a += b;} | "-" b = expr(){a-= b;} )*{return a;}
}
 
double term():
{
    double a;
    double b;
    Token t;
}
{
    t = <NUMBER> { a =  Double.parseDouble(t.toString()); }
    ("*" b = term() {a *=b;} | "/" b = term() { a /= b ; } )* {return a;}
}
cs



JAVACC 사용법과 예제 2 [계산기 예]로 이어집니다.



출처: http://codingcoding.tistory.com/17



핑백

덧글

댓글 입력 영역


250 250 스애드

반응형 사이드