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

  • Construir objeto compartido de C ++ al crear un proyecto de Android en Eclipse
  • Importación del proyecto Android AOSP en eclipse
  • Cómo compilar GCC para android?
  • Android NDK: Abortar detener?
  • Condiciones de Android.mk
  • Cómo acelerar el mm en la fabricación de módulos de AOSP
  • Per-file CPPFLAGS en Android.mk
  • Construyendo Android desde fuentes: unsupported reloc 43
  • Gnu Makefile para gdc
  • Cómo utilizar compilación OpenCV recompilada para Android
  • ¿Cómo ejecutar reglas personalizadas en Android.mk antes de la compilación?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.