Разделы
  • Фантастика
  • Детективы
  • Поэзия
  • Приключения
  • Детские
  • Любовные книги
  • Периодика
  • Религия
  • Новые книги
    Епископ Кассиан - Христос и первое христианское Поколение
    Епископ Вениамин (Пушкарь) - Священная Библейская история Нового Завета
    Епископ Вениамин (Пушкарь) - Священная Библейская История Ветхого Завета
    Епископ Александр (Милеант) - Таинства Церкви
    Епископ Александр (Милеант) - Священное писание Нового Завета
    Епископ Александр (Милеант) - Священное Писание Ветхого Завета
    Епископ Александр (Милеант) - Изьяснение Божественной Литургии
    Житинский - Японский бог
    Житинский - Языковой барьер
    Житинский - Элтон Джон
    Популярные книги
    Журнал Вокруг Света 3 за 2005 год
    Журнал Вокруг Света 12 за 2004 год
    Журнал Вокруг Света 1 за 2005 года
    Журнал Вокруг Света 11 за 2004 год
    Журнал Вокруг Света 6 за 1998 год
    Журнал Вокруг Света 11 за 2003 год
    Житинский - На холмах Мисуно
    Житинский - Японский бог
    Журнал Вокруг Света 1 за 1999 год
    Житинский - Китайская мышь
    Лучшие книги
    Желязны - The Three Descents Of Jeremy Baker I
    Житинский - Глагол инженер
    Журнал Вокруг Света 2 за 2001 год
    Журнал Вокруг Света 12 за 1997 год
    Житинский - Прах
    Журнал Вокруг Света 7 за 1995 год
    Житинский - Прыжок в висоту
    Журнал Компьютерра 33 от 13 сентября 2005 года
    Журнал Вокруг Света 10 за 2004 год
    Желязны, Плахта - Год Плодородного Зерна
    Cтатистика
     

    Генераторы синтаксических анализаторов

    1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 
    35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 
    70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 
    105 

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

    Генератор синтаксических анализаторов (ГСА) – это утилита, на вход которой поступает файл с описанием правил грамматики некоторого языка, называемого целевым. В результате работы генератор формирует исходные тексты на C++ (или, допустим, Java), содержащие код для обработки конструкций целевого языка и, возможно, для формирования объектной модели. Написание собственного ГСА «с изюминкой» долгое время являлось престижной академической работой в области computer science, поэтому число подобных инструментов сегодня исчисляется десятками. Этот факт даже получил отражение в названиях многих ГСА: «еще один компилятор компиляторов» (yacc), «еще один инструмент для распознавания языков» (ANTLR) и т. п.

    В качестве примера приведем фрагмент грамматики ANTLR для языка арифметических выражений, содержащих числа, а также операции ‘+’ и ‘*’. Хотя подобная запись и выглядит страшновато, при наличии определенных навыков она воспринимается достаточно легко.

    expr : mexpr (‘+’ mexpr)* ‘;’!;

    mexpr : number (‘*’ number)*;

    number : (‘0’..’9’)+;

    Несмотря на ряд трудностей, связанных с повсеместным применением ГСА, на сегодняшний день они являются распространенным средством автоматизации разбора исходных текстов*. Например, распознаватель SQL для широко известной открытой СУБД PostgreSQL разработан при помощи пары lex и yacc. Интересно отметить, что эта «сладкая парочка» оказала существенное влияние на открытый софт, породив целое направление так называемых «малых языков» (по сути своей являющихся DSL), с которыми пользователи *nix-систем часто имеют дело при редактировании конфигурационных файлов.

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

    baltchor.com
    Главная | Книги | Обратная связь
    © 2009 Книги на сайте представлены исключительно для ознакомления.