Код для определения языка программирования в текстовом файле [закрыто]

16
задан PeterK 30 August 2010 в 12:39
поделиться

7 ответов

У вас возникла проблема с классификацией документов. Я предлагаю вам прочитать о наивных байесовских классификаторах и машинах опорных векторов. В статьях есть ссылки на библиотеки, реализующие эти алгоритмы и многие из них имеют C++ интерфейсы.

11
ответ дан 30 November 2019 в 21:19
поделиться

Так как список языков, как известно заранее вы знаете синтаксис / грамматику для каждого из них. Следовательно, вы можете, в качестве примера, чтобы написать функцию, чтобы извлечь зарезервированные слова из предоставленного исходного кода.

Построить бинарное дерево, которое будет иметь все зарезервированные слова для всех языков, которые вы поддерживаете. А потом просто ходить, что дерево с извлеченными зарезервированными словами из предыдущего шага.

Если в конце концов у вас есть только одна возможность слева - это ваш язык. Если вы дойдете до конца программы слишком рано - тогда (откуда вы остановились) - вы можете проанализировать свою позицию на дереве на работу, какие языки по-прежнему possibitilies.

1
ответ дан 30 November 2019 в 21:19
поделиться

Одно простое решение, которое я мог придумать, состоит в том, что вы можете просто определить ключевые слова, используемые в разных языках. Каждое идентифицированное слово будет иметь оценку +1. Затем вычислите отношение = идентифицированные_слова / общее_слово. Язык, набравший наибольшее количество баллов, становится победителем. Конечно, есть проблемы, такие как использование комментариев и т.д. Но я думаю, что это очень простое решение, которое должно работать в большинстве случаев.

7
ответ дан 30 November 2019 в 21:19
поделиться

Возможно, вы можете попытаться подумать о различиях языков и смоделировать их с помощью двоичного дерева, например «найдена ли функция X?», если да, действуйте в одном направлении, если нет, действуйте в другом направлении. .

Эффективно построив это дерево поиска, вы могли бы получить довольно быстрый код.

0
ответ дан 30 November 2019 в 21:19
поделиться

Посмотрите nedit. Он имеет систему распознавания подсветки синтаксиса, расположенную в разделе Подсветка синтаксиса->Шаблоны распознавания. Вы можете просмотреть примеры паттернов распознавания здесь или скачать программу и ознакомиться со стандартными.

Вот описание системы подсветки.

1
ответ дан 30 November 2019 в 21:19
поделиться

Если вы знаете, что исходные файлы будут соответствовать стандартам, расширения файлов будут уникальными практически для каждого языка. Я предполагаю, что вы уже рассмотрели это и исключили это на основании какой-то другой информации.

Если вы не можете использовать расширения файлов, лучше всего будет найти вещи, которые наиболее различаются между языками, и использовать их для определения типа файла. Например, синтаксис операторов цикла for не будет сильно различаться между языками, но операторы package include должны. Если у вас есть файл, содержащий java.util.*, вы знаете, что это файл java.

2
ответ дан 30 November 2019 в 21:19
поделиться

Извините, но если вам нужно разобрать тысячи файлов, то лучше всего смотреть на расширение файла. Не переусердствуйте с простой проблемой и не ставьте обременительные требования к простой задаче.

Похоже, у вас есть тысячи файлов с исходным кодом, и вы понятия не имеете, на каком языке программирования они были написаны. В какой среде программирования вы работаете? (Исключая возможность искусственного требования к домашнему заданию). Я имею в виду одну из основ разработки программного обеспечения, на которую я всегда могу положиться, это то, что файлы кода С++ имеют расширение .cpp, что файлы кода Java имеют расширение .java, что файлы кода c иметь расширение .c и т. д. Ваша компания играет быстро и свободно с этими стандартами? Если бы это было так, я бы очень волновался.

3
ответ дан 30 November 2019 в 21:19
поделиться
Другие вопросы по тегам:

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