Nano Hash - криптовалюты, майнинг, программирование

Преобразование EBNF в BNF для парсера LALR

Я знаю, что есть несколько постов с похожим названием. Большинство ссылок на мертвый сайт - и в любом случае у меня есть более конкретный вопрос.

Я пытаюсь преобразовать EBNF в спецификации XPath в прямой BNF, поэтому что я могу легко создать файл грамматики, совместимый с Bison.

Прошло много времени с тех пор, как я это делал, и я не помню, к какой стороне производства относится рекурсия. Я думал, что это слева, но мой "прямой" перевод дает мне синтаксические ошибки с простыми выражениями XPath, когда они проходят через синтаксический анализатор, созданный Bison.

Так что, если кто-то может меня подшутить и взвесить - значит, я не гонюсь за призраком:

В правиле Expr ниже:

Expr::=     
    ExprSingle ("," ExprSingle)*

Это правильный перевод? (поместив рекурсию слева):

Expr::= 
    Expr "," ExprSingle
    | ExprSingle

  • Это нормально .... Вы можете поместить рекурсию справа, и она должна работать, но вы заставите синтаксический анализатор выполнять больше работы, поскольку он должен отслеживать позвоночник рекурсии, и для этого он должен использовать больше стека локации. 30.01.2012
  • @IraBaxter Не могли бы вы опубликовать этот комментарий в качестве ответа для меня? 30.01.2012

Ответы:


1

Это нормально....

Вы можете поместить рекурсию справа, и она должна работать, но вы заставите парсер «делать больше работы», поскольку он должен отслеживать основу рекурсии, и для этого он должен использовать больше мест стека.

30.01.2012

2

Ваш перевод остается рекурсивным по правилу Expr и принимает другие Expr произведения.

Правильный перевод будет:

Expr::=
    ExprSingle Expr1
Expr1::=
    Expr1 "," ExprSingle | ε
12.10.2020
Новые материалы

Кластеризация: более глубокий взгляд
Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

Как написать эффективное резюме
Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

Частный метод Python: улучшение инкапсуляции и безопасности
Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

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

Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..