Статьи

Краткое руководство: создание языковых инструментов в IDE NetBeans


IDE NetBeans является одним из основных бесплатных редакторов Java на рынке.
Фактически, его можно использовать для программирования на многих других компьютерных языках, таких как C / C ++, Ajax, Javascript.
IDE NetBeans можно расширить, добавив модули, которые добавляют новые функции. Итак … вы можете настроить редактор программ под свои нужды.

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

Оригинальная статья: http://hiperia3d.blogspot.com/2008/04/netbeans-tutorial.html (оригинальная статья имеет цвет, который облегчает чтение. Если у вас есть некоторые трудности с чтением здесь, вы можете пойти туда).

Процесс создания первого из модулей, составляющих мой X3DV Module Suite, был аналогичен описанному здесь.

Мы узнаем, как сделать модуль, который имеет эти функции:

  • Подсветка синтаксиса, специфичная для языка, который мы определим.
  • Завершение брекета и авто-отступ.
  • Иконки для новых файлов этого языка.
  • Чтобы иметь возможность создавать новые файлы, написанные на нашем новом языке.
  • Шаблон для новых файлов написан на этом языке.

Просто загрузите последнюю версию IDE NetBeans ( загрузите бета- версию среды IDE
NetBeans 6.1 ). Затем выполните все шаги, описанные здесь. Это руководство действительно для версии 6.1 среды IDE NetBeans, которая имеет много улучшений, облегчающих сборку модулей.


В этом уроке в качестве примера используется вымышленный язык Foo Language.
Я предлагаю следовать этому уроку, как есть, и позже адаптировать его к вашим потребностям. Это не очень техническое руководство, а краткое руководство, которое может быть очень простым для новичков.
 

Первые шаги с вашим модулем

Создайте новый проект NetBeans: выберите « Модули NetBeans» в « Категории» и « Модуль в проектах» : введите имя своего проекта, найдите каталог, в котором будет размещена его папка проекта, и пометьте его как автономный модуль . Заполните информацию для вашего модуля. Вам просто нужно заполнить два первых текстовых поля: изменить базу кодовых имен на подходящую для вашего модуля и выбрать отображаемое имя . Проект будет создан. Теперь мы добавим базовые: файлы поддержки для нового типа файлов.





Поддержка нового типа файлов

Над именем проекта щелкните правой кнопкой мыши и выберите « Создать / Тип файла» : в появившемся диалоговом окне необходимо ввести некоторые данные, чтобы среда IDE NetbBeans распознала новый тип файла. В MIME Type вы должны ввести text / x-, обычно сопровождаемый основным расширением типа файла. Почему это говорит текст / х- ? Как вы можете заметить, то, что вы вводите, не является истинным типом MIME. Для IDE все расширения, которые мы создаем, являются текстовыми файлами. В Extension (s) вы должны ввести их через пробел. В нашем примере, есть только один расширения для Foo файлов: .foo В префиксе имени класса





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

В Icon вы должны найти на своем жестком диске значок GIF размером 16×16 пикселей . В нашем примере это так: хотя в некоторых руководствах говорится, что также можно использовать изображения jpg и png, я обнаружил, что иногда они не отображаются. Поэтому я рекомендую использовать GIF-изображения, так как они менее подвержены ошибкам. Среда IDE скопирует ваш значок в каталог проекта. На этом этапе в IDE NetBeans будет создана группа файлов, которые будут открыты в редакторе кода. Закройте их все, вам не нужно редактировать их.




Теперь наш модуль готов распознавать и создавать новые типы файлов. Но мы хотим, чтобы новые файлы имели контент по умолчанию. Поэтому мы будем редактировать сгенерированный шаблон. Найдите файл с именем:

Отредактируйте его и напишите содержимое, которое вы хотите использовать по умолчанию при создании нового файла.
Найдите
слой XML в модуле. Файл XML Layer — это душа нашего модуля. Он контролирует большинство вещей, которые может делать модуль.
Найдите эти строки:

Следующим шагом является создание описания нового поддерживаемого типа файла, который будет отображаться при его создании в мастере создания файлов. Это описание будет сохранено в файле с именем «Description.html» (странно … а?).

Добавьте эту строку после выделенной синим цветом, изменив ее в URL вашего проекта:


<attr name = «templateWizardURL» urlvalue = «nbresloc: / org / yourorghere /

foolanguagesupport / Description.html» />

Эта строка, которую мы добавили, описывает, где находится описание нового файла. Щелкните правой кнопкой мыши по вашему проекту и выберите New / Other . Выберите Другое / HTML-файл . Назовите файл «Описание», а остальное оставьте как есть. Замените все содержимое сгенерированного файла следующим:




<! DOCTYPE HTML PUBLIC «- // W3C // DTD HTML 4.01 Transitional // EN»>

<html>

<head>

<title> </ title>

</ head>

<body>

Создает файл foo, который бесполезен совсем.

</ body>

</ html>

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

Создать языковую поддержку

Теперь, когда у нас есть новые распознанные файлы, мы добавим синтаксическую раскраску и другие функции в наш языковой модуль.
Чтобы иметь возможность поддерживать языковые функции, мы должны сделать следующее: щелкните правой кнопкой мыши по вашему проекту и выберите «Свойства». Свойства вашего модуля будут отображены. Нажмите на библиотеки (слева), а затем кнопку «Добавить …». В списке найдите запись под названием «Generic Languages ​​Framework» и добавьте ее. Теперь щелкните правой кнопкой мыши по вашему проекту и выберите New / Other . В категориях выберите «Разработка модуля», а справа выберите «Поддержка языков».Затем введите MIME Type и Extensions, как мы делали в первом разделе нашего урока.





Вы увидите, что уровень XML изменился, и теперь в него добавлено больше вещей. Между ними есть новый файл, который описывает наш язык. Этот файл называется «language.nbs».

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

Закройте все открытые файлы. Найдите файл с именем XML Layer и откройте его. Найдите линию, выделенную синим цветом на этом изображении, которая говорит


<file name = «language.nbs» url = «language.nbs»>

И заменить всю эту строку на:


<file name = «language.nbs» url = «language.nbs»>

<attr name = «icon» stringvalue =

«org / yourorghere / foolanguagesupport / foo_gif.gif» />

</ file>

Редактирование языкового файла

Файл language.nbs по умолчанию заполнен содержимым, которое может быть хорошей отправной точкой для языка сценариев. Для декларативных языков, таких как VRML или X3D, или языков разметки, таких как HTML или аналогичных, это содержимое не полезно.

В нашем примере языка Foo мы будем использовать очень простое определение языка. Таким образом, вы поймете основы определения языков.

Поэтому удалите все содержимое файла language.nbs и замените его следующим:

# To change this template, choose Tools | Templates
# and open the template in the editor.

# definition of tokens
TOKEN:header:( "# foo language v1.0"
)

TOKEN:line_comment: ( "#"[^ "\n" "\r"]* |
"//"[^ "\n" "\r"]* )

TOKEN:keyword:(
"foo_function" |
"foo_command"
)

TOKEN:field:(
"foo_value"
)

# all that follows is useful for mostly all languages
TOKEN:identifier: ( ["a"-"z" "A"-"Z"]
["a"-"z" "A"-"Z" "0"-"9" "_"]* )
TOKEN:number: (["0"-"9"]*)
TOKEN:operator: (
":" | "*" | "?" | "+" | "-" | "[" | "]" |
"<" | ">" |
"^" | "|" | "{" | "}" | "(" | ")" |
"," | "=" | ";" |
"." | "$"
)
TOKEN:string:(
"\""
(
[^ "\"" "\\" "\r" "\n"] |
("\\" ["r" "n" "t" "\\" "\'" "\""]) |
("\\" "u" ["0"-"9" "a"-"f" "A"-"F"]
["0"-"9" "a"-"f" "A"-"F"]
["0"-"9" "a"-"f" "A"-"F"]
["0"-"9" "a"-"f" "A"-"F"])
)*
"\""
)

TOKEN:string:(
"\'"
(
[^ "\'" "\\" "\r" "\n"] |
("\\" ["r" "n" "t" "\\" "\'" "\""]) |
("\\" "u" ["0"-"9" "a"-"f" "A"-"F"]
["0"-"9" "a"-"f" "A"-"F"]
["0"-"9" "a"-"f" "A"-"F"]
["0"-"9" "a"-"f" "A"-"F"])
)*
"\'"
)

TOKEN:whitespace:( [" " "\t" "\n" "\r"]+ )

# colors
COLOR:header:{
foreground_color:"orange";
background_color:"black";
font_type:"bold";
}

COLOR:line_comment:{
foreground_color:"#969696";
}

COLOR:keyword:{
foreground_color:"red";
font_type:"bold";
}

COLOR:field:{
foreground_color:"#25A613";
font_type:"bold";
}

# parser should ignore whitespaces
SKIP:whitespace

# brace completion
COMPLETE "{:}"
COMPLETE "(:)"
COMPLETE "\":\""
COMPLETE "\':\'"

# brace matching
BRACE "{:}"
BRACE "(:)"

# indentation support
INDENT "{:}"
INDENT "(:)"

Теперь создайте файл Foo, используя простой текстовый редактор, и сохраните его с расширением .foo.

Вот его содержимое:

# foo language v1.0

# comment
// another comment

foo_function {

foo_command ( foo_value 1 0 1 );

}

Теперь давайте посмотрим файл language.nbs и разберемся с основными частями.

TOKEN: header 🙁 «# foo language v1.0»
)

TOKEN: ключевое слово 🙁 «foo_function» | «foo_command» )






В
токенах являются словами , которые являются частью вашего языка, и вы хотите их цветными. Они определяют типы слов, которые имеют что-то общее в вашем языке. Вы группируете их в категорию, которая является токеном.

Слова заключены в двойные кавычки и разделены знаком | знак.

ЦВЕТ: заголовок: {
foreground_color: «orange»;
background_color: «черный»;
font_type: «жирный»;
}


ЦВЕТ: line_comment: {
foreground_color: «# 969696»;
}


Это определяет цвета, используемые для каждого токена. Вы можете указать больше свойств для цветов, но это основные. Как видите, все эти свойства очень легко понять по их собственным именам. Цвета могут быть указаны по их именам (хотя он распознает только несколько) или по их номеру.

# brace completion
COMPLETE "{:}"

Эти строки делают то, что когда вы печатаете {знак, редактор автоматически печатает} после вашей каретки, что ускоряет вашу работу и делает ее менее подверженной ошибкам.

# brace matching
BRACE "{:}"

# indentation support
INDENT "{:}"


Эти предложения означают, что когда вы помещаете каретку на фигурную скобку, соответствующая фигурная скобка будет выделена, и строки после этих знаков будут с отступом.

Финальная нота

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

С IDE NetBeans можно сделать гораздо больше. Я приглашаю просто протестировать его, присоединиться к огромному сообществу пользователей и испытать его самостоятельно.

— Джорди Р. Кардона —
X3D / VRML Worldbuilder
Java Programmer
X3DV Module Suite Developer.
Новости Hiperia3D

© 2008 Джорди Р. Кардона. Изображения и текст этого поста были добавлены автором в dzone. Автор предоставил dzone.com исключительное право использовать эти изображения и текст только с целью распространения этой статьи. Если вы хотите продвигать этот учебник, вы можете сделать ссылку на оригинал по адресу: http://hiperia3d.blogspot.com/2008/04/netbeans-tutorial.html.