ANTLR: 간단한 예
ANTLR은 텍스트 데이터를 구문 분석하는 강력한 도구이지만 시작하기가 두려울 수 있습니다. ANTLR의 기본 사항을 파악하기 위해 간단한 예를 찾는 사람들을 위해 여기에 포괄적인 데모가 있습니다.
문법 만들기
먼저 다음과 같은 파일에 간단한 문법을 정의해 보겠습니다. Exp.g:
grammar Exp; eval : additionExp EOF ; additionExp : multiplyExp ( '+' multiplyExp | '-' multiplyExp )* ; multiplyExp : atomExp ( '*' atomExp | '/' atomExp )* ; atomExp : Number | '(' additionExp ')' ; Number : ('0'..'9')+ ('.' ('0'..'9')+)? ;
파서 생성 및 Lexer
문법이 생성되면 ANTLR jar를 다운로드하고 다음 명령을 실행하여 파서와 어휘 분석기를 생성합니다.
java -cp antlr-3.2.jar org.antlr.Tool Exp.g
이렇게 하면 ExpLexer.java, ExpParser가 생성됩니다. .java 및 Exp.tokens 파일.
테스트 생성 클래스
ANTLRDemo.java라는 테스트 클래스를 만들어 보겠습니다.
import org.antlr.runtime.*; public class ANTLRDemo { public static void main(String[] args) throws Exception { ANTLRStringStream in = new ANTLRStringStream("12*(5-6)"); ExpLexer lexer = new ExpLexer(in); CommonTokenStream tokens = new CommonTokenStream(lexer); ExpParser parser = new ExpParser(tokens); System.out.println(parser.eval()); } }
파서 실행 이해
ANTLRDemo를 컴파일하고 실행합니다. 자바. 표현식이 올바르게 평가되면 출력이 인쇄되지 않습니다. 그렇지 않으면 오류 메시지가 표시됩니다.
문법에 Java 코드 추가
파서의 기능을 향상하려면 {.. .} 블록:
eval : additionExp { /* plain code block! */ System.out.println("value equals: " + $value); } ;
이 예는 다음의 결과를 인쇄합니다. 표현식.
규칙에서 Double 값 반환
더블을 반환한다는 것을 나타내기 위해 문법의 각 규칙에 [double value]를 반환하는 추가:
eval returns [double value] : additionExp { /* plain code block! */ System.out.println("value equals: " + $value); } ;
ANTLRDemo 수정 class
ANTLRDemo.java 클래스를 업데이트하여 반환된 값을 검색합니다.
import org.antlr.runtime.*; public class ANTLRDemo { public static void main(String[] args) throws Exception { ANTLRStringStream in = new ANTLRStringStream("12*(5-6)"); ExpLexer lexer = new ExpLexer(in); CommonTokenStream tokens = new CommonTokenStream(lexer); ExpParser parser = new ExpParser(tokens); System.out.println(parser.eval()); } }
ANTLRDemo.java를 다시 실행하여 콘솔에 인쇄된 결과를 확인하세요.
위 내용은 ANTLR을 사용하여 간단한 산술 표현식 파서를 어떻게 만들 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!