Jak tworzyć a.Net język programowania? [zamknięte]
chcesz poprawić to pytanie? Update the question so it edytując ten post.
Zamknięte 1 rok temu .
Popraw to pytanieStworzyłem kilka różnych pełnych języków programowania przy użyciu różnych dostępnych narzędzi parsowania. Jak jednak ktoś mógłby stworzyć język programowania obsługujący. Net ramy? Czy będę musiał wypisać. Net IL i skompilować to, czy jest wyższy poziom abstrakcji?
Czy jest też łatwy sposób, aby język działał w Visual Studio?
7 answers
Zapraszamy do zapoznania się z projektem Microsoft Research Common Compiler Infrastructure (CCI). Zapewnia wszystko, czego potrzebujesz, aby wygenerować metadane i MSIL dla złożenia. I debugowanie .plik pdb, dość ważny dla poprawienia języka.
Istnieje siostrzany projekt, model kodu CCI i AST, który może być również przydatny, zależy od tego, jak daleko zaszedłeś.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-11-17 23:39:10
Istnieje kompilator LOLCode zbudowany w C#, który może być dobrym punktem wyjścia.
Http://code.google.com/p/lolcode-dot-net/
Jeśli chodzi o implementację w Visual Studio, istnieje silnik widoku open source o nazwie Spark (http://www.sparkviewengine.com / ), które pomogło w osiągnięciu intellisense. Kontekst jest inny, ale lekcja jest taka sama, jest trudna i nie jest to zbyt dobrze udokumentowany proces.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-10-04 18:48:06
Twój kompilator jest odpowiedzialny za konwersję kodu, który dostaje do ILCode. ILCode jest wspólnym językiem, do którego kompilowane są wszystkie języki. NET. Ten kod jest interpretowany przez kompilator JIT w czasie wykonywania. Oczywiście, może polegać na klasach CodeDom w frameworku, aby to osiągnąć, jeśli piszesz kompilator na przykład w C#.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-10-04 18:48:42
Nie wiem, czy to jest to, czego szukasz, ale po miałem pytanie na SO stworzyłem . Net kompilator dla Brainf**k jako excersize ( Część 6 zawiera rzeczywisty kod źródłowy kompilatora i jest również na GitHub)
Zasadniczo, rzeczywisty kompilator może być napisany w dowolnym języku. NET i używać systemu .Odbicie.Emit przestrzeń nazw do tworzenia zestawów, klas, metod itp. i emitują w nich IL.
Rzeczywista praca tworzenia nowy język oczywiście wymaga pisania parsera / lexera/analizatora / czegokolwiek, co może podzielić Twój program na klasy i "karmić" twój kompilator-przykro mi, nie mam w tym doświadczenia, ale sprawdź tę listę zasobów Jak napisać kompilator.
Chcesz przeczytać ECMA-335 , aby dowiedzieć się, jak działa CLI: jakie typy danych obsługuje i jakie polecenia faktycznie wykonuje.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:02:17
Twój kompilator może wypisać albo język CIL assembly, albo assembly (.dll
/ .exe
) plik.
Spójrz na standard Cli (Common Language Infrastructure) , który opisuje CLI (platformę docelową), CIL (język asemblacji) i binarny format plików złożeń.
Nawiasem mówiąc, standard jest również dostępny jako książka z adnotacjami .
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-10-04 17:52:53
Świetnym przykładem integracji własnego języka z Visual Studio jest projekt Lua Language Support .
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-10-04 18:29:06
Czy istnieje wyższy poziom abstrakcji?
Aby być kompletnym, możesz wypuścić C # lub VB.NET. oba Kompilatory są częścią runtime.
Wątpliwe, czy byłby to "prawdziwy" kompilator.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-10-04 18:14:53