W "Bustley Rosser's" Logic for Mathematicians "używa notacji, aby uniknąć zbyt wielu nawiasów. Chociaż nie wiem, kiedy logicy zaczynają używać tej notacji, ale wiem, że książka ta została opublikowana po raz pierwszy w 1957 roku, a także J. G. P. Nicod's paper, która została opublikowana w 1916 roku, również używa tej notacji. Jest więc oczywiste, że ma dość długą historię, choć obecnie nie jest to preferowane przez współczesnych logików.Parsing challenge: Notacja dot. Starego logika
W świecie programowania, w językach programowania LISP istnieje duże wyzwanie dla programistów, aby śledzić właściwą (ogromną!) Liczbę nawiasów. Haskell zapewnia operatorowi $
, który zapewnia część funkcjonalności, ale ponieważ nie można powiedzieć, że jest to 2 * $ 3 + 4
, nie jest tak potężny jak kropki (patrz przykłady poniżej). Seriale w języku C używają konwencjonalnego priorytetu operacji, ale w niektórych przypadkach nadal wymagane są nawiasy zagnieżdżone. Zastanawiam się, dlaczego żadne rzeczywiste języki nie używają tej strategii? Próbowałem, ale nie znalazłem nawet gramatyki!
Pozwól mi pokazać przykładowy język kalkulatora zabawek z tylko dwoma operatorami +
i *
, a wszystkie terminy są liczbami całkowitymi.
Przy tym zapisie translater przekazuje następujące przypadki testowe:
1 + 3 .* 2
= (1 + 3) * 2
1 *. 3 + 2
= 1 * (3 + 2)
1 *. 2 +. 2
= (1 * 2) + 2
2 *: 2 + 3 .* 4
= 2 * ((2 + 3) * 4)
cann't wyjaśnić wszystkie szczegół tej notacji, kosztuje prawie 5 stron w książce Rosser za. Ale w genaralnym (i krótkim) kropce .
przed lub po operatorze reprezentuje "separator", aby odepchnąć dwie strony. Dwukropek :
jest silniejszym separatorem, trzy kropki .:
lub :.
jest jeszcze silniejszy, ale mniejszy niż ::
i tak dalej.
Zastanawiam się, jak możemy napisać gramatykę dla powyższego języka, a następnie przeanalizować? Również, chociaż ta notacja została przestarzała, okazało się, że jest ona bardzo czytelna dla programisty. Jakie są jego zalety i wady?
Możesz powiedzieć '(2 *) $ 3 + 4' w Haskell - ale w rzeczy samej, to wprowadza parens jako część plasterka funkcji. –
@ larsmans Wiem, to jest dokładnie to, co powiedziałem "nie tak potężny jak kropki". –