Najlepszy / najszybszy sposób zapisu parsera w c#
Jaki jest najlepszy sposób na zbudowanie parsera w c# do analizy własnego języka? Idealnie chciałbym dostarczyć gramatykę i uzyskać abstrakcyjne drzewa składni jako wynik. Wielkie dzięki, Nestor
7 answers
Miałem dobre doświadczenie z ANTLR v3 . Zdecydowanie największą korzyścią jest to, że pozwala pisać parsery LL (*) z nieskończonym wyglądem - mogą być one dość nieoptymalne, ale gramatyka może być napisana w najprostszy i naturalny sposób, bez konieczności refaktorowania, aby obejść ograniczenia parsera, a wydajność parsera często nie jest wielka (mam nadzieję, że nie piszesz kompilatora C++), szczególnie w projektach edukacyjnych.
Zapewnia również całkiem dobre środki konstruowanie znaczącego ASTs bez konieczności pisania żadnego kodu - dla każdej produkcji gramatycznej wskazuje się" kluczowy " token lub podprodukcję, a ten staje się węzłem drzewa. Albo możesz napisać produkcję drzewa.
Spójrz na następujące gramatyki ANTLR (wymienione tutaj w kolejności rosnącej złożoności), aby dowiedzieć się, jak wygląda i czuje
- JSON gramatyka - z tree productions
- gramatyka Lua
- C gramatyka
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-10-01 19:46:59
Grałem w wtih ironia . Wygląda prosto i użytecznie.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-10-01 19:43:50
Możesz przestudiować kod źródłowy kompilatora Mono C # .
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-10-01 19:30:32
Choć jest jeszcze we wczesnej wersji beta, Oslo język modelowania i narzędzia Mgrammar od Microsoftu są obiecujące.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-10-01 19:39:27
Rzuciłbym też okiem na SableCC . Bardzo łatwo jest stworzyć EBNF grammer. Tutaj {[2] } jest prosty przykład kalkulatora C#.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-10-01 19:52:16
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-04-22 02:16:39
Lex i yacc są nadal moimi ulubieńcami. Niejasne, jeśli dopiero zaczynasz, ale niezwykle proste, szybkie i łatwe, gdy już opanujesz żargon.
Możesz zrobić, co chcesz; generować kod C#, budować inne gramatyki, emulować instrukcje, cokolwiek.
Nie jest ładny, jest to format tekstowy i LL1, więc twoja składnia musi to zaakceptować.
Na plus, to jest wszędzie. Są o tym świetne książki O ' Reilly, dużo przykładowego kodu, dużo gotowych gramatyki i wiele bibliotek języka ojczystego.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-10-02 15:42:18