[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