Целью является сопоставление URL-адресов (без протокола), которые могут включать или не включать необязательное имя хоста. НапримерANTLR: обнаружение необязательного токена перед последовательностью любых символов
- amce.com/a/path
- /другое/путь/выражение
- а/путь/не/starting_with/слэш
Все 3 должны соответствовать, но в идеале грамматика позволит восстановить имя хоста - acme.com - в первом выражении.
Так грамматика анализатор будет идеально выглядеть следующим образом:
url: hostname? pathExpr
Проблема приходит с лексическим Грамматика
Например
fragment ALPHANUM: [a-zA-Z0-9-];
fragment NAME: ALPHANUM+;
HOSTNAME: NAME ('.' NAME)+ -> mode (PATH_MODE);
mode PATH_MODE;
PATH_EXPR: .+;
работает отлично для первого случая, но будет не соответствуют другим 2.
Как это сделать?
(примечание: в режиме по умолчанию, я попытался выражающим правило ANYPATH, определяющее последовательность символов начинающихся не с помощью HOSTNAME, но не удался)
Спасибо. Я попытался взломать это, но я не могу заставить его соответствовать URI без имен хостов (исключение требований к схемам не было проблемой). –