Potrzebuję stworzyć konwerter ze Scala na inny język. Szukam parsera kodu scala, który konwertuje kod do drzewa składni bez kompilacji.Parser kodu parsera (bez kompilatora)
Odpowiedz
Pozwolę sobie wyjaśnić: nie ma sposobu na wygenerowanie AST programu Scala z samym analizatorem składni. Jest absolutnie konieczne, aby uruchomić typer, a to oznacza wnioskowanie typu i implicits.
Po tym możesz zrobić, co chcesz. Ale te pierwsze kilka etapów kompilatora (cztery w najnowszych wersjach, liczenie typera) są konieczne.
Przypadkowo, to fazy prowadzone przez presentation compiler, który jest używany przez . Wydaje mi się, że może to być idealny interfejs dla ciebie.
ENSIME również uses it, który wydaje się być najlepszym źródłem informacji o nim, a może chcesz również przyjrzeć narzędzia Scala Refactoring, ponieważ używa AST kompilator, jak również.
Na koniec możesz spróbować skompilować kod za pomocą -Ybrowse:typer
, aby zobaczyć drzewo po typerie. Użyj -Xshow-phases
, aby wyświetlić istniejące fazy, lub -Xprint:typer
, aby wydrukować "źródło" po typerie (lub dowolnej innej fazie).
- 1. Parser kodu Nim
- 2. Implementacja parsera
- 3. EBNF Scala parsera combinator
- 4. Wyświetlanie rozszerzonego kodu kompilatora - C++
- 5. Jak używać parsera Stanforda
- 6. C++ Utwórz parser
- 7. LISP Parser C++
- 8. Negowanie wewnętrznych zasad i parsera
- 9. Używanie ANTLR Parser i Lexer Separatly
- 10. Microsoft Powerpoint Python Parser
- 11. Monitorowanie postępu parsera Java SAX
- 12. Techniki potrzebne do napisania parsera wyrażeń arytmetycznych
- 13. Jak zainstalować XML :: Parser bez expat-devel?
- 14. Kompilacja kodu C++ bez uwzględniania
- 15. Java SAX Parser podnosi UnknownHostException
- 16. Parser/czytnik CSV dla C#?
- 17. Czy istnieje parser .NET CQL?
- 18. Błąd parsera Angular2 nieoczekiwany token
- 19. Pisanie parsera HTML w Erlang
- 20. Powrót do tyłu w kombinatorach parsera scala?
- 21. llvm-clang: inkrementalny lub online parser?
- 22. Co to jest dobry kompilator kompilatora kompilatora C#/analizatora składni?
- 23. Czy jest dostępny parser/metoda do parsera plików zrzutu Wikipedii za pomocą Pythona?
- 24. Dowolny parser haml po stronie klienta?
- 25. LLVM JIT Pisanie parsera za pomocą Bison/Antlr/Packrat/Elkhound/
- 26. Problemy z analizatorem parsera Scala
- 27. Kod parsera open source dla znaczników Mediawiki
- 28. Przedłużanie parsera matematycznego matplotlib
- 29. Dodaj opcję kompilatora bez edycji Makefile
- 30. Używanie kątowego 2 bez kompilatora maszynowego
Myślę, że podstawowa odpowiedź jest myląca. Jeśli masz gramatykę, możesz wygenerować AST; w końcu gramatyki i drzewa (składniowe) są o czystej składni. Zgadzam się, często potrzebujesz informacji o typie, aby z pożytkiem interpretować AST. (Nie mam zastrzeżeń do twoich wskazówek do użytecznych maszyn). –
@Ira Przyjmuje, że język może być _parsed_ z gramatyką. Perl, na przykład, [nie może] (http://www.perlmonks.org/?node_id=663393). W Scali, jury nadal nie działa - niektórzy próbowali zbudować parser na podstawie specyfikacji EBNF, ale przekonali się, że nie działa. Może Scala może być analizowana z gramatyki, ale w praktyce, takie parsowanie byłoby bezużyteczne bez typera, ponieważ część kodu źródłowego jest dostarczana pośrednio przez tę fazę. –
Ta sama historia została również opowiedziana o C++. To jest złe. Prawdą jest, że niektóre z pism mogą być niejednoznaczne lokalnie. Mogą być nawet bardzo niejednoznaczni, lokalnie. Przeważnie oznacza to, że technologia parsowania, której używają ludzie (LL (k) i LALR (1)) jest dość kiepska. To nie znaczy, że właściwa technologia analizowania jest kiepska. Zobacz parsowanie GLR, które obsługuje takie niejednoznaczne cechy. W ten sposób parsujemy C++, pomimo twierdzeń ludowych o tym, że jest "twardy". Pracujemy nad parserem Perla, ale z jego tyłu. Mam kłopot z przekonaniem, że Scala jest tak nieprzyjemna jak Perl. –