Jakie szczególne zalety i wady każdego sposobu pracy z gramatyką języka programowania? Dlaczego / Kiedy powinienem wyrzucić własny? Dlaczego / Kiedy powinienem używać generatora?
Niedawno zanurzyłem się w świat parserów, chcąc stworzyć własny język programowania. Odkryłem jednak, że istnieją dwa nieco odmienne podejścia do pisania parserów: Parser Generators i Parser Combinators. Co ciekawe, nie udało mi się znaleźć żadnego zasobu, który wyjaśniłby, w jakich przypadkach które podejście jest lepsze; Przeciwnie, wiele zasobów (i osób) …
Myślę, że rozumiem cel AST i zbudowałem już kilka struktur drzewiastych, ale nigdy AST. Jestem w większości zdezorientowany, ponieważ węzły są tekstem, a nie liczbą, więc nie mogę wymyślić dobrego sposobu na wprowadzenie tokena / łańcucha, gdy parsuję jakiś kod. Na przykład, kiedy patrzyłem na diagramy AST, zmienna i jej …
Szukałem na temat pakietu kompilator gcc Wikipedia tutaj , kiedy to pojawiły się: GCC zaczęło od użycia parserów LALR wygenerowanych za pomocą Bison, ale stopniowo przestawiło się na ręcznie pisane parsery rekurencyjnego opadania; dla C ++ w 2004 r. oraz dla C i Objective-C w 2006 r. Obecnie wszystkie interfejsy …
Często zastanawiałem się, dlaczego podczas tworzenia HTML nie wybrano ścisłego analizowania. Przez większość historii Internetu przeglądarki zaakceptowały każdy rodzaj znaczników i starały się je przeanalizować. Proces ten obniża wydajność, umożliwia pisanie bełkotów i utrudnia zaprzestanie przestarzałych funkcji. Czy istnieje konkretny powód, dla którego HTML nie jest ściśle analizowany?
Z radością zauważyłem, że C ++ 11 ma std::sto@rodzinę funkcji do łatwego rozpakowywania ints / floats / longs cokolwiek z ciągów. Dziwi mnie jednak fakt, że przeciwieństwo nie zostało wdrożone. Dlaczego komitet normalizacyjny nie zawiera std::itosrodziny funkcji do przechodzenia od ints / floats / cokolwiek (wstecz) do stringów?
Jak ogólnie traktuje się komentarze w językach programowania i znacznikach? Piszę parser dla jakiegoś niestandardowego języka znaczników i chcę przestrzegać zasady najmniejszego zaskoczenia , więc staram się ustalić ogólną konwencję. Na przykład, czy komentarz osadzony w tokenie powinien „zakłócać” token, czy nie? Zasadniczo jest coś takiego: Sys/* comment */tem.out.println() ważny? …
Był zafascynowany czytaniem o tekstowej grze przygodowej Hobbit, która zawierała niezwykle solidny parser o nazwie „Inglish”: ... Inglish pozwolił pisać zaawansowane zdania, takie jak: „zapytaj Gandalfa o ciekawą mapę, a następnie weź miecz i zabij nim trolla”. Analizator składni był złożony i intuicyjny, wprowadzając zaimki, przysłówki („złośliwie atakuj goblina”), interpunkcję …
Pamięć (i blokady zasobów) są zwracane do systemu operacyjnego w deterministycznych punktach podczas wykonywania programu. Przepływ sterujący programu sam w sobie wystarczy, aby wiedzieć, gdzie z pewnością dany zasób może zostać zwolniony. Dokładnie tak, jak ludzki programista wie, gdzie pisać, fclose(file)gdy program z nim skończy. GC rozwiązują ten problem, ustalając …
Konwencjonalne analizatory składniowe zużywają cały wkład i tworzą pojedyncze drzewo analizy. Szukam takiego, który zużywa ciągły strumień i tworzy parsowany las [ edytuj: zobacz dyskusję w komentarzach na temat tego, dlaczego takie użycie tego terminu może być niekonwencjonalne ]. Moje przeczucie mówi, że nie mogę być pierwszą osobą, która potrzebuje …
Przydzielono mi zadanie wdrożenia języka specyficznego dla domeny dla narzędzia, które może stać się dość ważne dla firmy. Język jest prosty, ale nie trywialny, pozwala już na zagnieżdżanie pętli, łączenie łańcuchów itp. I jest praktycznie pewne, że wraz z postępem projektu zostaną dodane inne konstrukcje. Wiem z doświadczenia, że ręczne …
Próbuję zrozumieć kompilację i interpretację, krok po kroku, zastanawiając się nad całkowitym obrazem. Podszedłem więc do pytania podczas czytania http://www.cs.man.ac.uk/~pjj/farrell/comp3.html tego artykułu To mówi : Kolejny etap kompilatora nosi nazwę Parser. Ta część kompilatora rozumie gramatykę języka. Odpowiada za identyfikację błędów składniowych i tłumaczenie bezbłędnego programu na wewnętrzne struktury danych, …
Jestem w trakcie tworzenia własnego języka programowania, który robię do celów edukacyjnych. Napisałem już leksyk i parser rekurencyjnego zapisu dla podzbioru mojego języka (obecnie obsługuję wyrażenia matematyczne, takie jak + - * /i nawiasy). Analizator składni oddaje mi Streszczenie Drzewo Składni, w którym wywołuję Evaluatemetodę, aby uzyskać wynik wyrażenia. Wszystko …
To pytanie zostało przeniesione z przepełnienia stosu, ponieważ można na nie odpowiedzieć w programie Software Engineering Stack Exchange. Migrował 7 lat temu . Problem: uruchamiaj polecenia w postaci łańcucha. przykład polecenia: /user/files/ list all; równoważny: /user/files/ ls -la; inny: post tw fb "HOW DO YOU STOP THE TICKLE MONSTER?;" równoważny: …
Chcę zbudować ogólny parser reguł dla systemów RPG typu długopis i papier. Reguła może zwykle obejmować od 1 do N jednostek 1 do N ról kostki i obliczanie wartości na podstawie wielu atrybutów jednostki. Na przykład: Gracz ma STR 18, jego obecnie wyposażona broń daje mu premię +1 STR, ale …
Używamy plików cookie i innych technologii śledzenia w celu poprawy komfortu przeglądania naszej witryny, aby wyświetlać spersonalizowane treści i ukierunkowane reklamy, analizować ruch w naszej witrynie, i zrozumieć, skąd pochodzą nasi goście.
Kontynuując, wyrażasz zgodę na korzystanie z plików cookie i innych technologii śledzenia oraz potwierdzasz, że masz co najmniej 16 lat lub zgodę rodzica lub opiekuna.