4

在 PowerShell 语言规范中,语法有一个术语称为“主表达式”。

主要表达式:
    价值
    会员访问
    元素访问
    调用表达式
    后增量表达式
    减量后表达式

从语义上讲,主要的表达方式是什么?

4

4 回答 4

1

据我了解,这有两个部分:

  1. 形式文法分解诸如表达式之类的东西,因此运算符优先级是隐含的。

    例如。如果语法有

    expression:
      value
      expression * expression
      expression + expression
      …
    

    需要有一个单独的机制来定义*具有比+. 当使用工具直接将语法转换为分词器/解析器时,这一点变得很重要。1

  2. 有很多不同的特定规则(考虑 PowerShell 中的运算符数量),使用更少的规则会更难理解,因为每个规则都会很长。


1我怀疑 PowerShell 不是这种情况,因为它对上下文非常敏感(快速与命令模式,然后考虑调用非内置可执行文件)。但是这种跨语言的语法往往有很多共同点,所以风格也可以继承(不要重新发明轮子)。

于 2013-03-28T09:49:07.150 回答
1

我对它的理解是,表达式是命令/参数和/或运算符/操作数的排列,它们一起将执行并影响一个动作或产生一个结果(即使它是 $null),而不是可以分配给一个变量或向下发送管道。术语“主表达式”用于将整个表达式与可能包含在其中的任何子表达式 $() 区分开来。

于 2013-03-28T10:32:25.350 回答
1

我非常有限的经验表明,主要是指不能以多种方式解析的表达式(或子表达式),无论优先级或关联性如何。它们有足够多的句法锚,它们实际上是不可协商的——例如,ID '(' ID ')' 只能匹配它。括号使其得到保证,并且没有运算符允许对优先级做出任何决定。

在匹配表达式树时,通常在“primary_expr”规则下拥有一组这些子表达式。任何子表达式都可以以任何你喜欢的方式匹配,因为它们都完全由语法决定。之后的所有内容都必须在语法中仔细排序,以保证正确的优先级和关联性。

这里有一些对这种解释的支持。

于 2018-06-19T15:12:48.740 回答
0

认为 $( 很多语句 ) 就像一个复杂的表达式,在 powershell 中大多数东西都可以是像 $a = if ($y) { 1 } else { 2} 这样的表达式,所以主要表达式可能是经典表达式的最低公分母一个返回值的单一事物,无论是显式值,调用某物..从变量 $xy 或递增操作 $z++ 的结果中获取变量或属性,但即使是简单的数学“表达式”也不会匹配这个 4 +2 + (3 / 4 ) ,这将是一个更复杂的表达式。

所以我在想它背后的 WHY,一开始提到它可能是为了帮助确定命令/表达模式,但经过调查并不是这样。然后我想也许它可以在命令模式下作为参数显式传递,但不是这样,因为如果你将 $x++ 作为参数传递给 cmdlet,你会得到一个字符串。

我认为它可能只是表达式的最低公分母,一个构建块,所以下一个问题是语法包含哪些其他表达式,这个在哪里使用?

于 2013-03-28T16:16:24.740 回答