Al definir una tabla de sintaxis para un modo principal, puedo definir los constituyentes de las palabras y los constituyentes de los símbolos.
¿Cuándo debo usar cada uno? Por ejemplo, dado un lenguaje de programación que escribe variables en caso de serpiente foo_bar
, ¿debería _
ser parte de una palabra o símbolo?
elisp
major-mode
syntax
Wilfred Hughes
fuente
fuente
c-mode
que viene con emacs se usa_
como un componente de símbolo pero no como un componente de palabra. Así que espero que haya una buena razón para eso. Sin mencionar la gran cantidad de comandos de navegación que funcionarán como se esperaba. Principio de menor sorpresa y todo eso.Respuestas:
Componentes de la palabra: 'w'
Partes de palabras en lenguas humanas. Normalmente se usan en nombres de variables y comandos en programas. Todas las letras mayúsculas y minúsculas, y los dígitos, son típicamente componentes de palabras.
Componentes del símbolo: '_'
Caracteres adicionales utilizados en nombres de variables y comandos junto con componentes de palabras. Los ejemplos incluyen los caracteres '$ & * + -_ <>' en modo Lisp, que pueden ser parte del nombre de un símbolo aunque no sean parte de palabras en inglés. En el estándar C, el único carácter que no es un componente de la palabra que es válido en los símbolos es el subrayado "_".
Cortesía de gnu.org.
Depende de lo que quieras lograr. Diré, '_' debería ser parte de la palabra. De esa manera, foo_bar será tratado como una palabra.
Eche un vistazo a esa pregunta , hay una respuesta interesante que habla sobre el modo superword y el modo subword
fuente
_
como un componente de símbolo, ¿por qué sugiere tratarlo como un componente de palabra?_
, ya que eso anula por completo la distinción entre palabras y símbolos. Si te gustanM-f
,M-b
y amigos para moverse por identificadores más que por palabras, entonces en lugar de cambio de la tabla de sintaxis del modo mayor que debe usarsuperword-mode
.superword-mode
.Esta respuesta aborda el título de su pregunta: " ¿Cuál es la diferencia entre palabras y símbolos ". No solo se refiere al cuerpo de su pregunta, que trata sobre la sintaxis de los símbolos, que ha sido bien respondida por @Nsukami.
Hay dos significados muy diferentes de la palabra símbolo en Emacs:
sintaxis de símbolos , que involucra caracteres constituyentes de palabras más caracteres constitutivos de símbolos . Esto puede aplicarse a cualquier modo, en particular a cualquier modo / lenguaje de programación. @Nsukami describió este significado bastante bien.
Símbolos Emacs-Lisp . Esta no es una categoría de sintaxis. Un símbolo Lisp es una entidad u objeto Lisp, que tiene ciertas características: un nombre , un plist (lista de propiedades), y potencialmente un valor y una definición de función .
Por defecto, la celda de valor y la celda de función están vacías, y la lista es la lista vacía (
nil
). Funciones Lispsymbol-name
,symbol-value
,symbol-function
, ysymbol-plist
devuelven los componentes.Tenga en cuenta, por cierto, que no se mencionan estas cosas en el manual de Emacs; están cubiertos solo en el manual de Elisp. Y más significativamente, tal vez: no hay una entrada de índice que coincida con " símbolo " para el primer significado (sintaxis). Todas las entradas de índice que incluyen el término " símbolo " se refieren al segundo significado (símbolo Lisp). En particular, no hay ninguna entrada que contenga tanto " símbolo " como " sintaxis ". Si debería haber una entrada de índice, no lo sé (probablemente). Pero esto puede darle una idea de la importancia para Lisp de los símbolos como objetos Lisp .
Para más información, ver:
El manual de Elisp, nodo
Symbols
El manual de Elisp, nodo
Syntax Class Table
El Glosario en Emacs Wiki.
fuente
Esto se explica en el manual de ELisp .
Emacs usa terminología de Lisp. Lo que Lisp y Emacs llaman un símbolo es lo que muchos otros lenguajes de programación llaman un identificador *. Ese es el nombre de una variable, función, etc.
Una palabra es una serie de letras o dígitos sin signos de puntuación intermedios.
La mayoría de los lenguajes de programación permiten el
_
carácter de subrayado en los identificadores, además de letras y dígitos. Algunos idiomas, como Lisp, permiten más. En los lenguajes de programación, los caracteres_
que pueden aparecer en los identificadores tienen la clase "constituyente de símbolo"_
; las letras y los dígitos tienen la clase "constituyente de la palabra"w
.Los comandos que actúan sobre palabras tratan una secuencia de componentes de palabras como una palabra. Los comandos que actúan sobre expresiones (p
forward-sexp
. Ej. ) Se mueven por identificadores completos a la vez. El resaltado de sintaxis generalmente trata todos los componentes del símbolo de manera idéntica.fuente