(Parsing Expressions): Give definition of sexp in terms of syntax classes.

Clarify other text in same node.
This commit is contained in:
Richard M. Stallman 2002-06-21 10:01:58 +00:00
parent 857356cb69
commit 6cbdd38bef

View file

@ -594,35 +594,39 @@ expression prefix syntax class, and characters with the @samp{p} flag.
@section Parsing Balanced Expressions
Here are several functions for parsing and scanning balanced
expressions, also known as @dfn{sexps}, in which parentheses match in
pairs. The syntax table controls the interpretation of characters, so
these functions can be used for Lisp expressions when in Lisp mode and
for C expressions when in C mode. @xref{List Motion}, for convenient
expressions, also known as @dfn{sexps}. Basically, a sexp is either a
balanced parenthetical grouping, or a symbol name (a sequence of
characters whose syntax is either word constituent or symbol
constituent). However, characters whose syntax is expression prefix
are treated as part of the sexp if they appear next to it.
The syntax table controls the interpretation of characters, so these
functions can be used for Lisp expressions when in Lisp mode and for C
expressions when in C mode. @xref{List Motion}, for convenient
higher-level functions for moving over balanced expressions.
A syntax table only describes how each character changes the state of
the parser, rather than describing the state itself. For example, a string
delimiter character toggles the parser state between ``in-string'' and
``in-code'' but the characters inside the string do not have any particular
syntax to identify them as such.
For example (note: 15 is the syntax-code of generic string delimiters):
A syntax table only describes how each character changes the state
of the parser, rather than describing the state itself. For example,
a string delimiter character toggles the parser state between
``in-string'' and ``in-code'' but the characters inside the string do
not have any particular syntax to identify them as such. For example
(note that 15 is the syntax code for generic string delimiters),
@example
(put-text-property 1 9 'syntax-table '(15 . nil))
@end example
@noindent
does not tell Emacs that the first eight chars of the current buffer
are a string, but rather that they are all string delimiters and thus
Emacs should treat them as four adjacent empty strings.
are a string, but rather that they are all string delimiters. As a
result, Emacs treats them as four consecutive empty string constants.
The state of the parser is transient (i.e. not stored in the buffer for
example). Instead, every time the parser is used, it is given not just
a starting position but a starting state. If the starting state is not
specified explicitly, Emacs assumes we are at the top level of parenthesis
structure, such as the beginning of a function definition (this is the case
for @code{forward-sexp} which blindly assumes that the starting point is in
such a state.)
Every time you use the parser, you specify it a starting state as
well as a starting position. If you omit the starting state, the
default is ``top level in parenthesis structure,'' as it would be at
the beginning of a function definition. (This is the case for
@code{forward-sexp}, which blindly assumes that the starting point is
in such a state.)
@defun parse-partial-sexp start limit &optional target-depth stop-before state stop-comment
This function parses a sexp in the current buffer starting at