我经常听到这个网站上有人谈论“语义”命令与“句法”命令,并且认为“语义”命令在某种程度上更好。我不太明白他们在说什么,你能解释一下并给出一些例子来说明两者的区别吗?
我到底应不应该关心这个?
答案1
认为,纯粹为了争论,当时正在排版一本书,书中经常引用出版物的名称——科学,这纽约时报等等。在所见即所得的编辑器中,可以突出显示期刊名称,然后单击我按钮。使用句法标记,如普通的 HTML,可以将期刊名称包裹在代码中,表示要将其斜体化: <i>Science</i>
。相反,使用语义标记,可以定义一个命令,说“此文本是出版物的标题,将以某种方式处理”。然后,如果有人想改变文档的样式,可以调整定义该命令的代码,并且更改将反映在整个文档中,而不必手动修改每个实例(并冒着遗漏某些内容的风险)。
这还有一个额外的好处,就是人们可以在命令中构建额外的功能。“出版物名称”命令可以做一些更复杂的操作,而不是像“把这段文字变成斜体”,而是“把这段文字变成斜体,并将相应的条目添加到书籍的索引中”。这样,想要找到这本书引用某个出版物的所有地方的读者纽约人文章或项目IEEE 爱情诗汇刊可以直接翻到后面并查看页面。
这个想法的 LaTeX 实现看起来是这样的,使用makeidx
包裹实现索引:
\newcommand{\journal}[1]{\emph{#1}\index{#1@\emph{#1}}}
\journal
以这种方式定义命令后,我们可以输入\journal{Science}
,LaTeX 将为我们处理视觉格式和索引辅助功能。
编辑以添加:是的,这很容易变得过度。但这很有趣!
答案2
语义的定义是“具有或与意义有关”。句法的定义是“通过语法结构描述”。当表达式简单时,阅读任何结构都相当容易。当表达式复杂时,阅读由表达式含义而不是符号顺序定义的事物要容易得多。
\set{a, b, c}
是语义的,它告诉你有一组三样东西:a、b 和 c。相反,它\{a, b, c\}
告诉你有一个左括号,后面跟着一些符号 a,后面跟着一些逗号,后面跟着...,但谁知道这些符号是什么意思呢?假设正确定义了“set”宏,两者都会扩展为同一件事,但前者在源代码中更易于阅读、理解和调试。
答案3
考虑一下hello!
,bon jour!
sup!
。自然语言和计算机语言分类法(除其他外)做出了以下区分:
- 词汇:每个词在任何词汇顺序中占据不同的位置(例如,字典)
- 句法:解析这些术语的大多数语法(或“生成规则”)会有所不同,因为三个语法中的两个会吞掉两个标记(不要忘记
!
),而另一个会消耗三个。需要澄清的是,语法(或语法)是一组规则,用于控制术语在有效程序中如何以及在何处合法地相互关联 - 语义:三句话概括打算或者意思是一样的东西
- 务实:虽然这些在词汇、句法和语义上有效的话语的产生者都希望传达问候,但它们的使用背景、地点或模式将决定它们的“效率”(不仅在程序中,而且在生产者、消费者和模式的文化守护者的社区中)。
当然,这种分类法同样适用于 TeX/LaTeX 以及其他可能存在或不存在的语言(将单词音位为了词汇如果你愿意的话,可以用纯粹的口语来表达。