Android ANTLR hacer que no funciona correctamente

Estoy intentando utilizar ANTLR en Android, y encontré esto: ANTLR y Android

Después de descargar el AntlrJavaRuntime no estoy seguro de qué hacer, se supone que debo hacer esto:

1. lunch the appropriate target 2. make AntlrJavaRuntime 3. verify that AntlrJavaRuntime.xml was placed in /system/etc/permissions and 4. AntlrJavaRuntime.jar was placed in /system/framework 5. after this, you can run a normal make 

En primer lugar, ¿qué significa el primer paso?

En segundo lugar, cuando intento hacer: make AntlrJavaRuntime consigo el error siguiente:

 ~/AntlrJavaRuntime$ make AntlrJavaRuntime make: Nothing to be done for `AntlrJavaRuntime'. 

Es muy difícil encontrar documentación sobre esto, por lo que cualquier ayuda es muy apreciada (o un claro ejemplo de cómo preparar ANTLR para un proyecto de Android).

Bueno, acabo de hacer una pequeña prueba con una versión "sencilla" de ANTLR, y todo salió bien.

Esto es lo que hice:

1 nuevo proyecto Android

Crea un nuevo proyecto llamado AndAbac (Android-Abacus) con un paquete llamado bk.andabac y una actividad llamada AndAbac .

2 crear una gramática

Cree un archivo de gramática llamado Exp.g (explicación aquí ) en cualquier parte de su sistema y pegue lo siguiente:

 grammar Exp; @parser::header { package bk.andabac; } @lexer::header { package bk.andabac; } 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')+)? ; WS : (' ' | '\t' | '\r'| '\n') {$channel=HIDDEN;} ; 

3 descarga ANTLR y generar lexer / parser

Descargue ANTLR aquí: http://www.antlr3.org/download/antlr-3.3-complete.jar y póngalo en el mismo directorio que su archivo Exp.g Genere un lexer y un parser (explicación aquí ) y copie los archivos .java generados en la siguiente carpeta en su proyecto de Android: src/bk/andabac . También ponga este tarro ANTLR en el classpath de su proyecto de Android.

4 cambiar algunos archivos de proyecto

Pegue lo siguiente en res/layout/main.xml :

 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" > <EditText android:id="@+id/input_text" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="5 * (8 + 2)" /> <Button android:id="@+id/parse_button" android:layout_height="wrap_content" android:layout_width="fill_parent" android:text="eval" /> <TextView android:id="@+id/output_text" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="" /> </LinearLayout> 

Y lo siguiente en src/bk/andabac/AndAbac.java :

 package bk.andabac; import android.app.Activity; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.EditText; import android.widget.TextView; import org.antlr.runtime.ANTLRStringStream; import org.antlr.runtime.CommonTokenStream; import org.antlr.runtime.RecognitionException; public class AndAbac extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); final Button button = (Button)findViewById(R.id.parse_button); button.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { EditText in = (EditText)findViewById(R.id.input_text); TextView out = (TextView)findViewById(R.id.output_text); String source = in.getText().toString(); ExpLexer lexer = new ExpLexer(new ANTLRStringStream(source)); ExpParser parser = new ExpParser(new CommonTokenStream(lexer)); try { out.setText(source + " = " + parser.eval()); } catch (RecognitionException e) { out.setText("Oops: " + e.getMessage()); } } }); } } 

5 prueba la aplicación

Ejecute el proyecto en un emulador o cree un archivo APK e instálelo en un dispositivo Android (probé ambos y funcioné). Verá lo siguiente después de presionar el botón eval :

Introduzca aquí la descripción de la imagen

Esta respuesta tal vez un poco tarde, pero de todos modos …

Soy el autor del puerto Antlr. Esas fuentes están destinadas a ser utilizadas dentro del código fuente de Android. Sin embargo, sólo incluir las fuentes en su proyecto andriod debe resolver su problema.

Debería haber mencionado que las instrucciones de construcción son sólo cuando se agrega Antlr al código fuente del sistema operativo Android.

-Earlencia

  • Condiciones de Android.mk
  • Gnu Makefile para gdc
  • Agente de bambú: no encontró la herramienta de compilación revisión 23.0.3
  • Cómo acelerar el mm en la fabricación de módulos de AOSP
  • Cómo especificar el directorio para NDK_MODULE_PATH
  • Android NDK: Incluye la biblioteca de boost c ++
  • Construir objeto compartido de C ++ al crear un proyecto de Android en Eclipse
  • Los cambios en el makefile importado no activan la reconstrucción en android-ndk
  • La ejecución falló para la tarea ': app: compileDebugNdk' no pudo ejecutar este comando ndk-build.cmd
  • Cómo vincular cualquier biblioteca en la aplicación ndk
  • ¿Dónde se supone Android.mk?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.