Deklaratív programozás - Emacs telepítési lépések

A VIK Wikiből

Ez az oldal a korábbi SCH wikiről lett áthozva.

Ha úgy érzed, hogy bármilyen formázási vagy tartalmi probléma van vele, akkor, kérlek, javíts rajta egy rövid szerkesztéssel!

Ha nem tudod, hogyan indulj el, olvasd el a migrálási útmutatót.


Egy rövid összefoglaló emacs, Sicstus Prolog és moSML rendszerek összehangolásáról Windows XP alatt.

Felhasznált programverziók:

  • GNU EMacs 21.3
  • Sicstus Prolog 3.12.3
  • moSML 2.01, a beépített 3.33-as smlmode csomaggal

Emacs:

1 Az emacs -ot a c:\emacs könyvtárba csomagoltam ki, majd futtattam a c:\emacs\bin\addpm.exe telepítőfájlt. A programhoz tartozó .emacs konfigurációs fájlt a HOME környezeti változó által meghatározott helyre kell tenni - ez nálam a c:\emacs könyvtárra lett felvéve.

Sicstus Prolog 3.12.3

2 A Prologot a .emacs fájl könnyebb kitöltése érdekében a c:\emacs\SICStus Prolog könyvtárba telepítettem. 3 Beszúrtam a .emacs fájlba a következő sorokat:

(load "c:/emacs/SICStus Prolog/emacs/sicstus_emacs_init")
(setq load-path
	(cons (expand-file-name "c:/emacs/SICStus Prolog/emacs")
			load-path))
(autoload 'run-prolog "prolog" "Start a Prolog sub-process." t)
(autoload 'prolog-mode "prolog" "Major mode for editing Prolog programs." t)
(setq prolog-use-sicstus-sd t)
(setq auto-mode-alist (cons '("\\.pl$" . prolog-mode) auto-mode-alist))

moSML 2.01

4 Az moSML-t a c:\emacs\mosml könyvtárba telepítem. A fájlok másolása utána a következő beállításokat kell megtenni:

    • A PATH környezeti változónak tartalmaznia kell az moSML elérési útját, ez nálam: c:\emacs\mosml\bin
    • Fel kell venni egy új környezeti változót MOSMLLIB néven, értéknek pedig a mosml library könyvtárat kell megadni. Ez nálam: c:\emacs\mosml\lib
    • Ezen beállítások tesztelhetőek úgy, hogy a DOS parancssorból egy mosml-t beírunk. Ha minden működik, akkor elindul a mosml.

5 Az mosml telepítési könyvtárán belül van egy utility/sml-mode-3.3b könyvtár, azon belül egy sml_site.el ott (a jelenlegi változatban) az 56. sort ki kell cserélni (értelemszerűen cserélve az mosml telepítési útvonalát): * Régi: =(defvar sml-lisp-directory "/usr/share/emacs/site-lisp/sml-mode")= * Új: =(defvar sml-lisp-directory "c:/emacs/mosml/utility/sml-mode-3.3b")= 6 Ahhoz, hogy az sml-lel kapcsolatos súgó elérhető legyen az emacsban, a utility/sml-mode-3.3b könyvtárból át kell másolni a sml-mode.info fájlt a telepített emacs info könyvtárába (nálam __c:\emacs\info__) 7 Ezután a .emacs fájlt kell kiegészíteni az alábbiaknak megfelelően:

    • Ahhoz, hogy az emacs az sml-fájlok megnyitásakor összekapcsolja a fájlt a fordítóval, és kiszínezze a kódot, az alábbi sorokat kell beilleszteni a .emacs fájlba (útvonal értelemszerűen cserélendő, a ~ karakternél megtört sorokat a fájlban nem kell törni):
(load-file "c:/emacs/mosml/utility/sml-mode-3.3b/sml-site.el")
(add-hook 'sml-load-hook '(lambda()
				 (require 'sml-font)
				 (load-library "sml-mosml")))

(global-font-lock-mode t)
(setq font-lock-maximum-decoration t)

;;;
;;; Mode specific keywords
;;;
(font-lock-add-keywords
 'sml-mode
 '(
	;; Simple keywords
	"\\<\\(not\\|andalso\\|orelse\\)\\>"
	;; (data)type declarations
	("\\<\\(type\\|datatype\\)\\>\\( +\\(''?_?[a-z]+\\|\\sw+\\)\\( +\\sw+\\)*\\)"
	 (1 font-lock-keyword-face)
	 (2 font-lock-type-face))
	;; variable declarations
	("\\<\\(val\\) +\\(\\sw+\\)"
	 (1 font-lock-keyword-face)
	 (2 font-lock-variable-name-face))
	("! *\\(\\sw+\\)" 1 font-lock-variable-name-face)
	("\\(\\sw+\\) *:=" 1 font-lock-variable-name-face)
	;; function declarations
	("\\<\\(fun\\|and\\)\\> +\\(\\sw+\\)"
	 (1 font-lock-keyword-face)
	 (2 font-lock-function-name-face))
	("| *\\(\\sw+\\)[^=\n]*=\\([^>]\\|$\\)" 1 font-lock-function-name-face)
	;; Fully specified function calls
	("\\([A-Za-z]\\sw*\\)\\.\\([A-Za-z_]\\sw*\\)"
	 (1 font-lock-type-face)
	 (2 font-lock-function-name-face))
	;; Character constants
	("#\".[^\"]*\"" . font-lock-string-face)
	;; Exceptions
	("\\(exception\\|raise\\|handle\\)[ (]+\\(\\sw+\\|_\\)" 2 font-lock-variable-name-face)
	("\\<\\(Bind\\|Chr\\|Domain\\|Div\\|Fail\\|Graphic\\|Interrupt\\|Io\\|Match\\|Option\\|Ord\\|Overflow\\|Size\\|Subscript\\ ~ 
|SysErr\\)\\>" . font-lock-variable-name-face)
	;; Builtin functions
	("\\<\\(a\\(bs\\|pp\\)\\|before\\|c\\(eil\\|hr\\|oncat\\)\\|div\\|explode\\|f\\(loor\\|old[lr]\\)\\|h\\(d\\|elp\\)\\|i\\ ~ 
(gnore\\|mplode\\)\\|length\\|m\\(ap\\|od\\)\\|null\\|o\\(rd\\)?\\|print\\(Val\\)?\\|r\\(ev\\|ound\\)\\|s\\(ize\\|tr\\)\\|t\\ ~ 
(l\\|runc\\)\\)\\>" . font-lock-builtin-face)
	;; Builtin types
	("\\(\\<\\(bool\\|char\\|exn\\|int\\|order\\|real\\|\\(sub\\)?string\\|unit\\|word8?\\)\\>\\|''?_?[a-z]+\\)\\( +\\sw+\\)*" . ~
font-lock-type-face)
	;; User defined types with type operators
	("\\sw*\\( +\\(array\\|frag\\|list\\|option\\|ref\\|vector\\)\\)+\\>" . font-lock-type-face)
	("[^:]:[ (]*\\(\\sw+\\)" 1 font-lock-type-face)
	;; Builtin constants
	("\\[ *\\]" . font-lock-constant-face)
	("\\<\\(nil\\|true\\|false\\|\\(ANTI\\)?QUOTE\\|NONE\\|SOME\\|LESS\\|EQUAL\\|GREATER\\)\\>" . font-lock-constant-face))) 
    • Ahhoz pedig, hogy az előadáson látható módon újabb panelen nyissa meg a fordítót, még a következő sorokat kell mellékelni:
(add-hook 'sml-mode-hook
	'(lambda ()
		(setq sml-nested-if-indent t
		sml-dedicated-frame nil)))

Részletes leírások


Hibaforrások:

  • Az elérési utak PATH-hoz adásakor a különböző elérési utak közé nem szabad szóközt tenni.
  • A .emacs állomány és az SML-illesztő állomány szerkesztésekor a Windows alatt szokásos \ helyett / vagy \\ karakterekkel kell elválasztani a különböző mappaszinteket.
  • Ha kiderül, hogy egy környezeti változó nem került beállításra, az érintett alkalmazásokat újra kell indítani, különben nem veszik tudomásul a környezeti változó létrejöttét/módosulását.

A végleges konfigurációs fájl

A létrehozott .emacs fájl - itt már csak az elérési utakat kell frissíteni.

-- Stampie - 2006.05.23