Size: a a a

2020 July 18

V

Vasya in ErlangRus
Понял, спасибо. Это, наверное, больше подходит, когда нужно матчить строку в «контейнерах», тот же html, bbcode
источник

TT

Taras 🦀 Taraskin in ErlangRus
Vasya
Понял, спасибо. Это, наверное, больше подходит, когда нужно матчить строку в «контейнерах», тот же html, bbcode
решать вам) варианты есть, выбирайте, какой вам удобнее и лучше подойдет
источник

V

Vasya in ErlangRus
Taras 🦀 Taraskin
решать вам) варианты есть, выбирайте, какой вам удобнее и лучше подойдет
Спасибо большое)
источник

V

Vasya in ErlangRus
cleverfox 🦊
конечно рекурсией
И Вам огромное)
источник

c🦊

cleverfox 🦊 in ErlangRus
Taras 🦀 Taraskin
я рекурсиями думаю, мне проще рекурсия чем сверткой, и быстрее написать

может чуть длиннее код будет — зато потеря пробела будет некритичной
и хорошее понимание, как это работает - без магии
только тебе заранее надо знать какие поля у тебя поддерживаются, я предпочитаю более динамические вещи, а там либо токенайзер нужно писать, что усложняет, либо вводить обязательные пробелы
источник

TT

Taras 🦀 Taraskin in ErlangRus
cleverfox 🦊
только тебе заранее надо знать какие поля у тебя поддерживаются, я предпочитаю более динамические вещи, а там либо токенайзер нужно писать, что усложняет, либо вводить обязательные пробелы
та да) добавили фичу в сервис - соответственно новый токен - добавляю и в матчинг
источник

SP

Sergey Prokhorov in ErlangRus
можно через leex и yecc http://erlang.org/doc/apps/parsetools/index.html
источник

SP

Sergey Prokhorov in ErlangRus
если "по взрослому" делать 😄
источник

TT

Taras 🦀 Taraskin in ErlangRus
+1 вариант))

только новичек может и не вывезти — я пару раз пробовал, и получал "баги"))

это реально взрослое решение!
надо хорошо регулярки шарить, и отличия разных регулярок
источник

SP

Sergey Prokhorov in ErlangRus
ну да, leex/yecc без бэкграунда сложно. Я когда разбирался то был расстроен малым количеством документации. Пришлось искать примеры из opensource проектов и по ним разбираться
источник

SP

Sergey Prokhorov in ErlangRus
Vasya
condition(<<"user.is_online && user.balance > 0 && config.check">>, #{user=>#{is_online=>true, balance=>100}, config=>#{}}) -> false.
вот похожий пример: парсер и интерпретатор gettext plural rules (похоже на твой пример, но результат числовой а не boolean).
лексер: https://github.com/seriyps/gettexter/blob/master/src/gettexter_plural_scanner.xrl
парсер: https://github.com/seriyps/gettexter/blob/master/src/gettexter_plural_parser.yrl
"интерпретатор": https://github.com/seriyps/gettexter/blob/master/src/gettexter_plural.erl
но как-то много кода для такой простой задачи вышло в итоге. У меня интерпретатор конвертировал AST который выдаёт парсер в Erlang AST и потом выполнял на интерпретаторе Erlang. Я рассчитывал потом допились компиляцию этого AST в .beam т.к. правило считывается один раз а выполняется много. Но у тебя я так понял наоборот
источник

TT

Taras 🦀 Taraskin in ErlangRus
Sergey Prokhorov
вот похожий пример: парсер и интерпретатор gettext plural rules (похоже на твой пример, но результат числовой а не boolean).
лексер: https://github.com/seriyps/gettexter/blob/master/src/gettexter_plural_scanner.xrl
парсер: https://github.com/seriyps/gettexter/blob/master/src/gettexter_plural_parser.yrl
"интерпретатор": https://github.com/seriyps/gettexter/blob/master/src/gettexter_plural.erl
но как-то много кода для такой простой задачи вышло в итоге. У меня интерпретатор конвертировал AST который выдаёт парсер в Erlang AST и потом выполнял на интерпретаторе Erlang. Я рассчитывал потом допились компиляцию этого AST в .beam т.к. правило считывается один раз а выполняется много. Но у тебя я так понял наоборот
👍 пример хорош, спасибо!) сохранил себе)
можно доучить использование "leex + yecc" ))
источник

TT

Taras 🦀 Taraskin in ErlangRus
мой вариант "бедного родственника" - без gettext и всякого разного,
только свой велосипед —

noun_cases_count2text(Count, T1, T2, T3) ->
 N1 = Count rem 100,
 if (N1 > 4) and (N1 < 20) -> T3;
   true ->
     N2 = Count rem 10,
     case N2 of
       0 -> T3;
       1 -> T1;
       2 -> T2;
       3 -> T2;
       4 -> T2;
       _ -> T3
     end
 end.
%> hm:noun_cases_count2text(1, "яблоко", "яблока", "яблок").
%"яблоко"
%> hm:noun_cases_count2text(2, "яблоко", "яблока", "яблок").
%"яблока"
%> hm:noun_cases_count2text(5, "яблоко", "яблока", "яблок").
%"яблок"

+ с переводами в эрланг модулях, не отдельно в txt файлах gettext-а —
тоесть T1 в этой функции выше — это
tr:tr(en | ru | uk, key1, key2)

или
Lang:tr(key1, key2)

где Lang = tr_en | tr_ru | tr_uk
источник

SP

Sergey Prokhorov in ErlangRus
Да, я просто универсальный хотел сделать. Он из .po/.mo загружает и переводы и plural rules.
источник

ML

Maksim Lapshin in ErlangRus
Vasya
condition(<<"user.is_online && user.balance > 0 && config.check">>, #{user=>#{is_online=>true, balance=>100}, config=>#{}}) -> false.
Я для такого извращался с генерацией match спеки
источник
2020 July 19

PK

Petr Kozorezov in ErlangRus
может кто знает, есть ли функция обратная file:consult?
чтобы записала терм в виде текстового файла
источник

V

Vasilii Demidenok in ErlangRus
io_lib:format + file:write_file
источник

PK

Petr Kozorezov in ErlangRus
:)
источник

PK

Petr Kozorezov in ErlangRus
может есть готовая функция, а я её не вижу
источник

V

Vasilii Demidenok in ErlangRus
¯\_(ツ)_/¯
источник