Size: a a a

2020 May 30

АК

Александр Караев... in pro.lua
очевидно, я не хочу писать луа парсер с нуля
источник

S

Snusmumriken in pro.lua
Snusmumriken
Типа такой поправился чуть-чуть — и ответ для текущей строки тут же изменился. Или изменил переменную выше.
Во, вот такое я делал на ловке.
https://habr.com/ru/post/264229/
источник

S

Snusmumriken in pro.lua
источник

T

The Dormouse in pro.lua
Александр Караев
очевидно, я не хочу писать луа парсер с нуля
источник

T

The Dormouse in pro.lua
Правда, после этого будет стоять задача "собрать код обратно".
источник

S

Snusmumriken in pro.lua
Александр Караев
могу, но просто взять и распарсить строку, найдя в нём последнее выражение с точки зрения всей грамматики языка не кажется мне тривиальной задачей
Пардон, а у тебя там мультилайн-dostring?
источник

АК

Александр Караев... in pro.lua
The Dormouse
Правда, после этого будет стоять задача "собрать код обратно".
не, я понимаю, что можно взять готовые библиотеки :)
просто это выглядит оверинжинирингом для такой относительно простой задачи
источник

T

The Dormouse in pro.lua
Можно попробовать найти последнюю точку с запятой не внутри кавычек или коммента и вставить return после.
источник

АК

Александр Караев... in pro.lua
Snusmumriken
Пардон, а у тебя там мультилайн-dostring?
два режима - однострочный и мультилайн (построчно собираем, потом выполняем)
источник

S

Snusmumriken in pro.lua
Блен, надо вспомнить что я там делал у себя, там был довольно простой алгоритм
источник

S

Snusmumriken in pro.lua
По моему, вплоть до тупого дублирования:
1. Лоадстрингаем с наличием ретурна в самом начале, если что-то вернуло — выводим ответ
2. Если не сработало — лоадстрингаем без ретурна

Но там построчная фигня, и пересчитать результат несколько проще.
источник

CP

Companion Philipp in pro.lua
Snusmumriken
По моему, вплоть до тупого дублирования:
1. Лоадстрингаем с наличием ретурна в самом начале, если что-то вернуло — выводим ответ
2. Если не сработало — лоадстрингаем без ретурна

Но там построчная фигня, и пересчитать результат несколько проще.
Можно написать честный интерпретатор для подмножества Луа в виде калькулятора ))
источник

S

Snusmumriken in pro.lua
Можно но впадлу и медленно. Лоадстринг тащит.
источник

CP

Companion Philipp in pro.lua
Snusmumriken
Можно но впадлу и медленно. Лоадстринг тащит.
Ну, медленный разве что потому что поверх другого интерпретатора
источник

S

Snusmumriken in pro.lua
А то ещё в венгерскую нотацию переводить, потом калькулировать..
источник

S

Snusmumriken in pro.lua
Чтобы получить то же самое.

То есть, для общего обучения как бы ок, а для практического применения — уж лучше прям сам код исполнять, если на безопасность пофигу.
источник

АК

Александр Караев... in pro.lua
Snusmumriken
По моему, вплоть до тупого дублирования:
1. Лоадстрингаем с наличием ретурна в самом начале, если что-то вернуло — выводим ответ
2. Если не сработало — лоадстрингаем без ретурна

Но там построчная фигня, и пересчитать результат несколько проще.
как вариант, по крайней мере самые простые случаи типа "1" или "val" разрулит (как и любой одиночный стейтмент)
источник

S

Snusmumriken in pro.lua
Александр Караев
как вариант, по крайней мере самые простые случаи типа "1" или "val" разрулит (как и любой одиночный стейтмент)
При дёргании функций, может приводить к не очень приятным результатам, типа вот у нас ошибочный код:
> foo() + "lalala" + {12345}

Функция foo всё равно вызовется, а если это процедура — может привести к неприятным последствиям в виде двойного вызова с сайд-эффектами.
источник

АК

Александр Караев... in pro.lua
Snusmumriken
При дёргании функций, может приводить к не очень приятным результатам, типа вот у нас ошибочный код:
> foo() + "lalala" + {12345}

Функция foo всё равно вызовется, а если это процедура — может привести к неприятным последствиям в виде двойного вызова с сайд-эффектами.
так без return аналогично вызовется, не вижу разницы
источник

S

Snusmumriken in pro.lua
Так что для калькулятора — ок, для полноценного интерпретатора надо думать.
источник