Я создаю приложение, которое получает исходный код для ввода и анализирует несколько аспектов кода. Он может принимать код из многих общих языков, например. C/С++, С#, Java, Python, PHP, Pascal, SQL и т.д. (Однако многие языки не поддерживаются, например, Ada, Cobol, Fortran). Как только язык известен, мое приложение знает, что делать (у меня разные обработчики для разных языков).
В настоящее время я прошу пользователя ввести язык программирования, на котором написан код, и это подвержено ошибкам: хотя пользователи знают языки программирования, небольшой процент из них (в редких случаях), выберите неверный вариант из-за безрассудства, и это нарушает систему (т.е. мой анализ не работает).
Мне кажется, что должен быть способ выяснить (в большинстве случаев), что такое язык, из самого входного текста. Несколько примечаний:
- Я получаю чистый текст, а не имена файлов, поэтому я не могу использовать расширение как подсказку.
- Пользователь не обязан вводить полные исходные коды и может также вводить фрагменты кода (т.е. часть включения/импорта может не включаться).
- мне ясно, что любой алгоритм, который я выбираю, не будет на 100% доказан, конечно, для очень коротких входных кодов (например, которые могут быть приняты как Python, так и Ruby), в каких случаях мне все равно потребуется помощь пользователя, однако Я хотел бы свести к минимуму вовлеченность пользователей в процесс, чтобы свести к минимуму ошибки.
Примеры:
- Если текст содержит "x- > y()", я могу точно знать, что это С++ (?)
- Если текст содержит "public static void main", я могу точно знать, что это Java (?)
- Если текст содержит "для x: = y to z do begin", я могу точно знать, что это Pascal (?)
Мой вопрос:
- Вы знакомы с какой-либо стандартной библиотекой/методом для автоматического определения того, что является языком исходного кода?
- Каковы уникальные коды "токенов", с которыми я мог бы отличить один язык от другого?
Я пишу свой код в Python, но я считаю, что этот вопрос является агностиком.
Спасибо