ANTLR и массивы

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

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

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

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

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

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

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

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

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

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

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

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

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


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


Ответы (1)


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

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

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

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

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

person Puppy    schedule 10.08.2011
comment
Да, да, я имел в виду [4,5,6,7]. Не могли бы вы уточнить последнее предложение, если это возможно? - person Te33Xaz; 11.08.2011