Intereting Posts
Малые Caps на TextViews, EditTexts и кнопки в Android Выберите отдельное значение в android sqlite Zipalign tool не был найден в sdk CursorLoader – Две таблицы соединяют запрос? Как определить местоположение хранилища отладки для отладочной сборки Android ant? Платформа ящика Android отображается в виде фрагмента Когда вы устанавливаете видимость макета как GONE, не видите мой прядильщик, который находится за пределами макета Резервное копирование и восстановление базы данных SQLite на SDCard Android, NSD / DNS-SD: ненадежное обнаружение NsdManager и разрешение IP-адресов Измените текстовый формат переключателя и получите список всех стран и поместите его в spinner Android. Запись Live OpenCV-обработки на Android Помогите мне оптимизировать эту графическую анимацию Задержка в эмуляторе и genymotion при закрытии / запуске новых действий (eglSurfaceAttrib не реализован) Android интегрирует Google + в приложение Как открыть конкретное сообщение / разговор в приложении Gmail

Андроид ANTLR не работает должным образом

Я пытаюсь использовать ANTLR на Android, и я нашел это: ANTLR и Android

После загрузки AntlrJavaRuntime я не уверен, что делать, я должен сделать следующее:

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 

Прежде всего, что означает шаг 1?

Во-вторых, когда я пытаюсь сделать: make AntlrJavaRuntime, я получаю следующую ошибку:

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

Очень сложно найти документацию об этом, поэтому любая помощь действительно оценена (или ясный пример того, как получить ANTLR для проекта Android).

Ну, я просто немного поработал с «простой» версией ANTLR, и все прошло отлично.

Вот что я сделал:

1 новый Android-проект

Создайте новый проект под названием AndAbac (Android-Abacus) с пакетом с именем bk.andabac и активностью под названием AndAbac .

2 создать грамматику

Создайте файл грамматики Exp.g (объяснение здесь ) в любой точке вашей системы и вставьте в него следующее:

 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 download ANTLR & generate lexer / parser

Загрузите ANTLR здесь: http://www.antlr3.org/download/antlr-3.3-complete.jar и поместите его в тот же каталог, что и ваш файл Exp.g Создайте лексер и парсер (объясните здесь ) и скопируйте сгенерированные файлы .java в следующую папку в вашем проекте Android: src/bk/andabac . Также поставьте эту банку ANTLR в путь к классам вашего проекта Android.

4 измените некоторые файлы проекта

Вставьте следующее в 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> 

И в 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 проверить приложение

Либо запустите проект в эмуляторе, либо создайте файл APK и установите его на Android-устройстве (я тестировал оба, и оба работали). После нажатия кнопки eval вы увидите следующее:

Введите описание изображения здесь

Этот ответ может быть немного запоздалым, но в любом случае …

Я автор порта Антльр. Эти источники предназначены для использования в исходном коде Android. Однако, просто включение источников в ваш проект andriod должно решить вашу проблему.

Я должен был упомянуть, что инструкции по строительству только при добавлении Antlr в исходный код ОС Android.

-Earlence