Wiele języków związany ciąg z pewnego rodzaju środki, tak:Jak mogę uciec z postaci ucieczki za pomocą ANTLR 4?
"Rob Malda is smart."
ANTLR 4 można dopasować taki ciąg z reguły Lexer jak ten:
QuotedString : '"' .*? '"';
Aby wykorzystać niektóre znaki w ciągu znaków muszą zostać usunięte, być może w ten sposób:
"Rob \"Commander Taco\" Malda is smart."
ANTLR 4 może również dopasować ten ciąg;
EscapedString : '"' ('\\"|.)*? '"';
(zaczerpnięte z P96 ostatecznego ANTLR 4 Reference)
Oto mój problem: Załóżmy, że postać na ucieczkę jest taki sam charakter jak ogranicznik strun. Na przykład:
"Rob ""Commander Taco"" Malda is smart."
(. Jest to całkowicie legalne w PowerShell)
Co lexer reguła będzie pasować do tego? Myślę, to będzie działać:
EscapedString : '"' ('""'|.)*? '"';
Ale tak nie jest. Lexer tokenizuje znak ucieczki "
jako koniec ogranicznika łańcucha.
Działa, dziękuję. Ale działa tylko wtedy, gdy używam chciwego kwantyfikatora, a nie nie chciwego. Dlaczego? –
@ james.garriss nie ma za co. Dodałem kilka dodatkowych informacji na temat nieagresywnego dopasowywania. –
To bardzo interesujące zobaczyć, jak negacja działa jak nie-chciwy kwantyfikator. Chłodny. –