Статьи

ANTLR: начало работы

Этот пост знакомит вас с основами ANTLR. Ранее мы узнали о настройке ANTLR как внешнего инструмента. RECAP! Это здесь: ANTLR Внешний инструмент
🙂
Итак, поехали…

Что такое ANTLR?

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

Какие могут быть целевые языки?

• Action Script, Ada
• C
• C #; C # 2
• C # 3
• D
• Emacs ELisp
• Цель C
• Ява
• Java Script
• Python
• Рубин
• Perl6
• Perl
• PHP
• Оберон
• Скала
 
Что поддерживает ANTLR?

• Конструкция дерева
• Восстановление после ошибок
• Обработка ошибок
• прогулка по дереву
• перевод
 
Какую среду он поддерживает?

ANTLRWorks — это IDE для ANTLR. Это графический редактор и отладчик грамматики, написанный Жаном Бове с использованием Swing.

Что за ANTLR можно использовать?

• «РЕАЛЬНЫЕ» языки программирования
• доменные языки [DSL]  
Кто использует ANTLR?

• Языки программирования: Boo, Groovy, Mantra, Nemerle, XRuby и т. Д.
• Другие инструменты: HIbernate, Intellij IDEA, Jazillian, JBoss Rules, Keynote (Apple), WebLogic (Oracle) и т. Д.
 
Где это можно посмотреть на АНТЛР?

Вы всегда можете следовать здесь http://www.antlr.org
• загрузить ANTLR и ANTLRWorks, которые являются бесплатными и с открытым исходным кодом
• документы, статьи, вики, список рассылки, примеры…. Вы можете поймать все здесь!

Гребите свою лодку…
 

  • Основные условия

Lexer : преобразует поток символов в поток токенов.
Parser : процессы токенов, возможно создание AST
Абстрактное синтаксическое дерево (AST) : представление промежуточного дерева проанализированного ввода, которое проще обрабатывать, чем поток токенов. Это может также быть обработано многократно.
Парсер дерева : обрабатывает AST
Шаблон строки : библиотека, которая поддерживает использование шаблонов с заполнителями для вывода текста

  • Общие шаги

• написать грамматику в один или несколько файлов
• Написание шаблонов строк [необязательно] • Отладка грамматики с помощью ANTLRWorks
• генерировать классы из грамматики
• Написать приложение, которое использует сгенерированные классы
• Подать текст приложения, который соответствует грамматике


Чуть дальше …

Давайте напишем простую грамматику, которая состоит из
• Лексер
• Парсер
Lexer: разбивает входной поток на токены
Давайте возьмем пример простого объявления типа в C вида «int a, b;» или «int a;» и то же самое с поплавком. Как мы видим, мы можем написать лексер следующим образом:

//TestLexer.g
грамматика TestLexer;
ID: (‘a’ .. ‘z’ | ‘A’ .. ‘Z’ | ‘_’) (‘a’ .. ‘z’ | ‘A’ .. ‘Z’ | ‘0 ′ ..’ 9 ‘|’ _ ‘| ‘|’ а».. ‘Z’ | ‘A’ .. ‘Z’) *. КОММА: ‘,’;
ТОЧКА С ЗАПЯТОЙ:’;’;
Тип данных: ‘int’ | «плывут»;

Как мы могли видеть, это были персонажи, которые должны были быть преобразованы в токены.
Итак, теперь давайте напишем некоторые правила, которые обрабатывают эти сгенерированные токены и могут ли они соответствующим образом создать дерево анализа.

//TestParser.g
грамматика TestParser;
options {language: Java;}
decl: идентификатор типа данных (‘,’ идентификатор) *;

Запуск ANTLR для грамматики просто генерирует лексер и парсер, TestParser и TestLexer. Чтобы на самом деле попробовать грамматику на некотором входе, мы
нужен тестовый стенд с методом main () следующим образом:
// Test.java

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
import org.antlr.runtime.*;
public class Test {
 
public static void main(String[] args) throws Exception {
 
// Create an input character stream from standard in
ANTLRFileStream input = new ANTLRFileStream("input"); // give path to the file input
// Create an ExprLexer that feeds from that stream
TestLexer lexer = new TestLexer(input);
// Create a stream of tokens fed by the lexer
CommonTokenStream tokens = new CommonTokenStream(lexer);
// Create a parser that feeds off the token stream
TestParser parser = new TestParser(tokens);
// Begin parsing at rule decl
parser.decl();
}}

Мы увидим, как создать AST и пройтись по дереву в следующем сообщении в блоге …
Счастливого обучения … 🙂

Ссылка: Начало работы с ANTLR: основы от нашего партнера по JCG Swathi V в блоге * Techie (S) pArK * .