2012-03-19 3 views
0

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

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

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

+0

Вы действительно спрашиваете, предоставляет ли Java API для каждого текстового редактора? Я думаю, что короткий ответ - «Нет». –

+0

Нет, я думаю, он хотел спросить, есть ли хотя бы один. – devsnd

+0

Я не знаю о Java, но вы могли бы использовать [Codeworker] (http://codeworker.free.fr/) – Eregrith

ответ

1

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

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

  1. ANTLR
  2. Lex
  3. Yacc
  4. JavaCC
+0

спасибо за ваш ответ, я знаю этот материал, поэтому я думал получить макросы и функции, используя api, предоставленный java из любого другого редактора программ. –

0

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

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

+0

Я использовал perl для создания собственного lexer, потому что я люблю регулярное выражение. Но регулярное выражение не может анализировать контекстно-свободную грамматику. –

+0

Но требование @ rockyit86 может быть выполнено в основном с помощью Perl. – AgA

+0

спасибо, но это не то, что я хотел, я уже сделал в java, используя выражения regualr, но хотел знать любой другой более простой подход, а не этот, –

0

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

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

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

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

+0

кажется очень сложный, я попробую его, или исправлю свой хакерский способ делать что-то, с большим количеством кода, разрывается здесь и там :) –

+1

Действительно сложный, но * разбор ** надежно ** C код * много более ** сложный **, чем вы представляете. Вы можете принять более простые способы (например, 'ctags'), если вам не нужен полноценный C-парсер. Ослабление ваших требований зависит от вас. –

+0

@ rockyit86 с использованием ctags или etags на самом деле хорошая идея, вы об этом подумали? – Ben

0

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

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

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

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

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