Qual é a diferença entre palavras e símbolos?

7

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?

Wilfred Hughes
fonte
11
O padrão c-modeque 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.
Vamsi

Respostas:

4

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

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?

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

Nsukami _
fonte
2
Como o modo c trata _como um constituinte do símbolo, por que você sugere tratá-lo como um constituinte da palavra?
Wilfred Hughes
@WilfredHughes Desculpe, mas ninguém aqui estava falando sobre o modo c. Claro, ele deve ter cuidado com o modo que está trabalhando. E como eu disse na minha resposta, é apenas no caso que ele queira tratar foo_bar como uma palavra. Por favor, verifique essa pergunta
Nsukami _
6
Por favor, não use sintaxe de palavras para caracteres como _, pois isso derrota completamente a distinção entre palavras e símbolos. Se você gosta de seus M-f, M-be 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 usar superword-mode.
Stefan
5
Ao escrever seu modo principal, não faça com que símbolos e palavras sejam a mesma coisa. Muitas pessoas usam a distinção, e você dificultaria a vida deles. Pessoas que não gostam da distinção já têm a opção superword-mode.
Malabarba 12/10
3
@ WilfredHughes: na verdade, a definição de palavras nunca deve ser alterada.
Stefan #
5

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:

  1. 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.

  2. 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 Lisp symbol-name, symbol-value, symbol-function, e symbol-plistdevolver 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:

Desenhou
fonte
muito obrigado por explicar os 2 significados diferentes da palavra símbolo.
Nsukami _
2

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.

Gilles 'SO- parar de ser mau'
fonte