Piszę optymalizator dla języka podobnego do JavaScript i muszę wybrać reprezentację kodu pośredniego. Oczywistym / typowym wyborem w dzisiejszych czasach jest Static Single Assignment (SSA). Jednak implementacja nowoczesnego kompilatora w C omawia również funkcjonalną formę pośrednią, co w zasadzie oznacza przejście na czystą funkcjonalność dla reprezentacji pośredniej (czysto pod względem …
Zamknięte. To pytanie jest nie na temat . Obecnie nie przyjmuje odpowiedzi. Chcesz poprawić to pytanie? Zaktualizuj pytanie, aby było tematem dotyczącym wymiany stosów inżynierii oprogramowania. Zamknięte 6 lat temu . Jestem bardzo zainteresowany teoriami języków programowania i zamierzam zrobić doktorat w tym temacie, ale chcę dowiedzieć się więcej o …
Jeśli dobrze pamiętam kurs mojego kompilatora, typowy kompilator ma następujący uproszczony zarys: Analizator leksykalny skanuje (lub wywołuje funkcję skanowania) kod źródłowy znak po znaku Ciąg znaków wejściowych jest sprawdzany pod kątem poprawności ze słownikiem leksemów Jeśli leksem jest ważny, jest on następnie klasyfikowany jako token, któremu odpowiada Analizator składni sprawdza …
Mam istniejący język, który muszę przenieść na nową platformę. Prawdopodobnie spróbuję tego, zmieniając zaplecze istniejącego kompilatora. Ponowne napisanie backendu wymaga znacznej ilości pracy. Nie widzę sposobu na rozbicie tego na sensowne historie bez naruszenia kryteriów INVEST. Nie widzę, jak każda historia może być negocjowalna - wszystkie są wymagane do działającego …
Uczyłem się F # i zaczyna to wpływać na to, jak myślę, kiedy programuję w C #. W tym celu używam rekurencji, gdy czuję, że wynik poprawia czytelność i nie mogę sobie wyobrazić, że kończy się przepełnieniem stosu. To prowadzi mnie do pytania, czy kompilatory mogą automatycznie konwertować funkcje rekurencyjne …
Odpowiedzi na to pytanie są dziełem społeczności . Edytuj istniejące odpowiedzi, aby poprawić ten post. Obecnie nie akceptuje nowych odpowiedzi ani interakcji. Istnieje kilka podcastów z wykładami z uniwersytetów. Szukam „innych” podcastów. Czy są jakieś podcasty bez wykładu na temat rozwoju kompilatora?
Artykuł w Wikipedii na temat języków opartych na prototypach zawiera następujący akapit: Prawie wszystkie systemy oparte na prototypach są oparte na językach interpretowanych i dynamicznie typowanych. Systemy oparte na statycznie typowanych językach są jednak technicznie wykonalne. W jaki sposób system typów statycznych nakłada ograniczenia lub wprowadza złożoność w języku opartym …
Zainspirowany tym pytaniem . Słyszałem, że niektóre bardzo wczesne wersje kompilatorów C na komputery osobiste (chyba około 1980 r.) Znajdowały się na dwóch lub trzech dyskietkach, więc aby skompilować program, najpierw trzeba było włożyć dysk z „pierwszym przejściem”, uruchomić „pierwsze przejście”, następnie przejdź na dysk z „drugim przejściem”, uruchom to, …
Zamknięte. To pytanie jest nie na temat . Obecnie nie przyjmuje odpowiedzi. Chcesz poprawić to pytanie? Zaktualizuj pytanie, aby było tematem dotyczącym wymiany stosów inżynierii oprogramowania. Zamknięte 4 lata temu . Motywowało mnie pytanie dotyczące kompilatora jako tematu i pomyślałem, że zadam to pytanie. Słyszałem od kilku osób, że mają …
Zamknięte . To pytanie musi być bardziej skoncentrowane . Obecnie nie przyjmuje odpowiedzi. Chcesz poprawić to pytanie? Zaktualizuj pytanie, aby skupiało się tylko na jednym problemie, edytując ten post . Zamknięte 5 lat temu . Jakiś czas temu słyszałem, że istniał kompilator, który próbował naprawić błędy składniowe poprzez analizę kontekstu …
Wiele kompilatorów ma komunikaty ostrzegawcze ostrzegające programistów o potencjalnych błędach w czasie wykonywania, błędach logicznych i wydajnościowych. W większości przypadków szybko je naprawiasz, ale co z nieusuwalnymi ostrzeżeniami? Jak radzisz sobie z nieusuwalnymi ostrzeżeniami? Czy przepisujesz fragment kodu, czy przepisujesz go w „długi, bezhackowy sposób”, czy wyłączasz ostrzeżenia razem? Jaka …
Chodzi mi o to, w jaki sposób przechodzimy od szablonu T add(T a, T b) ...do wygenerowanego kodu? Zastanawiałem się nad kilkoma sposobami osiągnięcia tego celu, przechowujemy funkcję ogólną w AST, Function_Nodea następnie za każdym razem, gdy jej używamy, przechowujemy w oryginalnym węźle funkcji jej kopię ze wszystkimi typami Tpodstawionymi …
Zastanawiałem się, dlaczego C ++ jest dobrym wyborem do napisania kompilatora. Oczywiście, C jest również dobry do tego celu, ponieważ wiele kompilatorów jest napisanych w C lub C ++, ale tym razem bardziej interesuję się C ++. Jakieś dobre powody? Szukałem tego w Internecie, ale nie mogę znaleźć dobrych powodów.
Dlaczego pośrednia reprezentacja LLVM (LLVM IR) jest bardziej złożona niż drzewiasta? Alternatywnie, dlaczego implementacje językowe są ukierunkowane na LLVM IR, a nie na AST? Nie próbuję zadawać jednocześnie dwóch różnych pytań, jeśli tak to wygląda. Wydaje mi się, że zarówno programiści, jak i programiści biblioteki doszli do konsensusu, że API …
Piszę swój pierwszy język programowania, który jest zorientowany obiektowo i do tej pory dobrze tworzy pojedynczą „klasę”. Ale powiedzmy, że chcę mieć lekcje, powiedz ClassAi ClassB. O ile ci dwaj nie mają ze sobą nic wspólnego, wszystko jest dobrze. Powiedzmy, że ClassAtworzy - ClassBto stawia 2 powiązane pytania: -Jak to …
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.