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

Настройка области видимости грамматики Xtext DSL

Я знаю, что для этого есть простое решение, но я понятия не имею, как его реализовать.

Я ищу, как реализовать ответ, а не то, что мне нужно сделать. Половина ответа уже находится на этой странице: Перекрестные ссылки и область видимости Xtext

Моя проблема связана с грамматикой ниже:

DomainModel:
    "DOMAINMODEL" name=ID "{"
        "ENTITYS" "{"
            (Entitys+=Entity)*
        "}"
        "ENTITY_RELATIONSHIP" "{"
            (Relationships+=Relationship)*
        "}" 
    "}";

Entity:
    name=ID "{"
        (Attributes+=Attribute)*
    "}";

Attribute:
    StringAttribute | NumberAttribute | ImageAttribute;

StringAttribute:
    "STRING" name=ID;

NumberAttribute:
    "NUMBER" name=ID;

ImageAttribute:
    "IMAGE" name=ID;

// Relationship = [new table name] : [shared key name] -> ref_table(ref_id)
Relationship:
    name=ID ":" newEntityName=ID "->" refEntityName=[Entity|ID]"("refName=[Attribute|ID]")"; // <- Problem here

Когда я пишу модель, я не могу получить "refName=[Attribute|ID]" для ссылки на атрибуты внутри объекта. В коде ниже

DOMAINMODEL auctionHouse{
    ENTITYS {

       lots{      
          NUMBER id0
          NUMBER lotNo
          STRING name
          STRING priceEstimate
          STRING description
       }  
       auctions{
          NUMBER id1
          NUMBER date
          STRING description
       }
       auction_lots{
          NUMBER id2
          STRING lot_id
          NUMBER auction_id
       }

    }

    ENTITY_RELATIONSHIP {
        auction_lots : lot_id -> lots(id0) // <- Will not find 'id0'
        auction_lots : auction_id -> auctions(id1) // <- Will not find 'id1'
    }

}

Как расширить сферу? Как я могу различать два атрибута с одинаковым именем, но в разных областях?


Ответы:


1

Проблема со ссылками заключается в том, что их просто невозможно найти в этой области, что вы можете сделать, это ввести полное имя и использовать его в своей перекрестной ссылке и соответствующим образом изменить свою грамматику, то есть: -

QualifiedName:
    ID ('.' ID)*;

Relationship:
    name=ID ":" newEntityName=ID "->" refName=[Attribute|QualifiedName];

Теперь должна быть возможность ссылаться с помощью квалифицированного идентификатора:

ENTITY_RELATIONSHIP {
    auction_lots : lot_id -> auctionHouse.lots.id0
    auction_lots : auction_id -> auctionHouse.auctions.id1
}

Если вы не можете изменить грамматику, подобную этой, чтобы использовать способ обработки имен Xtext по умолчанию, вам нужно будет изучить возможность предоставления ваших собственных полных имен, отличная статья для этого - это Статья о полных именах

30.01.2013
  • Спасибо, это решило все мои проблемы. Это идеальный ответ! О, но только для справки, модель принимает аукционHouse.lots.id0, а не ENTITYS.lots.id0. 03.02.2013
  • Для полноты: обратите внимание, что полоса | не является альтернативой в контексте перекрестной ссылки, а используется для указания синтаксиса анализируемой строки. eclipse.org/Xtext/documentation/102_domainmodelwalkthrough.html 04.10.2016
  • Новые материалы

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

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

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

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

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

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

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