summaryrefslogtreecommitdiff
path: root/devdocs/elisp/parsing-expressions.html
blob: 74b1d2fd06c170004f3501f403b42a18dbfb429d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
 <h3 class="section">Parsing Expressions</h3>   <p>This section describes functions for parsing and scanning balanced expressions. We will refer to such expressions as <em>sexps</em>, following the terminology of Lisp, even though these functions can act on languages other than Lisp. Basically, a sexp is either a balanced parenthetical grouping, a string, or a symbol (i.e., a sequence of characters whose syntax is either word constituent or symbol constituent). However, characters in the expression prefix syntax class (see <a href="syntax-class-table">Syntax Class Table</a>) are treated as part of the sexp if they appear next to it. </p> <p>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. See <a href="list-motion">List Motion</a>, for convenient higher-level functions for moving over balanced expressions. </p> <p>A character’s syntax controls how it 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 syntax of characters does not directly say whether they are inside a string. For example (note that 15 is the syntax code for generic string delimiters), </p> <div class="example"> <pre class="example">(put-text-property 1 9 'syntax-table '(15 . nil))
</pre>
</div> <p>does not tell Emacs that the first eight chars of the current buffer are a string, but rather that they are all string delimiters. As a result, Emacs treats them as four consecutive empty string constants. </p> <table class="menu" border="0" cellspacing="0"> <tr>
<td align="left" valign="top">• <a href="motion-via-parsing" accesskey="1">Motion via Parsing</a>
</td>
<td> </td>
<td align="left" valign="top">Motion functions that work by parsing. </td>
</tr> <tr>
<td align="left" valign="top">• <a href="position-parse" accesskey="2">Position Parse</a>
</td>
<td> </td>
<td align="left" valign="top">Determining the syntactic state of a position. </td>
</tr> <tr>
<td align="left" valign="top">• <a href="parser-state" accesskey="3">Parser State</a>
</td>
<td> </td>
<td align="left" valign="top">How Emacs represents a syntactic state. </td>
</tr> <tr>
<td align="left" valign="top">• <a href="low_002dlevel-parsing" accesskey="4">Low-Level Parsing</a>
</td>
<td> </td>
<td align="left" valign="top">Parsing across a specified region. </td>
</tr> <tr>
<td align="left" valign="top">• <a href="control-parsing" accesskey="5">Control Parsing</a>
</td>
<td> </td>
<td align="left" valign="top">Parameters that affect parsing. </td>
</tr> </table><div class="_attribution">
  <p class="_attribution-p">
    Copyright &copy; 1990-1996, 1998-2022 Free Software Foundation, Inc. <br>Licensed under the GNU GPL license.<br>
    <a href="https://www.gnu.org/software/emacs/manual/html_node/elisp/Parsing-Expressions.html" class="_attribution-link">https://www.gnu.org/software/emacs/manual/html_node/elisp/Parsing-Expressions.html</a>
  </p>
</div>