Dlaczego w konstrukcji kompilatora należy wyeliminować lewą rekurencję w gramatyce? Czytam, że dzieje się tak, ponieważ może powodować nieskończoną rekurencję, ale czy nie jest to prawdą również w przypadku prawidłowej gramatyki rekurencyjnej?
Chcę przeanalizować zdefiniowane przez użytkownika języki specyficzne dla domeny. Te języki są zazwyczaj zbliżone do notacji matematycznych (nie analizuję języka naturalnego). Użytkownicy definiują swoje DSL w notacji BNF, w następujący sposób: expr ::= LiteralInteger | ( expr ) | expr + expr | expr * expr Wejście podobne 1 + …
Język asemblera jest konwertowany na język maszynowy przez asembler. Dlaczego kompilator miałby konwertować język wysokiego poziomu na asembler? Czy nie można go bezpośrednio przekonwertować z języka wysokiego poziomu na kod maszynowy?
Według strony Wikipedii na temat statycznego pojedynczego przypisania (SSA) , SSA jest używany przez duże i dobrze znane projekty, takie jak LLVM, GCC, MSVC, Mono, Dalvik, SpiderMonkey i V8, podczas gdy strona o projektach używa stylu kontynuacji przejścia (CPS) jest trochę brakuje w porównaniu. Mam pojęcie, że CPS jest preferowany …
Możliwe jest parsowanie dokumentu za pomocą pojedynczego przejścia z automatu stanów. Jaka jest korzyść z dwóch przejść, tj. posiadanie leksera do konwersji tekstu na tokeny i parsera do testowania reguł produkcyjnych dla tych tokenów? Dlaczego nie mieć pojedynczego przejścia, które stosuje reguły produkcji bezpośrednio do tekstu?
Pracuję nad kompilatorem dla języka konkatenatywnego i chciałbym dodać obsługę wnioskowania typu. Rozumiem Hindleya-Milnera, ale nauczyłem się teorii typów, więc nie jestem pewien, jak ją dostosować. Czy następujący system jest dźwiękowy i można go w sposób zdecydowanie wywnioskować? Termin jest literałem, kompozycją terminów, cytatem terminu lub prymitywem. e::=x∣∣ee∣∣[e]∣∣…e::=x|ee|[e]|… e ::= …
Czy jest jakaś różnica między nimi? Zgodnie z książką Ullmana , kompilatory konwertują jeden język na inny (zwykle na niskim poziomie), podobnie jak asembler. Czym się różnią?
Znam ideę podstawowej eliminacji rekurencji ogona, w której funkcje, które zwracają bezpośredni wynik wywołania do siebie, można przepisać jako pętle iteracyjne. foo(...): # ... return foo(...) Rozumiem również, że jako szczególny przypadek funkcja może być nadal przepisana, jeśli wywołanie rekurencyjne jest zawinięte w wywołanie do cons. foo(...): # ... return …
Czy wyjście parsera musi być drzewem, czy może to być również ogólny wykres? Co więcej, czy istnieje jakiś język, który jest wiarygodny i używa ogólnej reprezentacji grafów zamiast drzew do ich składni?
Często pracuję z lexer / parserami , w przeciwieństwie do kombinatora parserów i widzę osoby, które nigdy nie brały udziału w analizie składniowej, pytają o przetwarzanie danych binarnych. Zazwyczaj dane są nie tylko binarne, ale także kontekstowe. Zasadniczo prowadzi to do posiadania tylko jednego rodzaju tokena, tokena bajtu. Czy ktoś …
Mam problem z tym ćwiczeniem: Niech G będzie następującą dwuznaczną gramatyką dla rachunku λ: E → v | λv.E | EE | (E) gdzie E jest pojedynczym nieterminalnym symbolem, λv.E oznacza abstrakcję względem zmiennej v w E, a EE oznacza aplikację. Zdefiniuj gramatykę LL (1) G ′, tak aby L …
Myślę, że rozumiem, w jaki sposób wylesianie zużywa i tworzy listę w tym samym czasie (z funkcji składania i rozwijania - zobacz tę dobrą odpowiedź na CodeReview tutaj ), ale kiedy porównałem to z wpisem wikipedia o technice , o której mówił „usuwanie” drzewa ”z programu. Rozumiem, w jaki sposób …
Ostatnio studiuję na temat projektowania kompilatorów. Dowiedziałem się o dwóch rodzajach gramatyki: jedna to gramatyka LL, a druga to gramatyka LR. Znamy również fakty, że każda gramatyka LL jest LR, czyli gramatyka LL jest właściwym podzbiorem gramatyki LR. Pierwszy jest używany podczas analizy z góry na dół, a drugi jest …
To pytanie z Dragon Book. Oto gramatyka: S→AaAb∣BbBaS→AaAb∣BbBaS \to AaAb \mid BbBa A→εA→εA \to \varepsilon B→εB→εB \to \varepsilon Pytanie dotyczy tego, jak pokazać, że jest to LL (1), ale nie SLR (1). Aby udowodnić, że jest to LL (1), próbowałem zbudować jego tabelę analizującą, ale otrzymuję wiele produkcji w komórce, …
W komentarzu do Nauka F #: Jakie książki w innych językach programowania można przetłumaczyć na F #, aby nauczyć się funkcjonalnych koncepcji? Makarius stwierdził: Zauważ, że podejście „CPS” wyrządziło wielką szkodę wydajności w SML / NJ. Jego model oceny fizycznej narusza zbyt wiele założeń wbudowanych w sprzęt. Jeśli weźmiesz duże …
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.