Czy można użyć Instaparse lub innej biblioteki Clojure do analizy języka opartego na wcięciach? Widziałem przykłady użycia Instaparse do parsowania gramatyk wyrażonych w EBNF/ABNF. Czy istnieje dobry sposób na wykorzystanie go do analizy języka z wcięciem, takiego jak Python?Czy mogę analizować język oparty na wcięciach przy użyciu Instaparse lub innych bibliotek clojure?
Czy mogę analizować język oparty na wcięciach przy użyciu Instaparse lub innych bibliotek clojure?
Odpowiedz
Wygląda na to, że nie jesteś pierwszą osobą, która ma ten problem z Instaparse.
W przypadku większości generatorów analizatorów składni problem można rozwiązać za pomocą niestandardowego leksytera, stosując pewne odmiany schematu zaproponowanego przez @andrewcooke. Jednak Instaparse został zaprojektowany w celu uniknięcia potrzeby stosowania leksykonu, w związku z czym nie zapewnia interfejsu, który je wykorzystuje.
Ten brak został specjalnie podniesiony w issue 9, zastąpiony przez issue 10; w tym ostatnim artykule autor Instaparse sugeruje obejście:
W międzyczasie istnieje obejście, które można potencjalnie zastosować. Możesz odwzorować żetony takie jak INDENT i DEDENT na nieużywane postacie, a następnie odbudować je jako ciąg, a następnie uruchomić instaparse. Uważam, że znaki ASCII 0-8 i 11-31 są nieużywane i mogą służyć jako tokeny.
Jest to z pewnością możliwość, choć jest to ocena estetyczna, czy to "robić coś bardzo hacky." Mimo to możesz napisać taki hack w nadziei, że można go usunąć po rozwiązaniu problemu 10. Możesz dołączyć do dyskusji na ten temat.
Przez hacky, głównie chodziło o ręczne toczenie parsera. To wygląda obiecująco, postaram się to dalej. Wielkie dzięki. –
zazwyczaj zrobić parsowanie wcięcia oparte potrzebne są trzy rzeczy:
rozciągają tokenizera aby token z czołowych miejsc na każdej linii
proces strumieniu tokenów dla każdego wiersz porównujący początkowe spacje z bieżącym kontekstem i wskazujący na wzrost lub spadek (zmieniając mając token na początku każdej linii na token, gdy zmienia się poziom wcięć )
zapisywanie "normalnego" analizatora składni, który jest świadomy tokenów wskazujących zmianę poziomu wcięcia .
w zależności od języka, który może być potrzebny do przekazania informacji z części trzeciej do drugiej.
ja nie wiem nic o instaparse (I tylko dlatego odpowiadam jest to, że ludzie, którzy pytają: „co ty próbowałeś do tej pory?” Na takie pytania naprawdę wkurzaj mnie), więc trzeba by Sprawdź, czy istnieje jakiś sposób na umieszczenie drugiego etapu między tokenizerem a analizatorem składni (skanowałem dokumenty i nie wydaje się, aby zawierało ono część drugą, ale możesz sam to napisać). ale powinno być w stanie zrobić pierwszą i trzecią część w porządku.
Dzięki, jest to bardzo pomocne. –
+1 za "naprawdę wkurza mnie" na bok. :) –
- 1. Język programowania oparty na Unicode
- 2. Parsowanie języka opartego na wcięciach przy użyciu kombinatorów paralizatora scala
- 3. Jak definiujemy gramatykę dla kodu typu clojure za pomocą instaparse?
- 4. Używanie bibliotek java innych firm, takich jak com.jcraft.jsch, z clojure
- 5. Czy mogę używać innych bibliotek node.js w Meteor?
- 6. [Język rodzimy]: Korzystanie z funkcji Java i bibliotek innych firm w Qt na Androida
- 7. Jak mogę określić zależności bibliotek przy użyciu SystemJS?
- 8. Jak analizować plik CSV przy użyciu PHP
- 9. Jak analizować tabelę HTML przy użyciu PHP?
- 10. Nie można analizować dane przy użyciu JavaScriptDateTimeConverter
- 11. Jak analizować parametry URL w Clojure?
- 12. Podawać zawartość binarną przy użyciu Clojure Ring
- 13. Ember: dynamiczne przełączenie na wybrany język (przy użyciu biblioteki i18n)
- 14. Czy istnieje język programowania oparty na LLVM, który może zagwarantować szybkie pliki binarne bezpieczne dla piaskownicy?
- 15. Czy można analizować języki "spoza" (z wcięciami) za pomocą fparsec?
- 16. Czy istnieje dobry IDE oparty na IE?
- 17. Odwoływanie się do bibliotek innych firm przy użyciu ścieżek * względnych * w Eclipse-CDT
- 18. Spring - kontroler oparty na adnotacjach - RequestMapping oparty na ciągu zapytań
- 19. Jak parsować plik html przy użyciu clojure?
- 20. Jak mogę analizować XML na Androida?
- 21. Jak mogę pominąć interakcje przy użyciu programu stargazer lub xtable?
- 22. Czy istnieje torrent torrent oparty na Railsach?
- 23. Dokumentacja Clojure dla bibliotek/przestrzeni nazw
- 24. Czy mogę polegać na CallContext przy użyciu Web API?
- 25. Czy istnieje język z poziomami dostępu opartymi na obiektach?
- 26. sprawdzanie, czy komponent bean ma wartość null przy użyciu javascript lub innych metod
- 27. Czy mogę odczytać adres URL przeglądarki przy użyciu selenu webdriver?
- 28. Anulowanie echa w programie Flash/Flex przy użyciu bibliotek natywnych
- 29. Jak utworzyć język .Net lub JVM?
- 30. Język skryptowy PHP lub język programowania?
@chollida: Próbuję uzyskać porady na temat tego problemu, zamiast robić coś bardzo hacky. –
Nie dostaniesz czegoś hackowego, ponieważ napisałeś trochę o tym, co próbujesz osiągnąć. – octopusgrabbus
@octopusgrabbus: Nie jestem pewien co masz na myśli. Moim opcjom, jak je widzę, jest ręczne przetasowanie mojego parsera (hacky) lub użycie generatora parsera, którego Instaparse wydaje się najlepiej rozwinięty.Ale nie było dla mnie oczywiste, jak sformułować gramatykę opartą na wcięciach w A/EBNF, czy też Instaparse będzie odpowiednim narzędziem. Stąd pytanie. –