ANTLR: 연습 예제
ANTLR 웹사이트에서는 예제 문법을 제공하지만 문법을 Java 코드로 변환하는 과정을 이해하는 것은 피하는. 보다 명확한 이해를 위해 간단한 예를 들어 보겠습니다.
문법 정의
네 가지 기본 산술 연산자( , -, *, /) 및 괄호. Exp.g.
Exp.g
grammar Exp; eval returns [double value] : exp=additionExp {$value = $exp.value;} ; additionExp returns [double value] : m1=multiplyExp {$value = $m1.value;} ( '+' m2=multiplyExp {$value += $m2.value;} | '-' m2=multiplyExp {$value -= $m2.value;} )* ; multiplyExp returns [double value] : a1=atomExp {$value = $a1.value;} ( '*' a2=atomExp {$value *= $a2.value;} | '/' a2=atomExp {$value /= $a2.value;} )* ; atomExp returns [double value] : n=Number {$value = Double.parseDouble($n.text);} | '(' exp=additionExp ')' {$value = $exp.value;} ; Number : ('0'..'9')+ ('.' ('0'..'9')+)? ;
파서 및 Lexer 생성이라는 파일에 문법을 정의합니다.
ANTLR jar 파일을 사용하여 다음을 실행합니다. Exp.g이 포함된 디렉토리에서 다음 명령:
java -cp antlr-3.2.jar org.antlr.Tool Exp.g
이렇게 하면 ExpLexer.java, ExpParser.java가 생성되고 Exp.tokens.
테스트 클래스 작성
ANTLRDemo.java를 생성하여 테스트 문법:
ANTLRDemo.java
import org.antlr.runtime.*; public class ANTLRDemo { public static void main(String[] args) throws Exception { ANTLRInputStream in = new ANTLRInputStream("12*(5-6)"); ExpLexer lexer = new ExpLexer(in); CommonTokenStream tokens = new CommonTokenStream(lexer); ExpParser parser = new ExpParser(tokens); System.out.println(parser.eval().value); } }
예제 실행
먼저 파서 및 렉서 클래스를 다시 컴파일합니다. 그런 다음 실행 ANTLRDemo:
// Recompile javac -cp .:antlr-3.2.jar ANTLRDemo.java // Run java -cp .:antlr-3.2.jar ANTLRDemo
이제 콘솔은 표현식의 결과인 -12를 출력해야 합니다.
위 내용은 ANTLR로 산술 표현식을 구문 분석하는 방법: 단계별 가이드?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!