2015-12-13 33 views
5

znalazłem tyldy ~ w tym Config::INI Perl 6 Grammar:Co znaczy ~ w Gramacie (w Perlu 6)?

token header { ^^ \h* '[' ~ ']' $<text>=<-[ \] \n ]>+ \h* <.eol>+ } 

Brak tyldy ~ w tekście mam obliczeniowej. Wiem, że ważne jest, aby '[' ~ ']', ponieważ pominięcie wszystkich lub wszystkich '[', ~ i ']' powoduje, że gramatyka nie pasuje do mojego tekstu.

Ponieważ wiedziałem, jaki był wzór, który mi został dopasowanie, zmieniłem go tak, że nawiasy kwadratowe były wokół wyrazu tekstu, a więc:

token header { ^^ \h* '[' $<text>=<-[ \] \n ]>+ ']' \h* <.eol>+ } 

Więc wydaje mi się, że '[' ~ ']' naprawdę mówi mecz kwadratowy wspornik i spodziewaj się później wspornika zamykającego.

W każdym razie wiem, że w normalnej składni Perla 6 tylda ~ służy do łączenia łańcuchów. Ale to oczywiście oznacza coś innego wewnątrz this Grammar. (W Perlu 6 możesz użyć Grammarów do wydobywania skomplikowanych struktur danych z tekstu, które są jak wyrazy regularne przenoszone na wyższy poziom).

Zresztą Szukałem documentation dla Grammars i Regular Expressions dla pojedynczego ~, ale nie znaleźliśmy żadnych wewnątrz gramatyki ani wewnątrz wyrażenia regularnego.


cross posted on StackOverflow en español

+1

Ciągle zapominam o tej funkcji. –

+2

http://design.perl6.org/S05.html#line_876 – Christoph

Odpowiedz

6

można znaleźć wyjaśnienie w dokumentach projektowych tutaj: https://github.com/perl6/roast/blob/master/S05-metachars/tilde.t#L6-L81

To przeważnie robi to, co odkryła: zastępuje tyldy z ekspresją, który następuje prawy wspornik i wyszukuje pomiędzy znakami nawiasowymi. Jednak dodaje trochę dodatkowej magii, aby pomóc wyrazowi rozpoznać nawias końcowy i zapewnić bardziej przydatny komunikat o błędzie, jeśli ostatni nawias nie zostanie znaleziony. Więc będziesz zwykle uzyskać takie same wyniki robi to tak czy owak, ale nie zawsze.