Задать вопрос

Можно ли написать интерпретатор PHP на C#?

Интересует вопрос, возможно ли написать интерпретатор PHP с поддержкой ООП и половине стандартной библиотеке(работа с файлами, mysql, ini, xml, json, строки, массивы) на C# за 1.8 месяца?
  • Вопрос задан
  • 5005 просмотров
Подписаться 4 Оценить 2 комментария
Решения вопроса 2
Fesor
@Fesor
Full-stack developer (Symfony, Angular)
Ну давайте думать и смотреть. Написать лексер/парсер в ast можно за неделю, если вы имели хотя бы немного опыта в этом. Затем вам нужно как-то упростить дерево, транслировать его в опкоды (с тем набором функционала что вы описали выполнять рекурсивно дерево уже не выгодно, ибо слишком много нужно имплементить), на это уже нужно будет месяца 2-3, и это на вскидку, если выкинуть ООП то можно уложиться в недели 3. Затем идет очередь виртуальной машины - тут все просто. номер опкода - его реализация - результат. Это дело можно написать достаточно быстро, за неделю-две.

все описанное выше это очень оптимистично, с условием что вы знаете как реализован сам php, с учетом того что каким-то функционалом придется пожертвовать. Так что, очень маловероятно что вы успеете за 1,8 месяца, хотя это возможно (пускай и сложно).

p.s. Когда-то обучения ради писал на .NET итрерпритатор javascript (сильно урезанный), на что ушло где-то 240 часов. Но как по мне прототипное наследование реализовать чуть проще.

p.p.s. На мой взгляд вам стоит обратить внимание на llvm, существуют худо бедно рабочие трансляторы zend-овских опкодов в IR, готовые трансляторы самого php (правда сильно урезанные) в llvm-овский IR...
Ответ написан
@user4291
Получится интерпретатор на интерпретаторе. Такое лучше на C/C++ писать.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@lookid
Всё сведется к копипастам огромных кусков кода и мольбе, что бы не упало на защите.
Вот пример Jint - Javascript Interpreter for .NET: jint.codeplex.com
Можете скачать, wc -l по каталогам и прикинуть сколько вы это будете только "набирать".
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы