Можно ли использовать ссылку на правило ссылки в режиме ожидания?

Я пытаюсь использовать textx для разбора языка, похожего на SQL. Я хотел бы использовать ссылки на правила ссылок, чтобы ссылаться на псевдонимы до их объявления.

Я получаю сообщение об ошибке "Неизвестный объект"Foo"класса"Bar"" при попытке сделать такую ​​прямую ссылку.

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

SELECT B.c
FROM A AS B

В этом случае я хотел бы B в B.c ссылаться на псевдоним, определенный позже (B в A AS B).

РЕДАКТИРОВАТЬ

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

Вот грамматика, которую я использую:

Expression: Query | Atomic | Tuple;

Query:
    'SELECT' selections+=Selection[',']
    'FROM' from=From
;

Selection[noskipws]:
    /\s*/
    source=[SourceAlias] ('.' source_selectors+=ID['.'])?  /\s*/ ('AS' /\s*/ alias=ID)?
    /\s*/
;

From:
        (source=DataSource | '(' Query ')') 'AS' alias=SourceAlias
;

DataSource: source_name=ID '.' source_attributes+=ID['.'];

SourceAlias: name=ID;

Tuple: '(' atoms+=Atomic[','] ')';

Atomic: NUMBER | STRING | BOOL;

И вот пример, что моя грамматика не удается, с ошибкой "test.qql:2:14: error: Unknown object "B" of class "SourceAlias":

SELECT inner.o AS outer
FROM (SELECT B.huh AS aha FROM A.b AS B) AS inner

1 ответ

Решение

Проблема в том, что в From править Query совпадение ни к чему не присваивается, поэтому оно отбрасывается, и поэтому ссылки во внутреннем запросе отбрасываются. Вот обновленный From правило:

From:
        (source=DataSource | '(' query=Query ')') 'AS' alias=SourceAlias
;
Другие вопросы по тегам