Anton
надо почитать
Anton
хотя я верю что когда нибудь (сто пудово когда я уже и так выучу) кто нибудь напишет понятный и полный гайд по парсерам в расте
Anton
и я буду сидеть и плакать
Anton
блять сколько раз уже такое было, вот так сидишь без доли информации ебешься, читаешь тонны говна, и пишешь тонны говна
Anton
а потом какойто уебок берет и пишет понятный гайд
Anton
уже когда ты все осознал и понял вселенские истины
Anton
как вообще жить с мыслью что все твои усилия напрасны и ктото потом напишет гайд?
Anton
Евгений
Если в nom'е не писать своих макросов, то он несложный
Anton
Бля мужик как такое ч
Anton
вообще читать нормально?
Safort
@tapok_satan спокойно, Тошик. Возможно, это тебе поможет https://limpet.net/mbrubeck/2014/08/08/toy-layout-engine-1.html
Евгений
named!(pub address <&[u8], Address>, alt!(
tag!(".") => { |_| Address::CurrentLine } |
tag!("$") => { |_| Address::LastLine } |
preceded!(tag!("'"), map!(anychar, Address::Label)) |
map!(map_res!(map_res!(ws!(digit), str::from_utf8), FromStr::from_str), Address::Line) |
map!(map_res!(map_res!(delimited!(tag!("/"), take_until!("/"), tag!("/")), str::from_utf8), FromStr::from_str), { |x: String| Address::Regex(RegexDirection::ForwardSearch, x) } )
map!(map_res!(map_res!(delimited!(tag!("?"), take_until!("?"), tag!("?")), str::from_utf8), FromStr::from_str), { |x: String| Address::Regex(RegexDirection::BackwardSearch, x) } )
)
);
Евгений
Бу
Anton
ну это же капец так определять границы, и содержимое с правилом ограничения на пустой контент
Anton
named!(pub address <&[u8], Address>, alt!(
tag!(".") => { |_| Address::CurrentLine } |
tag!("$") => { |_| Address::LastLine } |
preceded!(tag!("'"), map!(anychar, Address::Label)) |
map!(map_res!(map_res!(ws!(digit), str::from_utf8), FromStr::from_str), Address::Line) |
map!(map_res!(map_res!(delimited!(tag!("/"), take_until!("/"), tag!("/")), str::from_utf8), FromStr::from_str), { |x: String| Address::Regex(RegexDirection::ForwardSearch, x) } )
map!(map_res!(map_res!(delimited!(tag!("?"), take_until!("?"), tag!("?")), str::from_utf8), FromStr::from_str), { |x: String| Address::Regex(RegexDirection::BackwardSearch, x) } )
)
);
бля, не помилуй
Евгений
Бога нет, чувак, смирись
Евгений
Есть только НОМ
Anton
Не
Anton
есть еще oak
Anton
в котром все сразу декларативно описываешь
Anton
и потом парсишь
Anton
и есть крайне хороший полный гайдлайн примера написания своего парсера для калькулятора
Евгений
А это не декларативно что ли?
Евгений
Это ж комбинаторы обычные, ак в парсеке
Filipp
парсеры писать это самое интересное
Filipp
через стейт-машину
Filipp
на собеседовании в Яндекс писал такой
Filipp
простые математические выражения парсить и считать
Filipp
дада
Евгений
Если что-то можно распарсить конечным автоматом, то можно просто регулярку хуйнуть
Filipp
мм ну давай
Filipp
5+(5+10)*12 - 3*(4+5)
Filipp
https://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags
если кто не видел здесь подробно описано почему нельзя просто хуйнуть регулярку
Anton
в nom нечитабельные структуры определений получаются
Anton
глаза в разные стороны расходятся
Anton
в oak без лишнего, концентрация только на определении границ, синтаксиса и тд
Anton
А потом отдельно просто реализуешь обработку
Anton
ну крч - nom тупо изза визуальности не дает мне сконцентрироватся на самой проблеме) поэтому я выбрал изучать oak
Anton
плюс у oak есть гайдлайн, у нома его нет и вообще непонятно чо блять делать
Michael
пить)
Евгений
мм ну давай
Язык арифметики нельзя распарсить конечным автоматом, лол
Евгений
Это же КС-грамматика
Евгений
А конечные автоматы принимают только регулярные языки
Filipp
ну не только конечный автомат, еще стек конечно
Евгений
Ты магазинный автомат с конечным путаешь прост
Filipp
точно
Filipp
я и не знал что конечный со стеком это магазинный
Anton
пить)
не ну это универсальное правило жизни
Anton
вопрос что делать с нечитабельным парсер фреймворком)
Евгений
Ну дело твоё. По мне так вот futures нифига неюзабельные, чо с ними делать я хз вообще. Выглядит как какая-то бешенная комонада.
Херачу напрямую на mio
պլհկ
чем тебе фьючи не угодили?
պլհկ
await!(ty_pidor())
Loo
Loo
может ты просто не пытался разобраться даже
Loo
или пытался?
պլհկ
а че ты читал?
Евгений
Как я могу построить оценочное суждение о том, что я не знаю?
պլհկ
https://aturon.github.io/blog/2016/08/11/futures/
Евгений
а че ты читал?
https://docs.rs/futures
https://docs.rs/tokio
Типа а где ещё?
պլհկ
https://tokio.rs
պլհկ
https://github.com/rust-lang/rust/pull/44853 теперь заживем
Anton
Еее
Anton
оказывается все не так плохо в жизни
Anton
по макросам нашел годный гайд
Anton
https://danielkeep.github.io/quick-intro-to-macros.html#macro-mechanics
Anton
Anton
Щасте
Loo
http://perf.rust-lang.org/index.html
Loo
его кстати порезали по функционалу
Loo
а склоько сейчас cargo запускает "codegen units" по-умолчанию?
Loo
1, 20, 100?
Loo
в дебаге офк
պլհկ
1
պլհկ
>In this commit the default number of codegen units for debug builds has been
raised from 1 to 32.