From: Richard M. Stallman Date: Fri, 21 Jun 2002 10:01:58 +0000 (+0000) Subject: (Parsing Expressions): Give definition of sexp in terms of syntax classes. X-Git-Tag: ttn-vms-21-2-B4~14509 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=6cbdd38befb162339ca946e07b2484f6433af3d3;p=emacs.git (Parsing Expressions): Give definition of sexp in terms of syntax classes. Clarify other text in same node. --- diff --git a/lispref/syntax.texi b/lispref/syntax.texi index bc3ac9c36bb..0d7c1cd0364 100644 --- a/lispref/syntax.texi +++ b/lispref/syntax.texi @@ -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. - -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.) +are a string, but rather that they are all string delimiters. As a +result, Emacs treats them as four consecutive empty string constants. + + 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