Как получить терминал, представляющий любой символ в xText

Я использую Xtext для разработки DSL. Этот DSL должен принимать любой код в определенный момент. Это означает, что он должен принимать любой символ. Также мне нужно записать этот код, не игнорируя его. Кто-нибудь знает регулярное выражение для этого? Я пытался использовать .*, но он не работает, так как ожидает символы, которые не являются ни цифрами, ни буквами. Я даже пытался использовать "->", но это тоже не работает.

Код:

Param:

    'param' value=Anything;

...

Instance:

    component=[Component] name=ID 

    'call:' code=Anything;

Каким должно быть «нечто»?

Спасибо


person Carolina Centeio Jorge    schedule 16.08.2017    source источник
comment
что останавливает этот определенный момент? где заканчивается Anything и начинается следующее правило?   -  person Christian Dietrich    schedule 16.08.2017
comment
@ChristianDietrich Для кода, который я пытался использовать, но после написания первого он ожидает другого, игнорируя все, что я могу написать между ними. Для параметров это другой параметр или конец набора конфигурации, }.   -  person Carolina Centeio Jorge    schedule 16.08.2017
comment
хммм, не знаю, легко ли это возможно без переключения на внешний лексер и/или jflex. как узнать, что набор конфигурации заканчивается? какие вещи разрешены? реально все или может правило типа STUFF: (ID | INT | "somekeyword" | STRING)+ помогает   -  person Christian Dietrich    schedule 16.08.2017
comment
@ChristianDietrich Да, я верю, что это работает. Я только боюсь, что забуду какой-то символ, разрешенный на каком-то языке, о котором я еще не знаю, и он не позволяет пользователю написать его. Вот почему мой вопрос заключается в том, существует ли какое-либо терминальное правило, которое принимает любой символ. Конфигурация находится между {}, как и параметры.   -  person Carolina Centeio Jorge    schedule 16.08.2017
comment
проблема в том, что лексер лексирует контекст файла бесплатно => вы получаете поток токенов, таких как ID, STRING, INT, ANY_OTHER, INT, ID, SOME_KEYWORD, независимо от места в файле   -  person Christian Dietrich    schedule 16.08.2017
comment
так сказать, ANY_OTHER может совпадать с остальными, но не с чем-либо   -  person Christian Dietrich    schedule 16.08.2017


Ответы (1)


в зависимости от того, что у вас есть, вы можете попробовать что-то вроде

Model:
    params+=Param*;

Param:

    'param' value=Anything;

// this is a so called datatype rule
Anything :
    (ID | INT | STRING | ANY_OTHER)+
;
person Christian Dietrich    schedule 16.08.2017
comment
Не проще ли использовать подстановочный знак . вместо дополнительного правила парсера? Или Xtext не поддерживает это? Конечно, в конце грамматики должно быть дополнительное правило лексера, чтобы каждый ввод был токенизирован лексером... - person Raven; 20.08.2017
comment
Нет Lexing не парсится - person Christian Dietrich; 20.08.2017
comment
Да я это знаю... Где связь между твоим утверждением и моим? Afaik Xtext использует ANTLR v3 под капотом, и мое предложение должно работать с ним, если Xtext что-то там не изменил (или я что-то упустил) - person Raven; 20.08.2017
comment
. Оператор не для правил парсера - person Christian Dietrich; 20.08.2017
comment
Это... См. здесь: stackoverflow.com/questions/16598461/ ... Или это было введено только с v4? - person Raven; 20.08.2017
comment
Xtext не поддерживает токен - person Christian Dietrich; 20.08.2017
comment
А, ладно... Не знал этого. Сри - person Raven; 20.08.2017