[nem-pl] Re: Gdzie znalazłem konwencje leksykalne?
Michal Moskal
malekith at pld-linux.org
Mon Oct 6 19:25:44 CEST 2003
On Mon, Oct 06, 2003 at 06:47:43PM +0200, rzyjontko wrote:
> Michal Moskal napisał:
> >
> > Lepiej npc/ncc/lexer.cs, ostatecznie npc/lexer.mll, który może być
> > bardziej czytelny, ale jest mniej obowiązujący ;-) W szczególności
> > operatory są traktowane podobnie jak identyfikatory -- jako ciągi
> > kraczków zaczynające się od pewnych określonych krzaczków. Dodatkowo
> > niektóre operatory są keywords (|, <-, =>, -> i chyba cośtam jeszcze,
> > npc/ncc/parser.jay).
>
> Nie za bardzo rozumiem w jakim sensie operatory miałyby być słowami
> kluczowymi? K&R wyróżnili operatory jako osobne jednostki leksykalne.
> Czy nemerle ma mieć takie coś jak SML, że funkcje, których nazwy są
> "symboliczne" mogą być infiksowe? Z lexer.cs i lexer.mll wynika, że
> operatory są osobną kategorią leksykalną.
To jest tak: są dwa rodzaje identyfikatorów -- zwykłe i infiksowe.
Różnią się one tym, że infiksowe składają się z krzaków a zwykłe z
liter. Obie kategorie dzielą na się na normalne identyfikatory (foo,
bar, ++, -:- etc) oraz zarezerwowane (match, type, |, =>). Priorytet
identyfikatora infixowego zależy od pierwszego znaku.
Dodatkowo, żeby bardziej wszystko skomplikować, niektóre infiksowe
identyfikatory zarezerwowane (np. *) mogą być używane jak normalne
infiksowe.
To wszystko jest mniej więcej tak samo jak w OCamlu.
W tej chwili:
Identyfikatory infixowe zarezerwowane: * = ? | <- -> =>,
przy czym * zachowuje się jakby nie był zarezerwowany.
Identyfikatory zwykłe zarezerwowane: [patch lexer.cs, na końcu].
> Zauważyłem też, że niektóre nazwy typów, co do których myślałem, że są
> słowami kluczowymi są zdefiniowane w bibliotece standardowej.
Uhm, w nemerle.vim są, żeby były lepiej widoczne.
> Natomiast nasunęło mi się takie (być może naiwne) pytanie. Słowem
> kluczowym jest "and", ale "or" już nie jest - w SMLu było "andalso" i
> "orelse", ale dlaczego to już nie pamiętam. Czy brak or'a ma takie
> samo podłoże?
"and" służy do łączenia kilku wzajemnie rekurencyjnych definicji. W
szczególności nie jest operatorem. && oraz || kiedyś będą (to nie mogą
być zwykłe funkcje, ze względu na wymaganą leniwość obliczeń).
[...]
> A przy okazji mam jeszcze jedną sprawę. FAQ jest podzielone na trzy
> sekcje pytań, ale tak na prawdę wszystkie mogłyby się znaleźć w
> "Why?". Jak pierwszy raz to czytałem, to pomyślałem, że nazwałbym to
> raczej ADVOCACY.
No bo "Why?" to pierwsze, podstawowe pytanie jakie się nasuwa.
> A jeśli już jest FAQ, to musi czegoś dotyczyć: to
> jest FAQ języka, kompilatora, biblioteki, całego projektu?
W sumie nie wiem. Chwilowo jest wszystkiego po trochu, potem można
podzielić. No opinion.
> Jak tylko opanuję subversion, to wrzucę nemerle.el. Na razie tylko
> koloruje składnię, ale reszta jest kwestią czasu.
Super!
--
: Michal Moskal :: http://www.kernel.pl/~malekith : GCS {C,UL}++++$ a? !tv
: When in doubt, use brute force. -- Ken Thompson : {E-,w}-- {b++,e}>+++ h
More information about the devel-pl
mailing list