мы можем получить доступ к любому редактору программ c через Java - PullRequest
0 голосов
/ 19 марта 2012

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

Так как эта работа уже сделана редакторами, было бы легко, безболезненно начать строить грамматику.

такой подходбыть простым, но не может найти таких редакторов, у которых есть apis для доступа к нему через java.

Ответы [ 4 ]

1 голос
/ 19 марта 2012

То, что вы ищете, существует

Вы могли видеть,

  1. ANTLR
  2. Lex
  3. Yacc
  4. JavaCC
0 голосов
/ 19 марта 2012

Есть несколько IDE или программистов-редакторов с парсерами C, написанными на Java.Поэтому не стоит слишком увлекаться (известные последние слова: -)

  • Eclipse CDT , в котором есть несколько книг о том, как писать и использовать плагины / расширения
  • NetBeans

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

Их редакторы C имеют довольно хорошее понимание синтаксиса C, потому что они могут сворачивать функции.Редактор Eclipse C отслеживает определения, и я думаю, что NetBeans тоже.

Лично, если бы мне нужно было проанализировать C, чтобы получить тела функций, а код синтаксически правильный, его было бы не слишком сложно использовать.анализатор-разработка-инструменты.IIRC ANTLR может уже иметь грамматику языка Си.

0 голосов
/ 19 марта 2012

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

Преимущество настройки GCC для ваших целей заключается в том, что вы будете работать с точными внутренними представлениями GCC. Однако GCC является сложным, его расширение требует некоторой работы (в частности, частичного понимания сложных внутренних представлений и проходов GCC).

(Это возможно для функций, переменных и классов, возможно, не для макросов сегодня с GCC 4.7, так как препроцессор GCC еще не имеет подключаемых модулей)

И я не уверен, что вы правы, полагая, что geany имеет полный C-парсер. Я полагаю, что у него есть некоторая вещь, основанная на регулярном выражении, например, игнорирует любые приемы препроцессора. Я не думаю, что geany знает, например, функции или переменные, созданные путем расширения сложных макросов (например, некоторые макросы реализации GTK).

0 голосов
/ 19 марта 2012

Я уже использовал lex, flex, yacc, bison и т. Д. Но ничто не может победить Perl за это.Более того, регулярные выражения Perl можно использовать в Java, PHP.

По крайней мере, использовать Perl как регулярное выражение, чтобы сделать это, а не писать в yacc, очень сложно для поддержки, и это легко сделать в несколько строк в Perl или PHP.

...