Как по содержимому файла (без расширения) определить, что это за ЯП?

Собственно интересует определение С++, PHP и javascript. Я понимаю, что могут быть конструкции по которым однозначно не сказать, что это за язык. Понимаю, что можно самому искать в файла какие-либо специфические для языка конструкции, но вдруг есть уже готовые решения?
  • Вопрос задан
  • 3558 просмотров
Пригласить эксперта
Ответы на вопрос 4
@whats
файл php по <? ?>
java script - alert, Объявление переменных как var
C++ - #include

это лишь часть, в каждом языке есть для него специфичные конструкции. Другой момент что их может не быть в файле, поэтому однозначно определить нельзя. Но вы можете составить инструкции по языку и сделать массивы с накоплением. В каком будет больше совпадений, следовательно это будет этот язык
Ответ написан
Комментировать
@lookid
Почитайте про устройство компиляторов. Возможно как-то можно определить на одном из этапов компиляции. Посмотрите интерпретаторы рукописных языков, может там будет чего.

На вскидку можно так:
1. Проход удаляет комментарии
2. Проход по глобальным переменным (исключая функции)
Тут можно узнать какие-нибудь результаты по записи переменных и прочему.
3. Проход по функциям (исключая глобальные переменные)
Тут уже разбираете тело функции построчно и поблочно (например if, for, while)

В любом случае нужна функция, которая сможет распарсить блок { ... }.

На выходе будет что-то типа списка строк где задетектился тот или иной язык.
Javascript 1,2,3,4,5
php 6,7,8,9
c++ 2,4,5

Вот тут есть пример интерпретатора какого-то www.williamspublishing.com/Books/5-8459-0786-1.html#ogl

Глава 3
Реализация интерпретатора языка на Java 53
Ответ написан
@alexanius
Можете посмотреть на команду file, она даст неплохое первое приближение.
Ответ написан
AxisPod
@AxisPod
Собрать грамматики всех нужных языков и пробовать разбирать ими?
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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