Jak tworzyć a.Net język programowania?

Stworzył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 framework? 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?

Author: Telavian, 2010-10-04

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ś.

 13
Author: Hans Passant,
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.

 10
Author: NerdFury,
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#.

 6
Author: Femaref,
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.

 5
Author: Michael Stum,
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 .

 4
Author: stakx,
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 .

 2
Author: Mike Schenk,
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.

 1
Author: Henk Holterman,
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