А никто не встречал каких-нибудь работ, связанных с парсингом неизвестных формальных языков? Интересует построение парсера, умеющего (к примеру) все C-подобные языки, даже не существовавшие на момент его разработки. Понятное дело, точного парсинга тут быть не может, но хотя бы на уровне распознавания основных C-like управляющих конструкций и операторов?
Нутром чую, что нужно смотреть в сторону машинного обучения (то есть нужно смотреть в сторону NLP), но может есть иные подходы? Какие-нибудь универсальные толерантные грамматики там, или ещё что-то такое?
... << RSDN@Home 1.0.0 alpha 5 rev. 0>>
Здравствуйте, kochetkov.vladimir, Вы писали:
KV>А никто не встречал каких-нибудь работ, связанных с парсингом неизвестных формальных языков? Интересует построение парсера, умеющего (к примеру) все C-подобные языки, даже не существовавшие на момент его разработки. Понятное дело, точного парсинга тут быть не может, но хотя бы на уровне распознавания основных C-like управляющих конструкций и операторов?
KV>Нутром чую, что нужно смотреть в сторону машинного обучения (то есть нужно смотреть в сторону NLP), но может есть иные подходы? Какие-нибудь универсальные толерантные грамматики там, или ещё что-то такое?
Не нужно ни NLP, ни машинного обучения — всё намного проще:
https://web.stanford.edu/~mlfbrown/paper.pdf
Здравствуйте, Code Digger, Вы писали:
CD>Не нужно ни NLP, ни машинного обучения — всё намного проще: https://web.stanford.edu/~mlfbrown/paper.pdf
Похоже, именно то, что нужно. Спасибо!
Здравствуйте, kochetkov.vladimir, Вы писали:
KV>А никто не встречал каких-нибудь работ, связанных с парсингом неизвестных формальных языков? Интересует построение парсера, умеющего (к примеру) все C-подобные языки, даже не существовавшие на момент его разработки. Понятное дело, точного парсинга тут быть не может, но хотя бы на уровне распознавания основных C-like управляющих конструкций и операторов?
Мне тема так поравилась что подумал, может статью написать на эту тему
KV>Нутром чую, что нужно смотреть в сторону машинного обучения (то есть нужно смотреть в сторону NLP), но может есть иные подходы? Какие-нибудь универсальные толерантные грамматики там, или ещё что-то такое?
А я нутром другое чую: надо отключить обработку ошибок, переключить ее в режим восстановления после ошибок и так продолжать парзинг. Описать возможные точки ветвления в грамматике/ах и главое ситуации восстановления на ту или иную точку в грамматике/ветку в SyntaxTree/AST
И потом это попробовать*) на незнакомых языках. Только где ж их взять? Подсматривать в будущее пока не научились... (хотя была идея односторонней посылки сигналов в прошлое, но оказалось невозможно)
*) пробовать и допиливать: добавлять гибкости в восстановлении-после-ошибок, либо, если выяснится что язык "слишком незнакомый", т.е. слишком мутировал от известных-заданных, то тогда, наоборот, отказаться от жесткого задания ветвления по терминалам
А что у вас за масса незнакомых языков-то? И откуда взялась