LINUX.ORG.RU

Ответ на: комментарий от naryl

А таблицы он генерить умеет? 
Ну и, вроде как, скорость работы парсера на выходе, у ANTLR, может зависеть экспотенциально от размера файла и грамматики. 

Неужто больше нет нормальных LL генераторов?

anonymous
()
Ответ на: комментарий от anonymous

Скорость работы ANTLR не будет зависеть экспоненциально ни от размера файла ни от грамматики. А какие таблицы имеются ввиду? symbol table?

naryl ★★★★★
()
Ответ на: комментарий от naryl

блин, понятно что скорость работы ANTLR не будет зависеть.
Я говорю про скорость парсера на выходе.

Управляющие LL таблицы


>>> the table-based kind of parser, the alternative being a recursive descent parser which are usually coded by hand (although not always; see e.g. ANTLR for an LL(*) recursive-descent parser generator)

anonymous
()
Ответ на: комментарий от anonymous

Прошу прощения. Я парсер имел ввиду, а не ANTLR.

Управляющие таблицы он делать не умеет. И я не знаю ни одного parser generator'а (из примерно десяти известных мне), который умеет. По идее тебе они не нужны. Если нужны, можно попробовать пошаманить с ANTLR works для IntelliJ IDEA. Он как-то умеет анализировать грамматику.

naryl ★★★★★
()

Разве можно построить формальный парсер для C++? Ведь там для
определения значения конструкций нужно выполнять lookup ранее
определённых типов и переменных по сложным правилам.
Сравните:

template <int n>
class A
{
};

int main (void)
{
    A < 0 > a;       // <- эта строчка
}

с этим:

int main (void)
{
    int A, a;

    A < 0 > a;       // <- эта строчка
}

В этих примерах смысл записи "A < 0 > a" совершенно разный, и разбор
определяется разными "грамматиками" (имею в виду описанные в
приложении A к стандарту). И это не единственный пример
неоднозначности. Вот ещё:

class A {
public:
    A (int) {}
};

class B {};
A foo (B);   // <- Функция, принимающая объект класса B,
             //    и возвращающая объект класса A

int B;
A bar (B);   // <- Объект bar класса A

- тут тоже одинаковые записи (без учёта контекста) на самом деле
состоят из разных грамматических элементов.

erDiZz
()
Ответ на: комментарий от erDiZz

ага. Только мне не нужен парсер C++.
Мне всего лишь нуже генератор парсеров для LL грамматики, на выходе которого C/C++ код.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.