|
|
pl:miw:miw08_prologens [2008/11/06 11:53] gjn zakonczono |
pl:miw:miw08_prologens [2019/06/27 15:50] |
====== Opis ====== | |
__**Projekt zakończony**__ | |
| |
**Paweł Marek**, <pmarek@student.agh.edu.pl> | |
| |
===== PrologEns ===== | |
Kolorowanie składni języka Prolog dla [[http://www.gnu.org/software/enscript/|GNU Enscript]]. | |
Patrz realizacja dla [[prolog:geshi_prolog|GeSHi]]. | |
| |
| |
====== Projekt ====== | |
| |
Poniżej zamieszczam wyniki wykonania projektu kolorowania składni języka Prolog w GNU Enscript. | |
| |
| |
prolog.st | |
<code> | |
/** | |
* 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: | |
*/ | |
</code> | |
| |
| |
====== 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: | |
<code> | |
enscript --help-pretty-print | |
</code> | |
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: | |
<code> | |
enscript nazwa_pliku -Eprolog --color --output=nazwa_pliku.ps | |
</code> | |
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: | |
<code> | |
/* | |
* 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). | |
</code> | |
| |
Plik wynikowy: | |
| |
{{:pl:miw:prologens.gif|:pl:miw:prologens.gif}} | |
| |
| |
| |
| |
| |
| |
====== Materiały ====== | |
* GNU Enscript Home Page [[http://www.codento.com/people/mtr/genscript/]] | |
* GNU Enscript Manual Page [[http://www.codento.com/people/mtr/genscript/enscript.man.html]] | |
* GNU Enscript v1.6.4 [[http://www.iki.fi/mtr/genscript/enscript-1.6.4.tar.gz]] | |
* Writing New Highlighting Definitions in GNU Enscript | |
[[http://lavica.fesb.hr/cgi-bin/info2html?(enscript)Writing%20New%20Highlighting%20Definitions]] | |
* Output Languages in GNU Enscript | |
[[http://lavica.fesb.hr/cgi-bin/info2html?(enscript)Output%20Languages]] | |
* Guildelines for writing new highlighting rules for the GNU Enscript | |
/usr/local/share/enscript/hl/enscript.st | |
| |
| |
| |
| |
| |
| |