🙂
Итак, поехали…
Что такое 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 * .