加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

scala – 当关键字在不同的上下文中表示不同的东西时,这是一个上

发布时间:2020-12-16 18:56:01 所属栏目:安全 来源:网络整理
导读:根据 this answer = Scala中的关键字有两个不同的含义:1表示函数类型:Double = Double和2创建一个lambda表达式:(x:Double):Double = 2 * X. 这与正式语法有什么关系,即这会使Scala上下文敏感吗? 我知道most languages are not context free,但我不确定
根据 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语言都是无上下文的,
>它是上下文敏感的 – 它可能更复杂,
>如果您想将Scala的语义编码为语法,您最终会得到无上下文或上下文敏感的语法.

最后一件事特别相关,因为你在形式语言的(nomen omen)语境中提到了“含义”.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读