![]() |
|
|
![]()
|
|
| Alexeis |
|
|||
![]() Амеба Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 13 Всего: 459 |
Определить что в тексте код это одна задача, но определить тип кода это задача намного более сложня.
Дело в том, что одни и те же термины часто встречаются в разных языках. Например оператор for есть почти во всех языках. Более того ключевые слова одного языка легко могут используются в качестве идентификатора в другом. Т.о. наличие определеных ключевых слов не может определять тип языка. С++ и С++ Builder, отличить будет почти невозможно. Удаление таких "опасных" терминов приводит к тому, что в словарях остаются малораспространеные термины, поиск которых малоэффективен. В этом смысле использование регулярных выражений бессмыслено. В связи с этим вижу два пути решеня. 1) Класический - статистика, т.е. статистика появления тех или иных терминов, причем не только ключевых слов. Для этого требуется перелопатить море кода для каждого языка и выделить около сотни самых распространеных выражений. При этом в каждом фрагменте кода надо считать число совпадений со словарем каждого языка, и там где совпадений будет больше тот язык и будет считатся определеным. Такой подход требует огромное количество статистических данных и умеренных вычислительных затрат, поскольку алгоритмы поиска можно неплохо оптимизировать. Вместе с тем результат может быть надежным на достаточно большом фрагменте данных. 2) Второй путь использовать исключительные особенности языком, так, например, поиск выражения ':=.*?\;' - даст положительный результат только в делфи, анологично '^\s*\$[_A-Za-z]+w*?\s*=' довольно часто появляется в PHP, но не может встречатся ни в одном другом языке, разве что в коментарии, которые естествено надо удалить из анализируемого текста. Этот путь достаточно прост, но при этом и достаточно ненадежен, поскольку таких выражений не так уж много, и их появление не обязательно в коротком коде. Статистика более надежная вещь Оба метода требуют знания специфики языка. Жду предложений может кто придумает третий вариант, или подскажет какой из методов получше. -------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
| R.M. |
|
|||
![]() Анархист ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2164 Регистрация: 8.6.2005 Где: Питер Репутация: 1 Всего: 30 |
ИМХО 2 метод лучше и проще. А у C++ и C++ Builder разная подсветка?
-------------------- Помнишь как бодрили дискотеки прошлого века? Теперь стул, компьютер и нету человека. Nokia LifeStyle - Всё для смартфонов Nokia |
|||
|
||||
| sergejzr |
|
|||
![]() Un salsero Профиль Группа: Админ Сообщений: 13285 Регистрация: 10.2.2004 Где: Германия г .Ганновер Репутация: 35 Всего: 360 |
||||
|
||||
| Alexeis |
|
|||
![]() Амеба Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 13 Всего: 459 |
Мне тож он нравится, но реализовать его я не смогу -------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
| ivashkanet |
|
|||
![]() Кодю потиху ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3684 Регистрация: 23.2.2006 Где: Гомель, Беларусь Репутация: 3 Всего: 149 |
А зачем определять тип кода? Ведь главное же предупредить! Юзер сам сможет выбрать нужный тип кода А если не может, то его нужно бить Кроме того за каждым разделом закреплен конкретный тип кода. Можно его брать. Для С-подобных языков очень удачным будет поиск "{", "}". Для VB -- ключевое слово End И т.д. Любой более-менее большей код будет содержать эти конструкции. А если не содержит, то его можно и не подсвечивать. + В этом случае отпадет (почти) проблемма с кодом внутри строки |
|||
|
||||
| Mayk |
|
|||
![]() ^аВаТаР^ сообщение>> ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2616 Регистрация: 22.5.2005 Где: за границей разум а Репутация: 2 Всего: 134 |
да никакая почти #define встречается даже в некоторых ассемблерах (я знаю целый один - gnu asm). есть в java. Есть в sh скриптах. а у меня вообще цвета форсированные на белый шрифт и зелёный фон =) -------------------- Здесь был кролик. Но его убили. Человеки < кроликов, йа считаю. |
|||
|
||||
| Alexeis |
|
|||
![]() Амеба Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 13 Всего: 459 |
К сожалению в делфях End не менее распространен. Ну этот вопрос вроде как закрыли, администрация его не поддержала. Определять тип кода предложил sergej.z, если пользователь не указал тип подсветки. Добавлено @ 14:53 java редко появляется в центре помощи, мало кто из навичков пишет на jave, тем реже будут проблемы поскольку забывают ставить тип не все. Сильно отличается java подсветка от C++? -------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
| ivashkanet |
|
|||
![]() Кодю потиху ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3684 Регистрация: 23.2.2006 Где: Гомель, Беларусь Репутация: 3 Всего: 149 |
C большей буквы? Без точки или точки с запятой (вроде) в конце? |
|||
|
||||
| Alexeis |
|
||||
![]() Амеба Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 13 Всего: 459 |
А что Visual Basic регистро зависимый? Встречается и без точки с запятой, если перед другим ендом или перед until или (тут уже обязательно)
и еще некоторые другие случаи. Добавлено @ 15:18 К сожалению фигурные скобки это многострочный коментарий в Delphi. -------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
||||
|
|||||
| ivashkanet |
|
|||
![]() Кодю потиху ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3684 Регистрация: 23.2.2006 Где: Гомель, Беларусь Репутация: 3 Всего: 149 |
Нет, но студия, например, упорно заменяет первую букву клчевых слов на большую А код обычно из нее копируют Добавлено @ 15:33 проюежался по исходникам VB на форуме. Не нашел пи одного end с маленькой буквы. |
|||
|
||||
| Alexeis |
|
|||
![]() Амеба Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 13 Всего: 459 |
А если участник набирает код прямо в браузере? тогда врядли выйдет, но этот вариант все же неплохой, поскольку, я не встречал ни где в чужих исходниках по делфи "End"(в своих бывает Добавлено @ 16:39 Хотелось бы узнать еще соображения sergej.z, поскольку я даже не представляю в каком виде это будет внедрятся. -------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
| R.M. |
|
|||
![]() Анархист ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2164 Регистрация: 8.6.2005 Где: Питер Репутация: 1 Всего: 30 |
Можно проверять на то что перед ними. И на то что в них. Комменты обычно пишутся на русском, условия на английском. -------------------- Помнишь как бодрили дискотеки прошлого века? Теперь стул, компьютер и нету человека. Nokia LifeStyle - Всё для смартфонов Nokia |
|||
|
||||
| Alexeis |
|
|||
![]() Амеба Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 13 Всего: 459 |
можно язык, а можно и ключевые слова в фигурных скобках! Зачет! с ассемблером я думаю сложности не будет. Добавлено @ 12:43 sergej.z, отзовись, какой вариант принимаем? -------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
| Girder |
|
|||
![]() Лентяй 2 ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1993 Регистрация: 12.5.2004 Репутация: 25 Всего: 155 |
Не... не только.
-------------------- Как слышим, так и пишим. Истина где-то там... |
|||
|
||||
| Alexeis |
|
|||
![]() Амеба Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 13 Всего: 459 |
-------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
![]()
|
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Обсуждение форума | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |