ANTLR-3.5-complete.jar를 Android 앱에서 작동 시키려고했으나 제대로 작동하지 않습니다. 바트 키어 (Bart Kiers)의 대답 HERE은 많은 도움이되었지만 여전히 작동하지 않습니다.(Android) ANTLRStringStream 예외 발생
클릭했을 때 EditText보기의 텍스트가 내 grammar.g에 따라 올바른지 여부를 확인하지만 내가 입력 한 텍스트가 올바른지 여부는 중요하지 않습니다. ANTLRStringStream을 인스턴스화하는 동안 버튼을 클릭하면 내 앱이 항상 중단됩니다.
public void onClickVerify(View v) throws TypeNotPresentException {
String source = "foobar";
Log.e("TestDebug", "Instantiating views");
TextView out = (TextView) findViewById(R.id.textView1);
EditText in = (EditText) findViewById(R.id.editText1);
try {
Log.e("TestDebug", "Getting source from EditText");
source = in.getText().toString();
Log.e("TestDebug", "source = " + source);
Log.e("TestDebug", "Instantiating stream");
ANTLRStringStream stream = new ANTLRStringStream(source);
Log.e("TestDebug", "Instantiating lexer");
grammarLexer lexer = new grammarLexer(stream);
Log.e("TestDebug", "Instantiating parser");
grammarParser parser = new grammarParser(
new BufferedTokenStream(lexer));
Log.e("TestDebug", "Applying rule to parser");
out.setText(source + " = " + !parser.failed());
} catch (IllegalStateException ise) {
out.setText("Exception caught");
}
}
그리고 여기에 내가 로그에서 볼 수있는 작업은 다음과 같습니다 : 여기가 무슨 인스턴스화 스트림 test33
- 인스턴스화 전망
그런 다음 "불행히도 Tes tAntlrApp가 중지되었습니다. " 창이 열립니다.
편집 : 내 logcat 더있어.
java.lang.IllegalStateException: Could not execute method of the activity
at android.view.View$1.onClick(View.java:3591)
at android.view.View.performClick(View.java:4084)
at android.view.View$PerformClick.run(View.java:16966)
at android.os.Handler.handleCallback(Handler.java:615)
at android.os.Handler.dispatchMessage(Handler.java:92)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:4745)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.reflect.InvocationTargetException
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at android.view.View$1.onClick(View.java:3586)
... 11 more
Caused by: java.lang.NoClassDefFoundError: org.antlr.runtime.ANTLRStringStream
at com.test.antlr.MainActivity.onClickVerify(MainActivity.java:89)
클래스 ANTLRStringStream 클래스를 찾을 수 없습니다. 그러나 코드에 오류/경고가없는 것 같아 클래스의 계층 구조를 볼 수도 있습니다.
이전 답변에서 언급 한 ANTLR 버전을 사용하면 어떻게됩니까? –
그리고 어떤 예외가 발생 했습니까? 'catch'를 이것으로 바꾸고 log-cat에 보이는 것을 게시하십시오 : catch (Exception e) { Log.e ("TestDebug", "Exception caught :", e); }' –
@BartKiers ANTLR 버전을 변경하고 어떤 결과가 발생하는지 살펴 보겠습니다! 'catch '를 변경했지만 코드가 실행되지 않습니다. 'catch'에 도달하지 않고'try' 내에서 충돌합니다. 따라서 로그 출력은 동일하게 유지됩니다. 편집 : v3.3이 ANTLR 웹 사이트에서 삭제 된 것으로 보입니다. 나는 v3.5 만 찾을 수있다. – Cramps