Opis
PrologEns
Projekt
Poniżej zamieszczam wyniki wykonania projektu kolorowania składni języka Prolog w GNU Enscript.
prolog.st
/**
* Name: prolog
* Description: Prolog (PROgramming in LOGic) programming language.
* Author: Pawel Marek <p.marek@student.agh.edu.pl>
*/
state prolog extends HighlightEntry
{
/* Comments. */
/\/\*/ {
comment_face (true);
language_print ($0);
call (c_comment);
comment_face (false);
}
/* Comments. */
/%/ {
comment_face (true);
language_print ($0);
call (eat_one_line);
comment_face (false);
}
/* String constants. */
/'/ {
string_face (true);
language_print ($0);
call (prol_string);
string_face (false);
}
/* String constants. */
/\"/ {
string_face (true);
language_print ($0);
call (c_string);
string_face (false);
}
/* Symbols. */
/+|-|*|\/|\\\\|\^|<|>|=|~|:|\.|,|?|@|#|\$|&/ {
keyword_face (true);
language_print ($0);
keyword_face (false);
}
/* Brackets. */
/\[|\]|\(|\)/ {
function_name_face (true);
language_print ($0);
function_name_face (false);
}
/* Predicates. */
/([A-Z])([a-zA-Z0-9]*)/ {
bold (true);
language_print ($0);
bold (false);
}
/* Numbers. */
/([0-9])/ {
type_face (true);
language_print ($0);
type_face (false);
}
}
state prol_string extends Highlight
{
/\\\\./ {
language_print ($0);
}
/'/ {
language_print ($0);
return;
}
}
/*
Local variables:
mode: c
End:
*/
Sprawozdanie
1. Enscript
Enscript konwertuje pliki tekstowe do formatu PostScript lub innego języka wyjściowego (HTML, RFT, ANSI). Program potrafi zapisać wynik swojego działania w pliku lub wysłać bezpośrednio do drukarki. Jeżeli podczas wywołania nie podano pliku wejściowego enscript przetwarza wejście standardowe (stdin). Enscript może być rozbudowywany do obsługi wielu mediów wyjściowych i posiada szereg opcji konfigurowalnych, które mogą być używane do dostosowywania wydruków do swoich potrzeb.
Jednym ze sposobów wykorzystania programu jest kolorowanie składni. Enscript w najnowszej swojej wersji 1.6.4 posiada obsługę kolorowania składni kilkudziesięciu języków, m.innymi: ADA95, C, C++, Delphi, Fortran, VHDL, HTML. Moim zadaniem było dopisać definicje kolorowania składni języka Prolog.
2. Highlighting rules
Program po zainstalowaniu umieszcza swoje pliki konfiguracyjne w /usr/local/share/enscript. Zagłębiając się dalej w strukturze katalogów /usr/local/share/enscript/hl znajdują się pliki z definicjami kolorowania składni poszczególnych języków. Między nimi znajduje się główny plik kolorowania składni enscript.st w którym znaleźć można wskazówki jak należy pisać nowe reguły.
Aby sprawdzić jakie reguły podświetlania składni podsiada Enscript należy wydać polecenie:
enscript --help-pretty-print
Wywołanie zwraca nazwę języków, krótkie opisy i autorów reguł.
Z powodu braku dokumentacji GNU Enscript dotyczących reguł podświetlania składni podczas pisania projektu korzystałem praktycznie tylko z zaleceń zawartych w pliku enscript.st oraz z analizy istniejących już reguł dla innych języków.
3. Instalacja dodatku
Instalacja reguł podświetlania składni Prologu polega na skopiowaniu pliku prolog.st do katalogu /usr/local/share/enscript/hl gdzie znajdują się inne reguły. Program podczas działania sprawdza czy dane reguły są w katalogu i w razie problemów zgłasza błędy.
4. Przykładowe użycie
Aby skorzystać z podświetlania składni Prologu należy wydać polecenie:
enscript nazwa_pliku -Eprolog --color --output=nazwa_pliku.ps
Opcja -E wskazuje jakie reguły podświetlania składni mają zostać użyte. Druga opcja –color włącza bogatsze wyniki o kolory (domyślnie wyniki są tylko pogrubiane). Ostatnia opcja –output sprawia iż wyniki zapisywane są w pliku o podanej po znaku równości nazwie.
5. Testy
Przykładowe wyniki. Plik wejściowy:
/*
* family.pl
* taken from Bratko, 3rd ed, ch.1, p.17
*
*/
parent(pam,bob).
parent(tom,bob).
parent(tom,liz).
female(pam).
female(liz).
female(pat).
male(tom).
male(bob).
male(jim).
mother(X,Y) :-
parent(X,Y),
female(X).
father(X,Y) :-
parent(X,Y),
male(X).
Plik wynikowy:
Materiały