Size: a a a

Compiler Development

2020 June 06

AT

Alexander Tchitchigi... in Compiler Development
S rule is left-recursive, is that compatible with LL(1) at all?
источник

AT

Alexander Tchitchigi... in Compiler Development
Then you have a terminal all over the place, you're not going to decide on particular rule without lookahead.
источник
2020 June 07

IK

Ivan Kochurkin in Compiler Development
Между тем подъезжают рантаймы Dart и Dlang под ANTLR: https://github.com/antlr/antlr4/pull/2728 https://github.com/antlr/antlr4/pull/2843
источник

IK

Ivan Kochurkin in Compiler Development
Правда не очень понятно, зачем второй, вроде D не особо популярный
источник
2020 June 08

p

polunin.ai in Compiler Development
Кто может объяснить или поделиться объяснением зачем нужен лексер? Почему бы сразу не парсить текст в базовое промежуточное представление, минуя AST? кмк это должно быть быстрее так как мы за один проход собираем всю информацию и избавляемся от ненужной сразу.
источник

AZ

Alexander Zalutskiy in Compiler Development
polunin.ai
Кто может объяснить или поделиться объяснением зачем нужен лексер? Почему бы сразу не парсить текст в базовое промежуточное представление, минуя AST? кмк это должно быть быстрее так как мы за один проход собираем всю информацию и избавляемся от ненужной сразу.
К примеру вам очень проблемотично будет производить оптимизации и сложность вашего кода не плохо так увеличится)
источник

p

polunin.ai in Compiler Development
Alexander Zalutskiy
К примеру вам очень проблемотично будет производить оптимизации и сложность вашего кода не плохо так увеличится)
можно поподробнее?
источник

AZ

Alexander Zalutskiy in Compiler Development
polunin.ai
можно поподробнее?
Начнем с того что вы сейчас называете промежуточным представлением?
источник

p

polunin.ai in Compiler Development
к примеру для
data Foo = Bar | Baz
можно было бы сразу парсить текст в следующее представление:
data: Foo
constructors: [Bar, Baz]
источник

p

polunin.ai in Compiler Development
насколько я понимаю, принято в начале парсить в поток токенов
[Keyword(data), Ident(Foo), Assign, Ident(Bar), Or, Ident(Baz)]
источник

AZ

Alexander Zalutskiy in Compiler Development
polunin.ai
к примеру для
data Foo = Bar | Baz
можно было бы сразу парсить текст в следующее представление:
data: Foo
constructors: [Bar, Baz]
Ага.. А что делать со случаями когда нужно сильно вперед проходить чтобы понять что за конструкция синтаксическая используется?

Вам придется по несколько раз проходить вперед для каждой конструкции. Это около 50 символов к примеру. И вместо прохода по 5 токенам мы будем проходить по тексту.

Конечно можно кэшировать результат, но в таком случае вы по сути так же создаете токены, как это делает лексер
источник

AZ

Alexander Zalutskiy in Compiler Development
Ну и с лексемами гораздо проще работать, всё таки.
источник

AZ

Alexander Zalutskiy in Compiler Development
И расширять компилятор новыми конструкциями
источник

p

polunin.ai in Compiler Development
Alexander Zalutskiy
Ага.. А что делать со случаями когда нужно сильно вперед проходить чтобы понять что за конструкция синтаксическая используется?

Вам придется по несколько раз проходить вперед для каждой конструкции. Это около 50 символов к примеру. И вместо прохода по 5 токенам мы будем проходить по тексту.

Конечно можно кэшировать результат, но в таком случае вы по сути так же создаете токены, как это делает лексер
>А что делать со случаями когда нужно сильно вперед проходить чтобы понять что за конструкция синтаксическая используется?

ну например составлять грамматику так, чтобы таких конструкций не возникало?
источник

AZ

Alexander Zalutskiy in Compiler Development
polunin.ai
>А что делать со случаями когда нужно сильно вперед проходить чтобы понять что за конструкция синтаксическая используется?

ну например составлять грамматику так, чтобы таких конструкций не возникало?
Т.е. вы выпустите одну версию языка и больше никогда не будете её обновлять? Версия 1.0 и точка
источник

p

polunin.ai in Compiler Development
Alexander Zalutskiy
И расширять компилятор новыми конструкциями
так парсинг это основное время работы компилятора. он должен быть в первую очередь быстрым, а насколько просто реализовать быстроту - дело другое.
источник

p

polunin.ai in Compiler Development
Alexander Zalutskiy
Т.е. вы выпустите одну версию языка и больше никогда не будете её обновлять? Версия 1.0 и точка
составлять грамматику так, чтобы таких конструкций не возникало
источник

p

polunin.ai in Compiler Development
то есть учитывать и возможность дальнейшего добавления конструкций, ясное дело.
источник

AZ

Alexander Zalutskiy in Compiler Development
polunin.ai
так парсинг это основное время работы компилятора. он должен быть в первую очередь быстрым, а насколько просто реализовать быстроту - дело другое.
Всё зависит от сложности проекта. Если это что-то простоя для себя, то можно и сразу транслировать.

Иначе возникает куча проблем и выйгрыш в скорости не будет существенным
источник

p

polunin.ai in Compiler Development
Alexander Zalutskiy
Всё зависит от сложности проекта. Если это что-то простоя для себя, то можно и сразу транслировать.

Иначе возникает куча проблем и выйгрыш в скорости не будет существенным
ну вот мне и интересно, какие проблемы возникают, к чему и был вопрос :)
источник