2010-05-01 7 views
2

Java/JVM 위에 간단한 스크립트 언어를 작성하고 있습니다. 여기에서 {} 대괄호를 사용하여 Java 코드를 임베드 할 수도 있습니다. 문제는 문법에서 이것을 어떻게 파싱합니까?ANTLR - 자바 코드 임베딩, 전후 평가?

  1. 하는 모든이 될 수 있도록 허용과 같은 : 저는 두 가지 옵션이 있습니다 [a-z|a-Z|0-9|_|$]을하고, 실제로 가능하고 효율적이다 (별도의 자바 문법을 받기
  2. 에 가서 그 작은 코드를 구문 분석하는 문법을 사용 ?) 옵션 2 이후

]는 기본적으로도 확인되고있어 자바 코드를 평가할 때 이후 다시 확인합니다. 이제 마지막 질문은 런타임에 생성 된 객체와 함께 자바 코드를 동적으로 실행할 수있는 방법입니까?

등 감사합니다,

윌리엄 밴 Doorn

답변

1

1] 모든이에있을 허용 : | AZ | 0-9 | _ | [AZ $], 그리고

에 이동

이렇게하면 안됩니다. 여는 괄호와 닫는 괄호를 고려해야합니다.

2] (실제로 가능하고 효율적인가요?) 추가 자바 문법을받을 수 있도록 작은 코드를 구문 분석하는 문법을 사용

예 그게 가능합니다. 하지만 우선 뭔가 효과가 있다고 생각한 다음 효율성에 대해 걱정하는 것이 좋습니다 (실제로 여기에 문제가 있습니까?).

... 런타임시 생성 된 객체와 함께 자바 코드를 동적으로 실행할 수있는 방법입니까?

예, Java 6부터 소스 파일을 동적으로 컴파일 할 수있는 방법이 있습니다. JavaCompiler API를 참조하십시오.

+0

감사합니다. 답변으로 표시 하겠지만 JavaCompiler API는 일반 라인 대신 파일 인스턴스 만 허용합니다. – wvd

+0

@wvd : 예, 먼저 Java 소스 (String)를 파일에 작성해야합니다. –

0

Java 코드에서 사용되지 않고 리터럴에 거의 나타나지 않는 '`'와 같은 문자 안에 Java 코드를 넣으십시오.

자바 코드 : '' (EscapeSequence | ~('\\'|'')) * '`' ;

사용은 ... EscapeSequence의 정의를 얻을 수 ANTLR 예에 의해 제공 java.g

유일한 캐치가 필요한 경우 ('`')이 문자의 코드를 사용하는 프로그래머를 요청해야한다는 것입니다 리터럴로서.