stringtranslate.com

Синтаксическая диаграмма

Синтаксические диаграммы (или железнодорожные диаграммы ) — это способ представления контекстно-свободной грамматики . Они представляют собой графическую альтернативу форме Бэкуса-Наура , EBNF , расширенной форме Бэкуса-Наура и другим текстовым грамматикам как метаязыкам . Ранние книги, использующие синтаксические диаграммы, включают «Руководство пользователя Pascal», написанное Никлаусом Виртом [1] (диаграммы начинаются на странице 47) и Руководство Burroughs CANDE . [2] В области компиляции обычно предпочтительны текстовые представления, такие как BNF или его варианты. BNF основан на тексте и используется авторами компиляторов и генераторами синтаксических анализаторов. Схемы железных дорог наглядны и могут быть более понятны непрофессионалам, иногда их включают в графический дизайн. Канонический источник, определяющий формат обмена данными JSON, представляет собой еще один пример популярного современного использования этих диаграмм.

Принцип синтаксических диаграмм

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

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

Пример

В качестве примера мы используем арифметические выражения в различных грамматических форматах.

БНФ:

< выражение >  ::=  < термин > | < термин > "+" < выражение > < термин >  ::=  < коэффициент > | < коэффициент > "*" < термин > < коэффициент >  ::=  < константа > | < переменная > | "(" < выражение > ")" < переменная >  ::= "x" | "й" | "z" < константа >  ::=  < цифра > | < цифра >  < константа > < цифра >  ::= "0" | «1» | «2» | «3» | «4» | «5» | «6» | «7» | «8» | "9"

ЕБНФ:

выражение =  термин ,  [  "+"  ,  выражение ]; термин =  коэффициент ,  [  "*"  ,  термин ]; фактор =  константа |  переменная |  "("  ,  выражение ,  ")" ; переменная =  "х"  |  "й"  |  «з» ;  константа =  цифра ,  {  цифра }; цифра =  "0"  |  «1»  |  «2»  |  «3»  |  «4»  |  «5»  |  «6»  |  «7»  |  «8»  |  «9» ;

АБНФ:

выражение = термин [ "+" выражение ] термин = коэффициент [ "*" термин ] фактор = константа / переменная / "(" выражение ")" переменная = "x" / "y" / "z" константа = 1* цифра ЦИФРА = «0» / «1» / «2» / «3» / «4» / «5» / «6» / «7» / «8» / «9»                                            

ABNF также поддерживает диапазоны, например , но здесь он не используется для согласованности с другими примерами.DIGIT = %x30-39

Красный (язык программирования) Диалект разбора:

Красный  [ Название:  «Разобрать диалект» ] выражение:  [ термин  opt  [ выражение "+"  ]] термин: [ фактор opt [ "*" термин ]] фактор: [ константа | переменная | "(" выражение ")" ] переменная: [ "x" | "й" | "z" ] константа: [ некоторая цифра ] цифра: [ "0" | «1» | «2» | «3» | «4» | «5» | «6» | «7» | «8» | «9» ]                                     

Этот формат также поддерживает диапазоны, например , но здесь он не используется для согласованности с другими примерами.digit: charset [#"0" - #"9"]

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

Смотрите также

Рекомендации

  1. ^ Никлаус Вирт: Язык программирования Паскаль. (июль 1973 г.)
  2. ^ Язык команды Burroughs B6700/B7700 И редактирования (CANDE): Информационное руководство

Примечание: первая ссылка иногда блокируется сервером за пределами своего домена, но она доступна на archive.org. Этот файл также был отражен на сайте Standardpascal.org.

Внешние ссылки