jflex 예제

Off
Non classé

JFlex는 개미 빌드 도구와 쉽게 통합 할 수 있습니다. 개미와 함께 JFlex를 사용하려면 lib/jflex-1.7.0.jar 파일을 $ANT_HOME/lib/디렉토리에 복사하거나 작업 정의에서 lib/jflex-1.7.0.jar로 경로를 명시적으로 설정하면 됩니다(아래 예제 참조). 이러한 점을 설명하기 위해 예제/바이너리의 예제에는 파일이 Java 클래스 파일인지 감지하는 매우 작은 이진 스캐너가 포함되어 있습니다. 그 목적을 위해 파일이 매직 넘버 xCAFEBABE로 시작되는지 살펴봅니다. JFLEX_HOME JFlex를 포함하는 디렉토리(예: C:jflex-1.7.0) CUP 생성된 파서가 생성하는 오류 메시지를 개선하려면 메서드 report_error 및 report_fatal_error를 `파서 코드` 섹션의 재정의할 수도 있습니다. 컵 사양. 새 메서드는 예를 들어 yyline 및 yycolumn(클래스 java_cup.runtime.Symbol의 왼쪽 및 오른쪽 멤버에 저장됨)을 사용하여 사용자에게 오류 위치를 보다 편리하게 보고할 수 있습니다. JFlex 배포의 예제/java 디렉토리의 Java 언어에 대한 lexer 및 파서는 이 오류 보고 스타일을 사용합니다. 이러한 사양은 위의 기술도 보여 줍니다. (이 예는 사이트 전체 설치용입니다. 당신은 그것을 위해 루트해야합니다. 사용자 설치는 정확히 동일한 방식으로 작동합니다 – 쓰기 권한이 있는 디렉토리를 선택하기만 하면 됩니다) %{와 %} 사이의 코드는 생성된 lexer 클래스 소스에 그대로 복사됩니다. 여기서 는 스캐너 작업 내에서 사용되는 멤버 변수 및 함수를 선언할 수 있습니다.

이 예제에서는 현재 토큰의 위치 정보가 있는 문자열 리터럴 및 두 개의 도우미 함수 기호를 저장하는 StringBuffer 문자열을 선언합니다(인터페이스 방법에 대한 JFlex 및 CUP 참조) 파서 생성기 CUP)와 함께). 모든 JFlex 옵션과 마찬가지로 %{ 및 %} 모두 선을 시작해야 합니다. 이 사양에서 JFlex는 스캐너에 대한 코드를 포함하는 하나의 클래스가있는 .java 파일을 생성합니다. 클래스에는 입력을 읽는 java.io.Reader를 취하는 생성자가 있습니다. 클래스에는 스캐너를 실행하고 입력에서 다음 토큰을 얻는 데 사용할 수있는 yylex() 함수가 있습니다 (이 예제에서는 사양이 %cup 스위치를 사용하기 때문에 함수에 실제로 next_token() 이름이 있습니다). 예제 디렉토리는 또한 CUP (허드슨 1996) 웹 사이트 (JFlex와 인터페이스하도록 수정)에서 얻은 C. 스콧 아나니안에 의해 자바에 대한 CUP 파서 사양과 함께 자바 프로그램의 어휘 구조의 완전한 JFlex 사양을 포함 스캐너)를 참조하십시오. 두 사양 모두 Java 언어 사양(고슬링, 기쁨 및 Steele 1996)을 준수합니다. 위의 사양의 실행 가능한 버전은 JFlex 배포의 예제/byaccj 디렉토리에 있습니다.

예를 들어 mysym이라는 새 심볼 인터페이스가 mysym이라고 하는 경우 jflex 사양의 해당 코드는 사양 파일을 작성했거나 예제 디렉토리에서 선택한 경우 저장합니다(java-lang.flex 라는 이름으로 말). 파일 binjflex.bat(예에서는 C:jflex-1.7.0binjflex.bat)을 편집하여 JFlex를 사용하여 어휘 사양이 어떻게 보이는지 보여 주기 위해 이 섹션에서Java 언어에 대한 사양의 일부를 제공합니다.

Comments are closed.