Czy istnieje język programowania, w którym można ustawić własne konfiguracje składni, i przekonwertowałby kod na wybrany język?
Na przykład wybrałbyś określone konfiguracje, takie jak „bloki indeksowane Pythona”, [a,b,c]
inicjuje tablice, ^
potęgowanie i inne. Skrypt przekonwertuje go na odpowiednik wybranego języka.
programming-languages
syntax
Dokkat
źródło
źródło
Odpowiedzi:
Tak, ale prawdopodobnie nie tak, jak myślisz.
Lisp i jego krewni mają potężne systemy makr, które pozwalają ci przeprowadzać dowolne transformacje na twoim źródle, więc w zasadzie możesz używać makr (i makr czytnika, na poziomie postaci), aby tworzyć dowolne rozszerzenia, które ci się podobają. Języki konkatenatywne (i języki autorów w powiązanych obszarach) mają potencjał do podobnej siły metaprogramowania . Dobrym przykładem tego jest Forth , w którym wiele konstrukcji składniowych (takich jak komentarze) może być zdefiniowanych przez użytkownika. Dla współczesnego, nie-ezoterycznego przykładu, podjęto wysiłek, aby zapewnić Perlowi 6 lepszą obsługę w stosunku do Perla 5 również dla składni zdefiniowanej przez użytkownika .
źródło
operator[]
wielu argumentów lub wprowadzanie nowych operatorów, jak w Haskell; ale wątpię, by komisja zrozumiała poprzednie kwestie.Brzmi jak programowanie koncepcyjne .
Nie znam go, ale XL jest językiem specjalnie do niego zaprojektowanym.
Lisp i Forth obsługują również programowanie koncepcyjne, chociaż mniej niż XL. Sugeruję Lisp, ponieważ jest bardzo praktyczny i skuteczny. Najważniejszą rzeczą jest jasna i elastyczna składnia, a nie notacja, którą zapewnia Lisp.
Możesz być zainteresowany takim językiem jak Haskell, który ma bardzo elastyczną, ale jednolitą składnię.
źródło
Nic mi nie wiadomo.
Nie wydaje mi się, aby byłby to szczególnie dobry pomysł - jedną z głównych zalet standardowej składni językowej jest to, że wiele osób może ją odczytać, a jeśli każdy wynalazłby własną składnię, nikt nie byłby w stanie zrozumieć kodu innego użytkownika. .... więc ten język może być dobrą zabawą dla hobbystów, ale nie ma większego zastosowania do niczego praktycznego.
Prawdopodobnie najbliższą rzeczą będzie Lisp, gdzie system makr pozwala pisać własne konstrukcje językowe w bardzo elastyczny sposób. Normalnie nadal trzymałbyś się składni Lisp, ale możesz skutecznie przedefiniować wszystko, jeśli naprawdę chcesz.
W rezultacie Lisps są szczególnie popularni przy wdrażaniu DSL. Dobrym przykładem jest ten dostęp do danych DSL w Clojure (Korma), który dba o cały kod płyty głównej wymagany do dostępu do bazy danych.
źródło
Scala jest często używana w ten sposób do tworzenia DSL, języków specyficznych dla domeny.
Dzieje się tak głównie dlatego, że Scala nie ma operatorów, a składnia wywołująca metodę Scala może być skrócona. Na przykład:
5 jest obiektem typu Integer. Aby obliczyć 5 plus 7, możesz napisać
val ans = 5.add (7) z wyjątkiem tego, że metoda dodawania faktycznie nosi nazwę „+”, więc napiszesz:
val ans = 5. + (7), ale w Scali nie trzeba dołączać „.” w wywołaniach metod lub w nawiasach „()” wokół argumentów, aby wywołać metodę + na obiekcie 5, piszesz
val ans = 5 + 7, co działa idealnie, ponieważ Scala nie ma operatorów, którzy kolidowaliby z twoim sprytnym schematem nazewnictwa metod. Teraz rozszerz ten pomysł na własne klasy i obiekty, w tym fakt, że możesz „przesłonić” metody takie jak +, a także stworzyć własne metody o nazwie >>> lub ::! lub @ * @ lub zwykłe nazwy tekstowe, takie jak fantazyjne.
źródło
Nie oznacza to, że powinieneś go używać, ponieważ wciąż jest w większości eksperymentalny, ale jednym z interesujących ostatnich paradygmatów programowania jest Programowanie zorientowane na język (LOP).
Siergiej Dmitriew wyjaśnia to bardziej szczegółowo .
Taka jest jego ideologia, ale praktycznie sprowadza się do tego, że wspiera zachowanie, o które prosisz. Możesz:
Najbardziej aktywnym środowiskiem programistycznym, jakie znam po przestrzeganiu tego paradygmatu, jest bezpłatny Meta Programming System (MPS) firmy JetBrains.
W rzeczywistości zaczyna też być wykorzystywany w oprogramowaniu komercyjnym, więc być może zaczyna się wychodzić z fazy „eksperymentalnej”:
źródło
Języki specyficzne dla domeny są dość często używane w społeczności Tcl. Na przykład wcale nie jest rzadkością zobaczyć program Tcl, który zawiera zarówno C, jak i SQL jako osadzone DSL (za pośrednictwem pakietów Critcl i Sqlite). Jedynym ograniczeniem wbudowanego DSL jest to, że znacznie lepiej jest, jeśli język osadzony równoważy nawiasy klamrowe, a to okazuje się być naprawdę nieuciążliwym wymaganiem w praktyce!
Innym językiem ułatwiającym DSL jest Standard ML, który pozwala na dostęp do surowych tokenów z ogólnego tokenu systemu (od momentu, w którym identyfikatory są konwertowane na słowa kluczowe). To sprawia, że robi szeroką klasę DSL proste - pod warunkiem, że słuchać niektóre z podstawowych zasad składniowych SML, zwłaszcza w odniesieniu do uwag, smyczki i granice Token - i jest w rzeczywistości używany intensywnie w wielu kluczowych aplikacji napędową języku (dowody twierdzeń itp.)
Nie wszystkie języki sprawiają, że jest to takie proste. W szczególności języki, które automatycznie analizują zawartość wzmocnionych haseł (wiele z nich!) Nie mogą tego zrobić, dlatego wymagają zbudowania DSL przez nadpisujące operatory, poprzez umieszczenie podjęzyka w ciągu lub za pomocą preprocesora, który przepisuje DSL na coś, co może być obsługiwane w języku hosta.
źródło
AFAIU szukasz języków, które pomogą Ci napisać własny DSL (język specyficzny dla domeny). Jest wielu dobrych kandydatów. Osobiście poleciłbym Ruby lub Io, ponieważ oferują one 1) łatwe przeciążanie operatora, 2) metaprogramowanie i 3) mechanizmy zastępcze
method_missing
, których można użyć do stworzenia własnego API. Na przykład spójrz na sqldsl , DSL napisany w Ruby, który generuje SQL poprzez czytanie kodu Ruby.źródło
Właściwie nie używałem go jako takiego, ale jeśli dobrze pamiętam, TXL jest specjalnie zaprojektowany do tłumaczenia kodu źródłowego. Jako taki, powinieneś być w stanie używać go do określania sposobu tłumaczenia z twojego języka i / lub rozszerzeń językowych na dowolny docelowy język rzeczywisty.
Wygląda na to, że gramatyka jest dostępna dla Javascript. Ale, nie używając go wcześniej, nie jestem pewien, jak to by ci pomogło.
źródło
Istnieje ładny preprocesor o nazwie PPWizard, dość potężny. Gdy nauczysz się jego składni, możesz tworzyć definicje makr, by kierować reklamy na różne języki - nie żeby to było niezawodne lub zabawne w tej kwestii, ale jest to przydatne narzędzie.
źródło
Być może szukasz kompilatora kompilatora. Kompilator kompilatora przyjmuje definicję języka zapisaną w języku formalnym i tworzy kompilator dla tego języka.
Zajrzyj na http://en.wikipedia.org/wiki/Compiler-compiler
źródło
Jednym z powszechnych sposobów częściowej personalizacji języka programowania jest użycie preprocesora makr. Na przykład możesz uruchomić „dokkat-lang” przez preprocesor C przed umieszczeniem wyniku w miejscu, w którym pobrałoby go jakieś środowisko javascript.
To, co możesz zrobić, zależy od zaawansowania twojego preprocesora. Zauważ, że wczesne wersje C ++, Objective C i różne języki eksperymentalne zostały wykonane przez wstępne przetworzenie kodu źródłowego przed przekazaniem do podstawowego zestawu narzędzi kompilatora C.
źródło