(Parsing Expressions): Give definition of sexp in terms of syntax classes.
Clarify other text in same node.
This commit is contained in:
parent
857356cb69
commit
6cbdd38bef
1 changed files with 24 additions and 20 deletions
|
@ -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
|
||||
|
|
Loading…
Add table
Reference in a new issue