Добрый день, Саша!

On Thu, Nov 14, 2024 at 3:14 PM Александр Коновалов
a.v.konovalov87_AT_mail.ru <[email protected]> wrote:

> Не представляю синтаксис для этой цели, кроме того, который я приводил выше
>

Я тоже не представляю, на самом деле. У меня есть только смутные наброски
наподобие вот такого:
 /*
  * t.Token ::=
  *     (t.Pos Ident e.Name)
  *   | (t.Pos Const e.Value)
  *   | (t.Pos Let)
  *   | (t.Pos Assign)
  *   | …
  * t.PureToken ::=
  *     (Ident e.Name)
  *   | (Const e.Value)
  *   | Let
  *   | Assign
  *   | …
  */

/* Линза преобразует список термов t.Token к списку t.PureToken */
Purify {
    (t.Pos Let) e.Rest = Let <Purify e.Rest>;
    (t.Pos Assign) e.Rest = Assign <Purify e.Rest>;
    ...
    (t.Pos e.Data) e.Rest = (e.Data) <Purify e.Rest>;
}

/* Демонстрация вызова парсера с применением линзы */
CallParser {
    e.Tokens = <Purify | Parse e.Tokens>;
    /* Вызов функции с линзой -- единственное расширение синтаксиса */
}

/* Парсер принимает список термов t.PureToken */
Parse {
    Let (Ident e.Name) Assign e.Expr
        , <IsDeclared e.Name>: T
        = ERROR (Ident e.Name) ': redefinition of variable';
        /* Если парсер вызвали с линзой Purify, то на выходе
           из функции Parse терм (Ident e.Name) преобразуется
           обратно в (t.Pos Ident e.Name) */
    ...
}
  • Re:... Александр Коновалов a . v . konovalov87_AT_mail . ru
  • Re:... Sergei Skorobogatov s . yu . skorobogatov_AT_gmail . com
  • RE:... Александр Коновалов a . v . konovalov87_AT_mail . ru
  • Re:... Sergei Skorobogatov s . yu . skorobogatov_AT_gmail . com
  • RE:... Александр Коновалов a . v . konovalov87_AT_mail . ru
  • Re:... Sergei Skorobogatov s . yu . skorobogatov_AT_gmail . com
  • RE:... Александр Коновалов a . v . konovalov87_AT_mail . ru
  • Re:... Стеллецкий Василий sw710_AT_yandex . ru
  • Re:... Александр Коновалов a . v . konovalov87_AT_mail . ru
  • Re:... Arkady Klimov arkady . klimov_AT_gmail . com
  • Re:... Sergei Skorobogatov s . yu . skorobogatov_AT_gmail . com
  • Re:... Arkady Klimov arkady . klimov_AT_gmail . com
  • Re:... Александр Коновалов a . v . konovalov87_AT_mail . ru

Ответить