Update of /project/climacs/cvsroot/papers/ilc2005/syntax In directory common-lisp.net:/tmp/cvs-serv28137
Modified Files: climacssyntax.tex Log Message: MORE SYNTAX
Date: Sat May 21 22:14:00 2005 Author: bmastenbrook
Index: papers/ilc2005/syntax/climacssyntax.tex diff -u papers/ilc2005/syntax/climacssyntax.tex:1.10 papers/ilc2005/syntax/climacssyntax.tex:1.11 --- papers/ilc2005/syntax/climacssyntax.tex:1.10 Sat May 21 18:32:16 2005 +++ papers/ilc2005/syntax/climacssyntax.tex Sat May 21 22:14:00 2005 @@ -58,33 +58,38 @@ \section{Introduction}
The field of advanced text editors is a crowded one, with a long -history and an apparent ability to cause passionate argument. Climacs is philosophically part of the Emacs editor tradition, which has spawned many variants with many different approaches to buffer management, incremental redisplay, and syntax analysis. +history and an apparent ability to cause passionate argument. Climacs is philosophically part of the Emacs editor tradition, which has spawned many variants with many different approaches to buffer management, incremental redisplay, and syntax analysis. Emacs itself traces its lineage to TECO, where Emacs was originally implemented as a set of TECO macros. Climacs is compared to several interesting variants of Emacs in Table \ref{table:editorcompare}.
-\begin{itemize} -\item TECO -\item emacs (Zmacs) (emacs time line) \cite{greenberg} -\item some kind of interlispy/smalltalky structure editor? -\item Z -- the 95% text editor \cite{woodZ}. Note that WiB didn't - win! -\item Plan9 / Acme (mouse-oriented) \cite{Pike94} -\end{itemize} +\begin{figure*} \begin{center} +\begin{tabular}{|c|c|c|c|c|} +\hline \textbf{Editor} & \textbf{Buffer Implementation} & \textbf{Syntax Analysis} & \textbf{Language} +\ +\hline TECO & Gap Buffer & Unknown & Assembly + TECO Macros +\ +\hline Zmacs & Probably doubly-linked list of lines & None & MacLisp +\ +\hline GNU Emacs & Gap Buffer & Regular Expressions & C + Emacs Lisp +\ +\hline Hemlock & Doubly-linked list of lines & None & Common Lisp +\ +\hline FRED & Gap Buffer & None & PPC Assembly + Common Lisp +\ +\hline Deuce & Doubly-linked lists of lines & Unknown & Dylan +\ +\hline Climacs & Multiple & Multiple & Common Lisp +\\hline +\end{tabular} +\caption{Implementation strategies of multiple Emacs variants} \end{center} \label{table:editorcompare} \end{figure*}
-Discuss lameness of emacs-like regexoid analysis in e.g. CL mode; -maybe mention how it falls over dramatically in perl mode (where -context starts really mattering) -\begin{itemize} -\item non-locality leading to confusion in \verb+#| |#+ -\item paren-in-column-1 hack (and its workaround in docstrings: - \verb+(+) -\end{itemize} +Climacs' syntax analysis is a flexible protocol which can be implemented with a full language lexer and parser. GNU Emacs, the most commonly used Emacs-like editor, uses regular expressions for its syntax analysis. Because these regular expressions are applied lazily and not on the whole buffer, constructs such as Common Lisp's nestable \verb+#| |#+ block comments will often confuse the regular expressions. If the parser starts after the opening \verb+#|+ then the closing \verb+|#+ will be treated as the start of an escaped symbol name. Even if the regular expression parses the whole block comment correctly, other expressions can still match on the contents of the comment, leading to issues when the first character in a column in the block comment is the start of a definition. Emacs users quickly learn to insert a space before the open paren to work around Emacs' font-lock deficiencies.
The Climacs text editor is a combination of frameworks for buffer representation and parsing parsing, loosely coupled with a CLIM-based display engine. It includes the Flexichain library \cite{flexichain}, which provides an editable sequence representation and mark (cursor) -management based on a circular gap buffer; and an implementation of a +management based on a linked lists of lines, some of which are represented as a circular gap buffer; and an implementation of a slight modification of the Earley parsing algorithm \cite{earley}, to -assist in the creation of syntax-aware editing modes. +assist in the creation of syntax-aware editing modes. An application can combine a particular implementation of the buffer protocol, the syntax protocol, and its own display methods to produce a sophisticated editor for a particular language.
The Climacs buffer protocol, which provides a standard interface to common text editor buffer operations, uses the Flexichain library; we