2009-08-10 4 views
20

Czy istnieje dobry generator parserów (think lex/yacc lub antlr) dla .NET? Ktoś, kto ma licencję, która nie przestraszyłaby prawników? Dużo LGPL, ale pracuję nad komponentami osadzonymi, a niektóre organizacje nie są wygodne, biorąc pod uwagę zależność LGPL.Dobry generator parsera (pomyśl o lex/yacc lub antlr) dla .NET? Tylko czas budowy?

Słyszałem, że Oslo może udostępniać tę funkcję, ale nie jestem pewien, czy jest to zależność czasu kompilacji, czy też zależność czasu wykonywania. Czy ktoś może wyjaśnić, co zapewni Oslo?

UPDATE
Co naprawdę chciałbym to parser generator, który to czas budowy tylko zależność. Wygląda na to, że ANTLR ma komponent środowiska wykonawczego.

+0

Opensorce generatory do języka C#: YaccConstructor, GLL, C#, Apache 2.0, http://yaccconstructor.github.io/YaccConstructor/gll.html NLT, GLR, C#, MIT, http: // SourceForge. net/projekty/naivelangtools/ GLRSharp, GLR, C# V4 MIT https://github.com/jcoder58/GLRSharp GPPG, LALR (1), C# BSD sablecc, LALR (1), LGPL antlr , Java, BSD Lapg, LALR (1), Java, GPL jay, LALR (1), Java, BSD Hime, LR (1), LALR (1), LGPL LLLPG, LL (k), LGPL, C# Gramatica, LL (k), Java csharpcc, C#, LL (k), BSD Coco/R, GPL Irony Eto.Parser – user1709408

+0

http://softwarerecs.stackexchange.com/questions/24630/which-parser-generator-to-use-on-mono – user1709408

Odpowiedz

8

Hmmm już wspomniano antlr więc nie jestem pewien, dlaczego nie uważa go ...

antlr generuje C# (http://www.antlr.org/wiki/display/ANTLR3/Antlr%2B3%2BCSharp%2BTarget) i posiada licencję BSD (http://www.antlr.org/license.html), który wydaje się mieć bardzo niewiele ograniczeń.


Irony (http://irony.codeplex.com/) posiada sporą ilość pobrań i A (łatwy w oczy) licencji MIT. Wydaje się mieć pełny kod źródłowy, więc można go "osadzić" bezpośrednio w aplikacji.

+0

Sprawdzam, czy jest ono zgodne z prawem Zespół teraz ... teraz rozważam ANTLR i jayc (używane w projekcie mono). –

3

ANTLR ma komponent środowisko wykonawcze, ale zawsze można wziąć kilka klas, których używa i uwzględnić je w projekcie, w którym to momencie nie trzeba już odwoływać się do zestawu środowiska wykonawczego. Jest licencjonowany na podstawie licencji BSD - 3 klauzula dla celu C# 3 i 4 dla celu C# 2.

9

Właśnie odkryłem, że F # zawiera implementację Yacc i Lex. Wygląda na to, że będę w stanie wykorzystać ten generator parsera do moich potrzeb .NET.

F# Samples

parsowanie przykład pokazuje, jak używać fsyacc i narzędzia fslex zbudować parser i lexers do użytku z F #. (Tryb: Opracowanie, Działa na: dowolnym CLI, w tym Mono)

Powiązane posty na blogach:

4

Osobiście jestem bardzo fanem GOLD Parser Generator. Nie generuje bezpośrednio żadnego kodu, tylko podaje tabele stanu DFA i LALR i pozwala na napisanie własnego silnika parsera do własnych potrzeb.

Ten sposób porządkowania rzeczy nie pasuje do wszystkich lub każdej sytuacji (tracisz pewną elastyczność, ponieważ twój język musi spełniać ograniczenia LALR), więc nie twierdzę, że jest to "właściwy sposób", ale spodobało mi się oddzielenie algorytmu parsowania od reguł parsowania (i oznacza to, że wszelkie wymagania środowiska wykonawczego są całkowicie i łatwo kontrolowane).

oczywiście nie mają napisać swój własny silnik – istnieją trzy engines written in C# notowana na miejscu np. Off-hand Nie wiem, jakie licencje używają te silniki, ale pisanie własnego silnika jest wprost banalne, jeśli uznasz, że licencje są niesmaczne.GOLD zawiera dokumentację, która zawiera pełny opis działającego algorytmu, który jest (jak można się spodziewać, jeśli rozumiesz analizę LALR), prostym systemem automatów stanowych. Oczywiście sam program GOLD jest darmowy.

ZŁOTO zawiera także IDE do pisania gramatyki języka, co może być bardzo pomocne.

+0

Panie John, używając GOlD Parser, czy mogę łatwo uzyskać SQL Parser Oracle w C# ?? Thx – Kiquenet

Powiązane problemy