Как стать автором
Обновить

Комментарии 11

Название уже хорошее... евпочя

Разве для Раста нет кодогенератора грамматического парсера на основе какого-нибудь из языков описания грамматик? Было бы гораздо легче декларативно её описать.

Конкретно для Lua есть примерно хренальон только опубликованных реализаций разного содержания. Есть парсеры, биндинги, и вообще все на свете.

IMHO вопрос был не про реализацию Lua на Rust, а про вот это.

Есть всякого, в том числе обертка для yacc. Там и nom и всякие tree-sitter и прочие комбинаторные парсеры есть. Но чуваку видимо захотелось изобрести велосипед.

re2c в последней версии для раста генерит код

Кодогенераторы есть, конечно. Но кажется, что освоить язык Rust лучше помогает изучение языка, а не правил написания грамматик. Да и автору другие руководства по парсингу в Rust показались слишком сложными.

Конкретно на Раст есть библиотека Pest, поддерживающая крайне удобный способ описания грамматик.

Код будет почище, если pc, fp объявить как usize, а то эти постоянные `as i32`, `as usize`…

ps ага, вижу что значения pc/fp кладутся в стек `data`, а потому преобразование не избежать в этих местах.
Лексер читать больно. Каждый токен делает копию строки из входного потока, а функции типа lex_number делают посимвольно push_str, разве это не лишние аллокации?

Идеально было бы придумать что-то типа «срезов», чтобы токен ссылался на позицию+длину во входном файле.
Да и бесконечные `&[char]` — это не самый оптимальный способ представления строк в Rust.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий