Ziel ist es, URLs (ohne das Protokoll) zu finden, die einen optionalen Hostnamen enthalten können oder nicht. Zum BeispielANTLR: erkennt ein optionales Token vor einer Sequenz beliebiger Zeichen
- amce.com/a/path
- /andere/path/ausdr
- a/path/nicht/starting_with/slash
Alle 3 entsprechen sollte aber idealerweise die Grammatik würde erlauben, den Hostnamen - acme.com - im ersten Ausdruck wiederherzustellen.
So würde der Parser Grammatik aussehen ideal:
url: hostname? pathExpr
Das Problem kommt mit dem Lexer Grammar
Zum Beispiel
fragment ALPHANUM: [a-zA-Z0-9-];
fragment NAME: ALPHANUM+;
HOSTNAME: NAME ('.' NAME)+ -> mode (PATH_MODE);
mode PATH_MODE;
PATH_EXPR: .+;
funktioniert gut für den ersten Fall, aber wird nicht die anderen 2.
Wie mache ich das?
(Hinweis: für den Standard-Modus, Ich habe versucht, die Expression eine Regel ANYPATH eine Folge von Zeichen, die nicht von einem Host-Namen definieren, beginnend aber nicht)
Danke. Ich habe versucht, das zu hacken, aber ich kann es nicht bekommen, URIs ohne hostnames zu entsprechen (das Entfernen von Schemenanforderungen war kein Problem). –