Bezdepbonusu7Программирование: статьи и ответы

Вопрос

ANTLR и массивы

Автор вопроса: Te33XazОтветов: 1

У меня есть вопрос, связанный с реализацией массивов с комбинацией Java + ANTLR. (Я в основном говорю о массивах стилей java/c).

Итак, в основном я спрашиваю, как вы реализуете такую ​​​​функцию, если такой пример уже доступен или кто-то может указать мне на что-нибудь, что может указать на ее решение.

С другой стороны, я немного искал возможное решение. Основная проблема, которую я вижу, заключается в том, что пользователь может создавать массивы различных размеров, даже сойти с ума, если захочет (например, создать массивы 5 измерений или хуже).

Хотя грамматика для чего-то подобного довольно проста, например

new ID (INT (',' INT)* )

задний конец действительно немного вмешивается. Как я уже сказал, пользователь может вводить любое количество измерений, поэтому измерения массива должны создаваться динамически. (по крайней мере, как я это вижу, может быть, я слишком все усложняю?)

После поиска я нашел то, что в значительной степени решает эту проблему, вот ссылка на вопрос:

Можно ли динамически создавать несколько -мерный массив в Java?

Конечно, мой вопрос в том, является ли этот жизнеспособный пример немного (по крайней мере) сложным? Есть ли более элегантное решение?

Имея это в виду, я подумал, может быть, ответ может заключаться в том, чтобы каким-то образом преобразовать многомерность в более линейную структуру? Может ли что-то подобное быть полезным? Простой поиск в stackoverflow указал на множество решений, например:

Алгоритм преобразования многомерного массива в одномерный массив

Стоит ли искать в этом направлении?

Теперь, в конце концов, имея в виду, что массивы действительно являются общей функцией во многих языках, я должен найти удивление, что после поиска в списке рассылки ANTLR нет подобного вопроса, что, как я уже сказал ранее, заставляет меня поверить, что я, возможно, из-за усложнения вещей? (Если я действительно хромаю в поиске?) Я был бы очень признателен за отзывы.

  • Хорошо, пользователь вводит что-то вроде массива [][]=новый массив[5][5]. Пользователь объявляет двухмерный массив, и я хочу поместить все элементы массива в таблицу символов. Два вложенных цикла for справляются с этим хорошо, и у меня есть поддержка для двухмерных массивов. (exmethod в интерпретаторе, который циклически перебирает индексы, которые я проанализировал, и создает переменные). Но если пользователь решит объявить n-мерные массивы, я не могу вкладывать циклы навсегда, поэтому я могу использовать переменные аргументы как в первой ссылке, например, или что-то еще. Может быть, лучше. Te33Xaz 11.08.2011
  • Или, еще более простое объяснение, если кто-то удалил массивы из java/c, и мне нужно вернуть их обратно, единственное решение, которое я вижу до сих пор, - это анализировать индексы и использовать код, аналогичный первой ссылке, для создания всех переменных-членов. Мне интересно, есть ли более простой способ включить поддержку массивов в типичный структурный язык? Te33Xaz 11.08.2011

antlrarraysdsl

Ответы

Ответ 1 · Puppy

Ваш синтаксис, если я не ошибаюсь, соответствует чему-то вроде

новый символ 4,5,6,7

что как то странно. Я ожидаю, что вы действительно имели в виду

новый символ[4,5,6,7]

Однако с чисто синтаксической точки зрения нет никаких причин не хранить индексы в массиве и не беспокоиться об этом семантическом анализе.

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы