Ao definir uma tabela de sintaxe para um modo principal, posso definir constituintes de palavras e constituintes de símbolos.
Quando devo usar cada um? Por exemplo, dada uma linguagem de programação que escreve variáveis no caso de cobra foo_bar
, deve _
fazer parte de uma palavra ou símbolo?
elisp
major-mode
syntax
Wilfred Hughes
fonte
fonte
c-mode
que acompanha o emacs usa_
como componente de símbolo, mas não como componente de palavra. Então, espero que haja uma boa razão para isso. Sem mencionar a infinidade de comandos de navegação que funcionarão conforme o esperado. Princípio da menor surpresa e tudo isso.Respostas:
Constituintes da palavra: 'w'
Partes de palavras em línguas humanas. Eles são normalmente usados em nomes de variáveis e comandos em programas. Todas as letras maiúsculas e minúsculas e os dígitos são tipicamente constituintes das palavras.
Componentes do símbolo: '_'
Caracteres extras usados nos nomes de variáveis e comandos, juntamente com os constituintes da palavra. Os exemplos incluem os caracteres '$ & * + -_ <>' no modo Lisp, que podem fazer parte do nome de um símbolo, mesmo que não façam parte das palavras em inglês. No padrão C, o único caractere não constituinte de palavras válido em símbolos é sublinhado "_".
Cortesia de gnu.org
Depende do que você deseja alcançar. Eu direi, '_' deve fazer parte da palavra. Dessa forma, foo_bar será tratado como uma palavra.
Por favor, olhe para essa pergunta , há uma resposta interessante falando sobre o modo superword e modo subword
fonte
_
como um constituinte do símbolo, por que você sugere tratá-lo como um constituinte da palavra?_
, pois isso derrota completamente a distinção entre palavras e símbolos. Se você gosta de seusM-f
,M-b
e amigos para passar por identificadores em vez de palavras, então ao invés de mudar a tabela sintaxe a maior de modo que você deve usarsuperword-mode
.superword-mode
.Esta resposta aborda o título da sua pergunta: " Qual é a diferença entre palavras e símbolos ". Ele não se refere apenas ao corpo da sua pergunta, que trata da sintaxe de símbolos, que foi bem respondida por @Nsukami.
Existem dois significados muito diferentes para a palavra símbolo no Emacs:
sintaxe de símbolo , que envolve caracteres constituintes da palavra mais caracteres constituintes do símbolo . Isso pode se aplicar a qualquer modo, em particular a qualquer modo / idioma de programação. @Nsukami descreveu esse significado muito bem.
Símbolos do Emacs-Lisp . Esta não é uma categoria de sintaxe. A Lisp símbolo é uma entidade Lisp, ou objeto, que tem certas características: um nome , um plist (lista de propriedades) e, potencialmente, um valor e uma função de definição.
Por padrão, a célula de valor e a célula de função estão vazias, e a lista é a lista vazia (
nil
). Funções Lispsymbol-name
,symbol-value
,symbol-function
, esymbol-plist
devolver os componentes.Observe, BTW, que não há menção dessas coisas no manual do Emacs; eles são abordados apenas no manual Elisp. E mais significativamente, talvez: não há entrada de índice que corresponda a " símbolo " para o primeiro significado (sintaxe). Todas as entradas de índice que incluem o termo " símbolo " se referem ao segundo significado (símbolo Lisp). Em particular, não há entrada que contenha " símbolo " e " sintaxe ". Se deve haver uma entrada desse índice, eu não sei (provavelmente). Mas isso pode lhe dar uma idéia da importância do Lisp de símbolos como objetos Lisp .
Para mais informações, consulte:
O manual Elisp, nó
Symbols
O manual Elisp, nó
Syntax Class Table
O glossário no Emacs Wiki.
fonte
Isso é explicado no manual ELisp .
O Emacs usa a terminologia do Lisp. O que Lisp e Emacs chamam de símbolo é o que muitas outras linguagens de programação chamam de * identificador. Esse é o nome de uma variável, função, etc.
Uma palavra é uma sequência de letras ou dígitos sem pontuação intermediária.
A maioria das linguagens de programação permite o
_
caractere sublinhado nos identificadores, além de letras e dígitos. Alguns idiomas, como o Lisp, permitem mais. Nas linguagens de programação, caracteres como os_
que podem aparecer nos identificadores têm a classe “constituinte do símbolo”_
; letras e dígitos têm a classe “constituinte da palavra”w
.Os comandos que atuam nas palavras tratam uma sequência de constituintes da palavra como uma palavra. Os comandos que atuam nas expressões (por exemplo
forward-sexp
) são movidos por identificadores inteiros de uma só vez. O realce da sintaxe geralmente trata todos os constituintes do símbolo de forma idêntica.fonte