scala – 当关键字在不同的上下文中表示不同的东西时,这是一个上
根据
this answer => Scala中的关键字有两个不同的含义:1表示函数类型:Double => Double和2创建一个lambda表达式:(x:Double):Double => 2 * X.
这与正式语法有什么关系,即这会使Scala上下文敏感吗? 我知道most languages are not context free,但我不确定我所描述的情况是否与此有关. 编辑: 好像我不太了解上下文敏感的语法.我知道生产规则应该是什么样子,以及它们的含义(“只有当A被这些符号包围时才适用这种生产”),但我不确定它们与实际(编程)语言的关系. 我认为我的困惑源于阅读“乔姆斯基引入这个术语,因为一个词的含义可能取决于它的背景”,并且我连接=>在引用中使用术语“单词”,并且它的两个用法是两个单独的上下文. 如果一个答案可以解决我的困惑,那就太好了. 解决方法
我已经处理了形式语言理论已经有一段时间,但我会咬人.
“无上下文”意味着相应语法中所需的生产规则没有“上下文”.这并不意味着特定符号不能出现在不同的规则中. 解决编辑:换句话说(并且更加非正式地),决定语言是无上下文还是上下文敏感,归结为不要查看特定“单词”或“单词”的“含义”.相反,它相当于查看该语言中所有合法表达式的集合,并且只能通过考虑组件“单词”彼此之间的位置关系来查看是否可以“编码”它们.这基本上是Pumping Lemma检查的内容. 例如: S → Type"="Body Type → "Double" Type → "Double""=>""Double" Body → Lambda Body → NormalBody NormalBody → "x" Lambda -> "x""=>"NormalBody 其中S当然是起始符号,大写的ID是非终结符号,引用的字符串是终端.显然,这可以生成如下字符串: Double=>Double=x=>x 但语法仍然是context-free. 就这样,就像观察到非终结“=>”可以出现在程序的两个“位置”,不会使Scala上下文敏感. 但是,这并不意味着: >整个Scala语言都是无上下文的, 最后一件事特别相关,因为你在形式语言的(nomen omen)语境中提到了“含义”. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |