我正在设计一种编程语言,它有三种引用的实体:字符串和C中的字符,以及符号(打算用作查找键的内部字符串等等),我认为这是Lisp最受欢迎的特性之一。目前,我对这些代码有以下语法:
"*" // String
'*' // Character
`*` // Symbol我很喜欢,但也有一些潜在的问题:
因此,考虑到这些潜在的问题,我想得到一些反馈,人们认为哪种选择更可取:
发布于 2012-02-08 21:28:25
我认为潜在的混乱是一个严重的问题。如果您已经发现自己混淆了回引和单引号,那么想想将来有多少代码作者和读者会犯同样的错误。
许多使用反引号作为特殊语法的语言似乎将其保留在相对罕见的用法中。我可以推测原因,但是如果你期望符号会被大量使用,你可以把它当作使用其他语法的暗示。
因此,对于多项选择奖金问题,我更倾向于3号或4号而不是#1或#2,以消除混淆的原因。当你需要一个特殊的商调操作符时,你可以保留回引号.
发布于 2012-03-20 17:19:43
Smalltalk还区分了这三种情况,并使用了以下语法:
'strings are in single quotes'
"comments are in double quotes. Yes, comments!"
$a "is the character a, dollar-sign prefixes characters"
#symbol "is a symbol, prefixed by a hash"除了获得一些符号的潜在困难(抱歉,欧洲同胞!)它确实有一种非常规但令人愉快的语法,即对字符串使用单引号,因为它(在美国键盘上)不需要按移位键才能到达,而且你键入的字符串比字符多得多(使用双引号的注释有点奇怪,但可以说,人们可以忍受较长的注释键笔触,因为它们的输入心态与代码不同。)
确实有几种方法可以处理它,但是请记住每种类型的稀有性和用例。字符串将被大量使用,并且应该具有最简单的语法。字符使用起来比较少见。符号的使用将取决于您的语言允许或需要多少元编程。
您也可以在编译时执行一些技巧,这取决于您可以根据需要通过隐式转换将单个字符字符串转换为char或char到单字符字符串。在大多数高级语言中,直接使用实际的char类型的需求是相当少见的。
另一个选项是使用带标记的字符串。例如,C#有"regular strings"和@"non-escaping strings that ignore things like \n"。D语言使用r"this is a string"实现了同样的目的。它们非常适合符号重字符串,如regexp或目录名。字符可以使用c"A",符号可以使用s"symbol"。字母作为运算符是一项棘手的工作,但它为程序员提供了一个非常容易的助记符,而且对于lex来说也不是很难,因为在大多数语言中,没有空格,字符串文字就永远不会直接跟随符号。
发布于 2013-02-16 21:17:44
由于char类型的实例只有一个字符长,您真的需要将它用匹配的标记括起来吗?如果您在撇号中括号符号,则只能使用单个回引号在字符前面。如果用户将它们混合在一起,就会出现大的语法错误消息,比如C程序员忘记了结束大括号。
https://softwareengineering.stackexchange.com/questions/133785
复制相似问题