Mercurial > emacs
changeset 45944:ca4e3a6d73f4
(Parsing Expressions): Give definition of sexp in terms of syntax classes.
Clarify other text in same node.
author | Richard M. Stallman <rms@gnu.org> |
---|---|
date | Fri, 21 Jun 2002 10:01:58 +0000 |
parents | b699a283b3fa |
children | 9696ee679264 |
files | lispref/syntax.texi |
diffstat | 1 files changed, 24 insertions(+), 20 deletions(-) [+] |
line wrap: on
line diff
--- a/lispref/syntax.texi Fri Jun 21 09:58:32 2002 +0000 +++ b/lispref/syntax.texi Fri Jun 21 10:01:58 2002 +0000 @@ -594,35 +594,39 @@ @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