LR1 с С/С++

Тема в разделе "LANGS.C", создана пользователем _evil, 29 июн 2022.

  1. _evil

    _evil Member

    Публикаций:
    0
    Регистрация:
    28 сен 2003
    Сообщения:
    61
    По идее LR1 синтаксис перед развёрткой таблиц учитывает только один входной символ
    Я не однократно в интернете читал что синтаксис C/C++ входит в LR1 и большего просмотра вперёд не нужно.
    Тогда почему в одном месте в синтаксисе могут встречаться объявление переменных, объявление метки, начало математических выражений?
    Ведь вначале у всех трёх стоит идентификатор. Как Бизон их парсит?

    Или бизон как-то заносит их в одну таблицу?
     
  2. Rel

    Rel Well-Known Member

    Публикаций:
    2
    Регистрация:
    11 дек 2008
    Сообщения:
    5.241
    Причем тут бизон? Смысл некоторых выражений в сишечке и плюсов определяется только на этапе семантики (тайпчекер там и тд).
    --- Сообщение объединено, 29 июн 2022 ---
    Вообще, советую погуглить на тему "c++ undecidable grammar" или как-то так это называлось, смысл в том, что даже не учитывая тьюринг комплит шаблонов, ты с помощью LR1 плюсы не распарсишь. Ну точнее, ты можешь иметь в AST узлы, которые могут по факту означать две или три разные вещи, и решать, в какую именно вещь преобразуется такой узел, на отдельном проходе по AST, когда уже с узлами связана информация о типах.