Beim Definieren einer Syntaxtabelle für einen Hauptmodus kann ich sowohl Wortbestandteile als auch Symbolbestandteile definieren.
Wann sollte ich jeden verwenden? Sollte beispielsweise eine Programmiersprache, die Variablen im Fall einer Schlange schreibt foo_bar
, _
Teil eines Wortes oder Symbols sein?
elisp
major-mode
syntax
Wilfred Hughes
quelle
quelle
c-mode
mit emacs gelieferte Standardeinstellung wird_
als Symbolbestandteil verwendet, jedoch nicht als Wortbestandteil. Ich gehe davon aus, dass es dafür einen guten Grund gibt. Ganz zu schweigen von der Fülle an Navigationsbefehlen, die wie erwartet funktionieren. Prinzip der geringsten Überraschung und so weiter.Antworten:
Wortbestandteile: 'w'
Wortteile in menschlichen Sprachen. Diese werden normalerweise in Variablen- und Befehlsnamen in Programmen verwendet. Alle Groß- und Kleinbuchstaben sowie die Ziffern sind typischerweise Wortbestandteile.
Symbolbestandteile: '_'
Zusätzliche Zeichen, die in Variablen- und Befehlsnamen zusammen mit Wortbestandteilen verwendet werden. Beispiele sind die Zeichen '$ & * + -_ <>' im Lisp-Modus, die Teil eines Symbolnamens sein können, obwohl sie nicht Teil englischer Wörter sind. In Standard C ist das einzige Zeichen, das kein Wortbestandteil ist und in Symbolen gültig ist, der Unterstrich "_".
Mit freundlicher Genehmigung von gnu.org
Es kommt darauf an, was Sie erreichen wollen. Ich werde sagen, '_' sollte Teil des Wortes sein. Auf diese Weise wird foo_bar als ein Wort behandelt.
Bitte werfen Sie ein Auge auf diese Frage , es gibt eine interessante Antwort über den Superword-Modus und den Subword-Modus
quelle
_
als Symbolbestandteil behandelt wird , warum schlagen Sie vor, ihn als Wortbestandteil zu behandeln?_
, da dies die Unterscheidung zwischen Wörtern und Symbolen vollständig zunichte macht. Wenn Sie Ihre gerneM-f
,M-b
und Freunde von Identifikatoren zu bewegen und nicht durch Worte, dann eher als Änderung Syntaxtabelle ist der Hauptmodus Sie verwenden sollensuperword-mode
.superword-mode
.Diese Antwort adressiert Ihren Fragentitel: " Was ist der Unterschied zwischen Wörtern und Symbolen ". Es spricht nicht nur den Text Ihrer Frage an, bei der es um die Symbolsyntax geht, die von @Nsukami gut beantwortet wurde.
Es gibt zwei sehr unterschiedliche Bedeutungen des Wortsymbols in Emacs:
Symbolsyntax , die aus Wortbestandteilen und Symbolbestandteilen besteht . Dies kann für jeden Modus gelten, insbesondere für jeden Programmiermodus / jede Programmiersprache. @ Nsukami hat diese Bedeutung recht gut beschrieben.
Emacs-Lisp-Symbole . Dies ist keine Syntaxkategorie. Ein Symbol ist ein Lisp Lisp Einheit oder das Objekt, das bestimmte Eigenschaften aufweist: a Namen , eine plist (Eigenschaftenliste) und möglicherweise ein Wert und eine Funktionsdefinition.
Standardmäßig sind die Wertezelle und die Funktionszelle leer, und die Liste ist die leere Liste (
nil
). Lisp Funktionensymbol-name
,symbol-value
,symbol-function
undsymbol-plist
die Komponenten zurück.Beachten Sie übrigens, dass diese Dinge im Emacs-Handbuch nicht erwähnt werden. Sie werden nur im Elisp-Handbuch behandelt. Und was vielleicht noch wichtiger ist: Es gibt keinen Indexeintrag , der mit " Symbol " für die erste Bedeutung (Syntax) übereinstimmt . Alle Indexeinträge, die den Begriff " Symbol " enthalten, beziehen sich auf die zweite Bedeutung (Lisp-Symbol). Insbesondere gibt es keinen Eintrag, der sowohl " Symbol " als auch " Syntax " enthält. Ob es einen solchen Indexeintrag geben sollte, weiß ich (wahrscheinlich) nicht. Dies kann Ihnen jedoch eine Vorstellung davon geben, wie wichtig Symbole für Lisp als Lisp-Objekte sind .
Weitere Informationen finden Sie unter:
Das Elisp-Handbuch, Knoten
Symbols
Das Elisp-Handbuch, Knoten
Syntax Class Table
Das Glossar im Emacs Wiki.
quelle
Dies wird im ELisp-Handbuch erläutert .
Emacs verwendet die Terminologie von Lisp. Was Lisp und Emacs ein Symbol nennen, nennen viele andere Programmiersprachen einen * Bezeichner. Das ist der Name einer Variablen, Funktion usw.
Ein Wort ist eine Folge von Buchstaben oder Ziffern ohne dazwischenliegende Interpunktion.
In den meisten Programmiersprachen ist
_
neben Buchstaben und Ziffern auch der Unterstrich in Bezeichnern zulässig. Einige Sprachen wie Lisp erlauben mehr. In Programmiersprachen haben Zeichen, wie_
sie in Bezeichnern vorkommen können, die Klasse „Symbolbestandteil“_
. Buchstaben und Ziffern haben die Klasse "Wortbestandteil"w
.Befehle, die auf Wörter einwirken, behandeln eine Folge von Wortbestandteilen als Wort. Befehle, die auf Ausdrücke (z. B.
forward-sexp
) einwirken , werden von ganzen Bezeichnern gleichzeitig verschoben. Die Syntaxhervorhebung behandelt normalerweise alle Symbolbestandteile identisch.quelle