Późniejsze dodawanie pliku źródłowego do istniejącego narzędzia, które wygenerowało pliki wyjściowe ze złożonych argumentów wiersza poleceń.Czy istnieje lepsze (bardziej nowoczesne) narzędzie niż lex/flex do generowania tokenizera dla C++?
Argumenty linii poleceń stały się tak złożone, że zaczęliśmy zezwalać na dostarczanie ich jako pliku, który został przeanalizowany tak, jakby był bardzo dużym wierszem komend, ale składnia była nadal niezręczna. Dodałem więc możliwość analizowania pliku źródłowego za pomocą rozsądniejszej składni.
Użyłem Flex 2.5.4 dla systemu Windows do generowania tokenizera dla tego niestandardowego formatu pliku źródłowego, i zadziałało. Ale nienawidziłem tego kodu. zmienne globalne, konwencja nazw wierd i wygenerowany kod C++ był okropny. Istniejący backend generowania kodu został przyklejony do wyjścia flex - nie używam yacc ani bison.
Zaraz przyjdę do tego kodu i chciałbym użyć lepszego/nowocześniejszego narzędzia. Czy ktoś o tym wie?
- Działa w systemie Windows wiersz polecenia (integracja Visual Studio jest ok, ale używam tworzyć pliki budować)
- Generuje właściwego zamknięty C++ tokenizera. (Bez zmiennych globalnych)
- Używa wyrażeń regularnych do opisywania reguł tokenizacji (zgodnych ze składnią lex a plus)
- Nie zmusza mnie do użycia c-runtime (lub fałszywego) do odczytu pliku. (Analizować z pamięci)
- ostrzega mnie, kiedy moje zasady zmusić tokenizera prezydentom (lub rozwiązuje to automatycznie)
- Daje mi pełną kontrolę nad nazwami zmiennych i metod (tak mogę odpowiadać na moje istniejące konwencją nazewnictwa)
- pozwala mi połączyć wiele parserów w jeden exe bez kolizji nazw
- może generować Unicode (UCS-2 16bit) parser jeśli chcę go
- nie jest integralną tokenizer + parser-generator (Chcę lex zamiennik, a nie zamiennik lex + yacc)
Prawdopodobnie mógłbym żyć z narzędziem, które właśnie wygenerowało tokeny, gdyby to była jedyna dostępna opcja.
Boost.Spirit, Boost.Proto i Boost.Xpressive nie są opcjami? –
@Konrad: Mogą być, nie znam ich. coś, co generuje szablony zamiast klasy C++ byłoby do zaakceptowania. –