é αÑñá¬Γ«αÑ ßπΘÑßΓóπεΓ ¬«¼á¡ñδ 3-σ Γ¿»«ó:

{\bf a) üẫóδÑ ¬«¼á¡ñδ {\tt MMMlib, ¡á»¿ßá¡δ ¡á C++, ∩ó½∩εΓß∩ τáßΓ∞ε αÑñá¬Γ«αá

{\bf b) îá¬α«ßδ {\tt MACRO\_PROC, »¿ΦπΓß∩ ¡á ∩ºδ¬Ñ {\tt MMM, ¬«¼»¿½¿απεΓß∩ ó »α«µÑßßÑ ¿¡¿µ¿á½¿ºáµ¿¿ αÑñá¬Γ«αá

{\bf c) îá¬α«ßδ {\tt MACRO\_KEYSEQ, ∩ó½∩εΓß∩ »α«ßΓ« »«ß½Ññ«óáΓѽ∞¡«ßΓ∩¼¿ scan-¬«ñ«ó.

\themebigskip %&<<&\centerline{{\bf 1. æΓαπ¬Γπαá ñá¡¡δσ: \centerline{{\bf 1. æΓαπ¬Γπαá ñá¡¡δσ \themeskip %&<<&TPair\_String\_Function ìá ú½«íá½∞¡«¼ πα«ó¡Ñ «»αÑñѽѡ ¼áßß¿ó {\tt CommandArray ñ½¿¡δ {\tt LEN\_COMMAND\_ARRAY ¿º φ½Ñ¼Ñ¡Γ«ó Γ¿»á: %&<<&struct TPair\_String\_Function { \par \halign{ {\tt # \hfil & {\tt // {\it # \hfil \cr struct TPair\_String\_Function $\{$ & \cr \quad char *fName; & ¿¼∩ Σπ¡¬µ¿¿ ¿º MMMlib \cr \quad void (*fRef)(int); & ßßδ½¬á ¡á Σπ¡¬µ¿ε \cr \quad $\$; & \cr %&>>&3 0 3 15 é ¡Ñ¼ σαá¡∩Γß∩ ßß佬¿ ¡á ¬«¼á¡ñδ ¿º {\tt MMMlib.

%&>>&4 0 4 15 \themeskip %&<<&TMacro îá¬α«ßδ Γ¿»«ó {\tt MACRO\_PROC ¿ {\tt MACRO\_KEYSEQ σαá¡Ñ¡∩Γß∩ ó ßΓαπ¬ΓπαÑ %&<<&struct TMacro { \par \halign{ {\tt # \hfil & {\tt // {\it # \hfil \cr struct TMacro $\{$ & \cr \quad short *base; & Γѽ« ¼á¬α«ßá \cr \quad int lbase; & αẼÑα óδñѽѡ¡«⌐ »á¼∩Γ¿ \cr \quad & \cr \quad short \&operator[](int idx); & ßßδ½¬á ¡á base[idx], ñѽáÑΓ realloc \cr \quad $\$; & \cr

%&>>&8 0 8 B Æ¿» ¼á¬α«ßá «»αÑñѽ∩ÑΓß∩ º¡áτÑ¡¿Ñ¼ {\tt base[0] (Γá¼ ½Ñª¿Γ «ñ¡á ¿º ¬«¡ßΓá¡Γ: {\tt MACRO\_PROC ¿½¿ {\tt MACRO\_KEYSEQ).

îá¬α«¬«¼á¡ñδ σαá¡∩Γß∩ ó {\tt short *base; ß½ÑñπεΘ¿¼ «íαẫ¼: 0 «í«º¡áτáÑΓ ¬«¡Ñµ ¼á¬α«ßá, ó«ºóαáΓ ó óδºδóáεΘπε Σπ¡¬µ¿ε.

ù¿ß½á ß 1 ñ« {\tt LEN\_LANGUAGE-1 – ¿ß»«½∞ºπѼδÑ ó ∩ºδ¬Ñ ¬«¡ßΓαπ¬µ¿¿ ΓᬿÑ, ¬á¬ {\tt if, else, do, end, push, eq, ... . äá¡¡δÑ ¬«¼á¡ñδ ¼«úπΓ »α¿ «íαáí«Γ¬Ñ ({\tt Execute) ¿º¼Ñ¡∩Γ∞ ßτÑΓτ¿¬ ¬«¼á¡ñ.

ù¿ß½á ß {\tt LEN\_LANGUAGE ñ« {\tt USER\_FUNC-1 =(LEN\_LANGUAGE+LEN\_COMMAND\_ARRAY)-1 ∩ó½∩εΓß∩ ßßδ½¬á¼¿ ¡á Σπ¡¬µ¿¿ ¿º {\tt MMMlib . 쫼Ñα ß««ΓóÑΓßΓóπεΘÑ⌐ Σπ¡¬µ¿¿ »«½πτáÑΓß∩ »«ßαÑñßΓó«¼ óδτ¿Γá¡¿∩ τ¿ß½á {\tt LEN\_LANGUAGE.

ù¿ß½á í«½∞Φ¿Ñ {\tt USER\_FUNC ∩ó½∩εΓß∩ ßßδ½¬á¼¿ ¡á «»αÑñѽѡ¡δÑ »«½∞º«óáΓѽѼ Σπ¡¬µ¿¿. êσ ¡«¼Ñα ó {\tt CommandUsrArray »«½πτáÑΓß∩ »«ßαÑñßΓó«¼ óδτ¿Γá¡¿∩ τ¿ß½á {\tt USER\_FUNC.

%&>>&2 0 2 1A \themeskip %&<<&TCommandUsr ä½∩ σαá¡Ñ¡¿∩ ßß佫¬ «»αÑñѽѡ ¼áßß¿ó {\tt CommandUsrArray ¿º φ½Ñ¼Ñ¡Γ«ó Γ¿»á %&<<&struct TCommandUsr { \par \halign{ {\tt # \hfil & {\tt // {\it # \hfil \cr struct TCommandUsr $\{$ & \cr \quad char *fName; & ¿¼∩ Σπ¡¬µ¿¿ \cr \quad TMacro fCode; & ¬«ñ Σπ¡¬µ¿¿ \cr \quad & \cr \quad int Execute(int arg); & óδ»«½¡¿Γ∞ fCode \cr \quad $\$; & \cr %&>>&8 0 8 12 ìá ßἫ¼ ñÑ½Ñ {\tt CommandUsrArray ∩ó½∩ÑΓß∩ ¡Ñ ¼áßß¿ó«¼, á »ÑαѼѡ¡«⌐ Γ¿»á {\tt TCommandUsrArray. ä½∩ ñá¡¡«ú« Γ¿»á «»αÑñѽѡá Σπ¡¬µ¿∩ {\tt int AddEntry(char *\_fname, TMacro *\_fcode=0); , ñ«íáó½∩εΘá∩ φ½Ñ¼Ñ¡Γ ¬ ¼áßßß¿óπ. àß½¿ φ½Ñ¼Ñ¡Γ ß ¿¼Ñ¡Ñ¡¼ {\tt \_fname πªÑ ¿¼ÑÑΓß∩, Γ« »α«¿ßσ«ñ¿Γ «í¡«ó½Ñ¡¿Ñ ¬«ñá.

%&>>&1 0 1 12 \themeskip %&<<&TKeyArray ä½∩ «íαáí«Γ¬¿ scan-¬«ñ«ó, »α¿ΦÑñΦ¿σ «Γ ¬½áó¿áΓπαδ ¿ß»«½∞ºπÑΓß∩ ßΓαπ¬Γπαá {\tt KeyArray Γ¿»á {\tt TKeyArray %&<<&struct TKeyArray $\{$ \par \halign{ {\tt # \hfil & {\tt // {\it # \hfil \cr struct TKeyArray $\{$ & \cr \quad TKey *base; & óÑ¬Γ«α ¿º TKey \cr \quad int lbase; & αẼÑα óδñѽѡ¡«⌐ »á¼∩Γ¿ \cr \quad & \cr \quad int AddEntry(int \_scan, int \_fnum); & ñ«íáó¿Γ∞ φ½Ñ¼Ñ¡Γ, ñѽáÑΓ realloc \cr \quad $\$; & \cr %&>>&8 0 8 B

%&<<&TKey \par \halign{ {\tt # \hfil & {\tt // {\it # \hfil \cr struct TKey $\{$ & \cr \quad int scan; & 12-Γ¿ í¿Γ¡δ⌐ scan-¬«ñ \cr \quad int fnum; & ¡«¼Ñα Σπ¡¬µ¿¿ \cr \quad & \cr \quad TKey() $\{$ scan= fnum= -1; $\$ & \cr \quad $\$; & \cr

%&>>&8 0 8 B

è«¡ßΓαπ¬Γ«α {\tt TKey ¿¡¿µ¿á½¿º¿απÑΓ {\tt fnum º¡áτÑ¡¿Ñ¼ -1. ¥Γ« ¿ß»«½ºπÑΓß∩ ñ½∩ «»«º¡áóá¡¿∩ »«ß½Ññ¡Ñú« φ½Ñ¼Ñ¡Γá ó {\tt KeyArray.

%&>>&4 0 4 15

%&>>&9 0 9 0 \themebigskip %&<<&\centerline{{\bf 2. ǽú«α¿Γ¼δ: \centerline{{\bf 2. ǽú«α¿Γ¼δ

%&<<&CommandArray ê¡¿µ¿á½¿ºáµ¿∩ ¼áßß¿óá {\tt CommandArray «ßπΘÑßΓó½∩ÑΓß∩ ñ« ß«ºñá¡¿∩ óßÑσ ñαπú¿σ ßΓαπ¬Γπα ñá¡¡δσ.

%&>>&2 0 2 6 %&<<&KeyArray ê¡¿µ¿á½¿ºáµ¿∩ {\tt KeyArray »α«¿ßσ«ñ¿Γ ó Σπ¡¬µ¿¿ {\tt InitEditorSetup ¬½áßßá {\tt EDITOR »α¿ «íαáí«Γ¬Ñ Σ«½ñá {\tt *COMMAND*. àß½¿ ¿¼∩ ¬«¼á¡ñδ, π¬áºá¡¡«Ñ ó Σá⌐½Ñ ¡áßΓα«⌐¬¿, ß«ñÑনΓß∩ ó ¼áßß¿óÑ {\tt CommandArray, Γ« ó {\tt KeyArray ñ«íáó½∩ÑΓß∩ ÑΘÑ «ñ¿¡ φ½Ñ¼Ñ¡Γ ß ß««ΓóÑΓßΓóπεΘ¿¼¿ scan-¬«ñ«¼ ¿ ßß佬«⌐ ¡á Σπ¡¬µ¿ε. àß½¿ ªÑ Σπ¡¬µ¿∩ ¡Ñ »α¿¡áñ½Ñª¿Γ {\tt MMMlib , Γ« Åα«¿ßσ«ñ¿Γ ó맮ó Σπ¡¬µ¿¿ {\tt TCommandUsrArray::AddEntry, ¬«Γ«αá∩ ¿ΘÑΓ φ½Ñ¼Ñ¡Γ ß Γᬿ¼ ¡áºó᡿Ѽ ó {\tt CommandUsrArray, ¿ Ñß½¿ «¡ ¡á⌐ñÑ¡, Γ« ó«ºóαáΘáÑΓ Ñú« ¡«¼Ñα, á Ñß½¿ ¡Ñ ¡á⌐ñÑ¡, Γ« ñ«íáó½∩ÑΓß ¡«óδ⌐ φ½Ñ¼Ñ¡Γ ¬ {\tt CommandUsrArray ¿ ó«ºóαáΘáÑΓ ¡«¼Ñα ñ«íáó½Ñ¡¡«ú« φ½Ñ¼Ñ¡Γá. Å«ß½Ñ φΓ«ú« ó {\tt KeyArray ñ«íáó½∩ÑΓß∩ ÑΘÑ «ñ¿¡ φ½Ñ¼Ñ¡Γ ß ß««ΓóÑΓßΓóπεΘ¿¼ scan-¬«ñ«¼ ßß佬«⌐ ¡á Σπ¡¬µ¿ε, ¡«¼Ñα ¬«Γ«α«⌐ íδ½ ó«ºóαáΘÑ¡ {\tt TCommandUsrArray::AddEntry.

%&>>&E 0 E 9 %&<<&CommandUsrArray ê¡Σ«α¼áµ¿∩ ñ«íáó½∩ÑΓß∩ ó {\tt CommandUsrArray ñóπ¼∩ ß»«ß«íἿ: ÅÑαóδ⌐ íδ½ «»¿ßá¡ αá¡ÑÑ ¿ φΓ« »α«¿ßσ«ñ¿Γ »α¿ «íαáí«Γ¬Ñ Σ«½ñá {\tt *COMMAND*, ß«ñÑαªáΘÑú« ó ßÑíÑ ¿¡Σ«α¼áµ¿ε « αá߬½áñ¬áσ ¬½áó¿áΓπαδ. æ½ÑñπÑΓ ºá¼ÑΓ¿Γ∞, τΓ« ó φΓ«¼ ß½πτáÑ »α«¿ßσ«ñ¿Γ ñ«íáó½Ñ¡¿Ñ Γ«½∞¬« ¡áºóá¡¿⌐ Σπ¡¬µ¿⌐, á Γѽá Σπ¡¬µ¿⌐ «ßΓáεΓß∩ »πßΓ묨.

Æѽá Σπ¡¬µ¿⌐, á Γá¬ªÑ ¡«óδÑ ¡áºóá¡¿∩ ñ«íáó½∩εΓß∩ »α¿ «íαáí«Γ¬Ñ Σ«½ñá {\tt *MACRO*, ¬«Γ«αδ⌐ ß«ñÑαª¿Γ «»αÑñѽѡ¿∩ ¼á¬α«¬«¼á¡ñ ¡á ∩ºδ¬Ñ {\tt MMM, í½¿º¬«¼ »« ¿ñÑ«½«ú¿¿ ¬ ∩ºδ¬π Forth. ì«óδ⌐ φ½Ñ¼Ñ¡Γ ñ«íáó½∩ÑΓß∩ ¬ {\tt CommandUsrArray »α¿ «»¿ßá¡¿¿ Σπ¡¬µ¿¿ (¡á»α¿¼Ñα {\tt proc fName ). Å«¼¿¼« φΓ«ú« »α¿ ¬«¼»¿½∩µ¿¿ Σπ¡¬µ¿⌐ ¿º ñá¡¡«ú« ∩ºδ¬á óßÑ ¡Ñαáß»«º¡á¡¡δÑ ½Ñ¬ßѼδ ßτ¿ΓáεΓß∩ ó맮óἿ Σπ¡¬µ¿⌐ ¿ ¿σ ¿¼Ñ¡á (ß »πßΓ묨 ΓѽἿ Σ-⌐) ñ«íáó½∩εΓß∩ ¬ {\tt CommandUsrArray.

%&>>&9 0 9 0

%&>>&4 0 4 0

\end % mmm_cmd.log % ..\mmmx.cpp % ..\mmmx.h %&>>&0 0 0 0


This document was generated on February 15, 2023 using texi2html 5.0.