2008-10-05 10 views
11

Szukam godnej leksykalnym generatora skanera dla C#/.NET. - coś który obsługuje kategorie Unicode i generuje nieco czytelny & wydajnego kodu. Ktoś o tym wie?C#/.NET Lexer Generatory


EDIT: trzeba wsparcie dla Unicodekategorii, a nie tylko znaków Unicode. Obecnie jest tylko 1421 znaków w samej kategorii Lu (litery, wielkie litery) i muszę bardzo dokładnie dopasować wiele różnych kategorii i wolałbym nie pisać ręcznie zestawów znaków niezbędnych do tego.

Również rzeczywisty kod jest koniecznością - to wyklucza rzeczy, które generują plik binarny, który jest następnie używany z kierowcą (tj GOLD)


EDIT: ANTLR nie obsługuje Kategorie unikodowe. Jest na to jednak open issue, więc może kiedyś spełni moje potrzeby.

Odpowiedz

8

Wydaje się, że GPLEX wspiera Twoje wymagania.

+0

Jak do cholery nigdy nie zrobiłem wiecie o GPPG? –

+0

Używam tego od lat :) GPLEX dopiero niedawno (ostatni rok). – leppie

1

Oba rozwiązania, które przychodzą na myśl są ANTLR i Gold. ANTLR ma projektant gramatyki oparty na interfejsie graficznym i doskonały przykładowy projekt w języku C# can be found here.

+0

złoto nie generuje/kod/dla lexer - buduje specjalny plik binarny, że kierowca odczytuje przy starcie. Jeśli chodzi o Antlr, nie mogę znaleźć niczego, co by sugerowało, że obsługuje Unicode/classes/(wydaje się, że pozwala na podawanie określonych znaków Unicode, ale nie całych klas) –

+0

ANTLR nie obsługuje klas znaków Unicode – artur02

1

Zgadzam się z @David Robbins, ANTLR jest prawdopodobnie najlepszym rozwiązaniem. Jednak wygenerowany kod ANTLR wymaga oddzielnej biblioteki środowiska wykonawczego w celu użycia wygenerowanego kodu, ponieważ istnieje kilka analiz łańcuchów i inne cechy wspólne biblioteki, na których opiera się wygenerowany kod. ANTLR generuje lexer ORAZ parser.

Na marginesie: ANTLR jest świetny ... Napisałem gramatykę 400+ linii, aby wygenerować ponad 10k lub kod C#, aby efektywnie analizować język. Obejmuje to wbudowane sprawdzanie błędów pod kątem każdej możliwej rzeczy, która może pójść źle podczas analizowania języka. Spróbuj zrobić to ręcznie i nigdy nie nadążysz za tymi błędami.