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

Пропустить общее правило ввода/вывода метода слушателя в пользу более конкретного? (ANTLR4)

Я создал грамматику в ANTLR4. Образец выдержки показан ниже:

list    : defunExpr            # defun
        : lambdaExpr           # lambda
        : condExpr             # cond

        ...

        : items                # other
        ;

Правила перечислены в порядке приоритета и вызываются по мере необходимости при тестировании грамматики. Все правила с более высоким приоритетом #defun, #lambda, #cond и т. д. также будут соответствовать элементам (#other), если они не совпадают с более высоким приоритетом (ожидаемое поведение при размещении правил с более высоким приоритетом перед более низким).

Затем я реализовал простое приложение на основе прослушивателя на Java, которое просто форматирует проанализированный код и выводит его обратно в консоль. Я переопределил соответствующие методы входа/выхода для #defun, #lambda, #cond и т. д. Я хотел бы реализовать обобщенный универсальный метод для элементов, которые не соответствуют более конкретному правилу. Однако, когда я реализую методы входа/выхода для #other, он также выполняется для каждого совпадающего правила с более высоким приоритетом, эффективно выводя отформатированный код дважды для таких правил, как #defun, #lambda, #cond и т. д.

Есть ли способ добиться такого поведения? У меня есть несколько конкретных правил, которые я хочу реализовать, а затем общий случай поймать остальные. Грамматика анализирует правильно (тестовая установка показывает ожидаемое поведение в многочисленных тестовых примерах), но универсальный метод (enterOther), похоже, также действует по определенным правилам.

РЕДАКТИРОВАТЬ: Вау, после всего этого времени и публикации этого вопроса я теперь действительно считаю, что это грамматическая ошибка. Однако я оставлю вопрос открытым, пока не проверю.

21.10.2014

  • Я действительно не знаю, что вы пытаетесь сделать, но вы уверены, что посетители не будут лучшим выбором для обработки деревьев выражений? 21.10.2014
  • Все правила с более высоким приоритетом [...] также будут соответствовать items, если они не соответствуют более высокому уровню. Мне кажется грамматическая двусмысленность. 21.10.2014
  • enterOther определенно не является универсальным правилом в соответствии с синтаксисом, показанным выше. Можете ли вы добавить полный пример, который воспроизводит поведение, которое вы видите? 21.10.2014
  • Вы уверены, что «элементы» не являются единственным подправилом «список», которое соответствует и всегда вызывается для «enterOther»? 22.10.2014
  • Спасибо за интерес, ребята. Я ничего не оцениваю, просто повторяю проанализированный ввод, поэтому слушатели работают нормально. Грамматика была на самом деле прекрасной, недвусмысленной. Универсальное правило (оно было универсальным, несмотря на то, что я не показывал здесь достаточно моей грамматики) работало нормально. Моя проблема (смущающая) заключалась в том, что, хотя я хотел написать методы ввода/вывода #other, я на самом деле все время писал методы ввода/вывода Expr, поэтому все определенные правила также срабатывали (поскольку они являются Expr). Обидно, но урок усвоен. Спасибо за идеи и потраченное время. Ваше здоровье! 22.10.2014

Ответы:


1

Спасибо за интерес, ребята. Я ничего не оцениваю, просто повторяю проанализированный ввод, поэтому слушатели работают нормально. Грамматика была на самом деле прекрасной, недвусмысленной. Универсальное правило (оно было универсальным, несмотря на то, что я не показывал здесь достаточно моей грамматики) работало нормально. Моя проблема (смущающая) заключалась в том, что, хотя я хотел написать методы ввода/вывода #other, я на самом деле все время писал методы ввода/вывода Expr, поэтому все определенные правила также срабатывали (поскольку они являются Expr). Обидно, но урок усвоен. Спасибо за идеи и потраченное время. Ваше здоровье!

08.11.2014
Новые материалы

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

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

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

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

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

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

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