Как лучше сделать свой Интерпретатор или компилятор на php?
Всем привет.
!нужен совет, код не требуется.
В голову стрельнуло сделать свой ЯП с минимальным набором функций на php. По задумке, есть поле в которое мы пишем код и текст. На выход получаем динамическую html страницу Допустим:
/старт
Привет мир,
/$а = random(1,5)
/если &а == 5
Привет
/Иначе
Пока
/конец
А потом надо вывести это все на экран, согласно условий и хранения переменных, разумеется логика может быть сложнее, с кнопками, циклами и т.д.
Принцип, думаю понятен, собственно вопрос, как лучше это реализовывать в плане производительности, безопасности и прочих условий. Теоритический материал, что можно найти в гугле, я получил, теперь интересно мнение экспертов:)
Интересует чистый вариант php, без готовых решений. Хотя в целом и библиотеки можно посмотреть, но которые просто облегчают, а не большую часть на себя берут
Это проект для себя, ни для каких-то целей, коммерции и т.д., просто тренировка своих сил.
Adamos, отличный комментарий, а главное очень много полезной информации:)
По вопросу то есть что-то?
Напоминаю, я не прошу готовый код, или даже его набросок, мне просто нужно от "экспертов" людей,которые знают php по крайней мере, лучше меня, совет, как лучше это сделать. То есть не как сделать, а как лучше, правильнее, что ли.
Если вопрос вызывает какое-то предвзятое чувство, оскорбление Ваших чувств, больно глазам читать, или Вы не понимаете, как вообще можно такое писать и спрашивать и не хотите никак отвечать по существу, то просто прошу пройти мимо, ибо не тратить в первую очередь Ваше драгоценное время.
Спасибо за понимание, добра вам)
Вместо того чтобы тратить столько слов на гневную отповедь, лучше бы потратил хотя бы половину на описание того что понял из своих изысканий и сформулировал какой-то более конкретный вопрос.
потому что сейчас ответ действительно, можно дать только такой же, как вопрос: пиши свой парсер.
Максим, что может быть по этому "вопросу"?
"Хочу сделать комбайн из велосипеда, принцип, думаю, понятен...". Ага, понятен.
Ничего даже не пытался почитать по тому, как делаются интерпретаторы ЯП, но фантазий полон череп, спрошу-ка я "экспертов", как мне правильно палочкой махнуть.
FanatPHP, нет, Вы что? Гневного ничего не было и даже в мыслях. Всего лишь, беспокоюсь, чтобы человек не тратил время на меня если ему доставляет это дискомфорт.
Если нужна дополнительная информация, я же не против, только скажите. Тут сложно предоставить информацию именно вопросом не получается что-то, так как я еще не начал, хотел сначала узнать полностью всю теорию и выбрать наиболее оптимальное решение
Adamos, по существу теперь, что я читал в гугле и на Хабре. Точнее, что я узнал. Варианты решения моей задачи
1. Создавать файл и перебирать его на совпадения и генерировать код
2. Lexer и parser в официальной документации php
3. Где-то на просторах было откопано, что нормально для этого использовать базу данных для хранения информации, в виде массивов, т.е. название столбца variables в которой хранятся все забитые переменные для пользователя в виде ключ=>значение
По поводу информации, как создавать интерпретаторы яп, было получена только одна информация в разных формулировках:
1) токенизации
2) парсинг токенов
3) вывод
Adamos, по поводу как мне правильно палочкой махнуть, ну бред же. Я прошу не как правильно палочкой махнуть. А какое заклинание с помощью этой палочки можно сотворить для более элегантного решения. Не придймывайте) я читал, смотрел, да я не до конца понял, да я хочу сделать то, что никогда не делал, и для меня является сложным, потому что хочу развиваться и с простым мне уже надоело возиться... я не собираюсь писать новый яп.
Моя задача, чтоб было несколько логических условий, переменные и какую-то логику примитивную можно написать, и чтоб это не тормозило.
чтоб было несколько логических условий, переменные и какую-то логику примитивную можно написать
Да. Для этого - читай, как делаются интерпретаторы, и пробуй сделать так же. Пока не попробуешь - можешь даже не мечтать, что что-то понял.
и чтоб это не тормозило
А вот это - никому не нужно. Ты вместо того, чтобы сделать хоть что-нибудь, размечтался о том, чтобы сделать все круто. Не умея и даже не пытаясь. Прокрастинация чистой воды, заведомо ведущая к нулевому результату.
Есть. Раньше это называлось маниловщиной.
Кому надо -тот делает и по ходу задаёт конкретные вопросы.
А вот так вот, чисто зайти поговорить - это именно про поговорить :)
Не буду задавать вопрос зачем заниматься такой херней.
Советы
* первое - пили подробное тз, что хочешь получить, какой уровень поддержки команд php, без этого делать что либо запрещается, а точнее адекватного результата точно не получишь
* второе - пили интерпретатор - это проще в тысячу раз, да медленно, но если задаешь подобные вопросы, остальные варианты скорее всего не для тебя
Если все же надо быстро и без напряга - пили транслятор в другой язык программирования, например тот же php и исполняй в eval
FanatPHP, если ты сам конветируешь один язык в другой, на лексемы разбиваешь, то уж отфильтровать список методов и наложить ограничения на параметры для тебя не составит труда
eval отличный инструмент и как с любым хорошим инструментом, нужно просто правильно им пользоваьтся
p.s. я сначала хотел предложить конвертировать код в c++ и компилировать его,а после запускать - это еще веселее.