ЗОЛОТО (парсер) - GOLD (parser)
| Разработчики) | Девин Кук и 54 других участника |
|---|---|
| Окончательный релиз | 5.2.0 / 18 августа 2012 г .
|
| Операционная система | Окна |
| Тип | Парсер LALR |
| Лицензия | zlib License ( бесплатное программное обеспечение ) |
| Веб-сайт |
goldparser |
GOLD - это бесплатная система синтаксического анализа , предназначенная для поддержки нескольких языков программирования.
Дизайн
Система использует DFA для лексического анализа и алгоритм LALR для синтаксического анализа. Оба эти алгоритма являются конечными автоматами, которые используют таблицы для определения действий. GOLD разработан на основе принципа логического разделения процесса создания таблиц синтаксического анализа LALR и DFA от фактической реализации самих алгоритмов синтаксического анализа. Это позволяет реализовать синтаксические анализаторы на разных языках программирования, сохраняя при этом одни и те же грамматики и процесс разработки.
Система GOLD состоит из трех логических компонентов, «Builder», «Engine» и определения файла «Compiled Grammar Table», который функционирует как посредник между Builder и Engine.
Строитель
Builder - это основной компонент и главное приложение системы. Builder используется для анализа синтаксиса языка (заданного как грамматика) и построения таблиц LALR и DFA . Во время этого процесса будет сообщено о любых двусмысленностях в грамматике. По сути, это та же задача, которую выполняют компиляторы-компиляторы, такие как YACC и ANTLR .
После успешного построения таблиц синтаксического анализа LALR и DFA построитель может сохранить эти данные в файл скомпилированной таблицы грамматики. Это позволяет Строителю повторно открывать информацию позже или использовать ее в одном из Механизмов. В настоящее время компонент Builder доступен только для 32-разрядных операционных систем Windows .
Некоторые особенности Builder:
- Бесплатная лицензия
- Просмотр состояния
- Комплексное тестирование
- Мастер тестирования нескольких файлов
- Создавать веб-страницы (включая диаграммы синтаксиса с гиперссылками)
- Создавайте скелетные программы с помощью шаблонов
- Экспорт грамматик в YACC
- Экспорт таблиц в XML или форматированный текст
Скомпилированный файл таблицы грамматики
Файл Compiled Grammar Table используется для хранения табличной информации, созданной Builder.
Двигатели
В отличие от Builder, который работает только на одной платформе, компонент Engine написан для определенного языка программирования и / или платформы разработки. Движок реализует алгоритмы LALR и DFA . Поскольку разные языки программирования используют разные подходы к разработке программ, каждая реализация Engine будет отличаться. В результате, реализация Машине написана для Visual Basic 6 значительно отличаются друг от написанного для ANSI C .
В настоящее время движки для GOLD реализованы для следующих языков / платформ программирования. Новые механизмы могут быть реализованы с использованием исходного кода для существующих механизмов в качестве отправной точки.
- Сборка - Intel x86
- ANSI C
- C #
- D
- Delphi
- Джава
- Паскаль
- Python
- Visual Basic
- Visual Basic .NET
- Visual C ++
Грамматики
Грамматики GOLD основаны непосредственно на форме Бэкуса – Наура , регулярных выражениях и обозначениях множеств.
Следующая грамматика определяет синтаксис минимального языка программирования общего назначения под названием «Простой».
"Name" = 'Simple'
"Author" = 'Devin Cook'
"Version" = '2.1'
"About" = 'This is a very simple grammar designed for use in examples'
"Case Sensitive" = False
"Start Symbol" = <Statements>
{String Ch 1} = {Printable} - ['']
{String Ch 2} = {Printable} - ["]
Identifier = {Letter}{AlphaNumeric}*
! String allows either single or double quotes
StringLiteral = '' {String Ch 1}* ''
| '"' {String Ch 2}* '"'
NumberLiteral = {Number}+('.'{Number}+)?
Comment Start = '/*'
Comment End = '*/'
Comment Line = '//'
<Statements> ::= <Statements> <Statement>
| <Statement>
<Statement> ::= display <Expression>
| display <Expression> read ID
| assign ID '=' <Expression>
| while <Expression> do <Statements> end
| if <Expression> then <Statements> end
| if <Expression> then <Statements> else <Statements> end
<Expression> ::= <Expression> '>' <Add Exp>
| <Expression> '<' <Add Exp>
| <Expression> '<=' <Add Exp>
| <Expression> '>=' <Add Exp>
| <Expression> '==' <Add Exp>
| <Expression> '<>' <Add Exp>
| <Add Exp>
<Add Exp> ::= <Add Exp> '+' <Mult Exp>
| <Add Exp> '-' <Mult Exp>
| <Add Exp> '&' <Mult Exp>
| <Mult Exp>
<Mult Exp> ::= <Mult Exp> '*' <Negate Exp>
| <Mult Exp> '/' <Negate Exp>
| <Negate Exp>
<Negate Exp> ::= '-' <Value>
| <Value>
<Value> ::= Identifier
| StringLiteral
| NumberLiteral
| '(' <Expression> ')'
Обзор разработки
Первый шаг состоит из написания и тестирования грамматики анализируемого языка. Грамматика может быть написана с помощью любого текстового редактора, например Блокнота или редактора, встроенного в Builder. На этом этапе никакого кодирования не требуется.
После завершения грамматики она анализируется Builder, создаются таблицы синтаксического анализа LALR и DFA , и сообщается о любых двусмысленностях или проблемах с грамматикой. После этого таблицы сохраняются в файл скомпилированной таблицы грамматики для последующего использования механизмом синтаксического анализа. На этом этапе GOLD Parser Builder больше не нужен.
На заключительном этапе таблицы считываются движком. На этом этапе процесс разработки зависит от выбранного языка реализации.
