Parsing “a”是什么;主表达式";?

Parsing “a”是什么;主表达式";?,parsing,powershell,Parsing,Powershell,在PowerShell语言规范中,语法有一个称为“主表达式”的术语 主要表达式: 价值 成员访问 元素访问 调用表达式 增量后表达式 减量后表达式 从语义上讲,主要表达式是用来描述什么的?据我所知,这有两个部分: 形式语法分解表达式之类的内容,因此运算符优先级是隐式的 如果语法正确的话 expression: value expression * expression expression + expression … 需要有一个单独的机制来定义*比+具有更高的优先级。这 当使

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

主要表达式: 价值 成员访问 元素访问 调用表达式 增量后表达式 减量后表达式
从语义上讲,主要表达式是用来描述什么的?

据我所知,这有两个部分:

  • 形式语法分解表达式之类的内容,因此运算符优先级是隐式的

    如果语法正确的话

    expression:
      value
      expression * expression
      expression + expression
      …
    
    需要有一个单独的机制来定义
    *
    +
    具有更高的优先级。这 当使用工具将语法直接转换为标记器/解析器时,它变得非常重要。1

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



  • 1,我怀疑这不是PopeS壳的情况,因为它是高度上下文敏感的(Express vs命令模式,然后考虑调用非内置的可执行文件)。但是这些跨语言的语法往往有很多共同点,因此风格也可以延续(不要再发明轮子)。

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

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

    primary-expression: value member-access element-access invocation-expression post-increment-expression post-decrement-expression 所以我在想它背后的原因,一开始有人提到它可以帮助确定命令/表达模式,但调查并不是这样。然后我想也许它是可以在命令模式下作为参数显式传递的,但事实并非如此,因为如果将$x++作为参数传递给cmdlet,就会得到一个字符串


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

    我的经验非常有限,我认为primary指的是不能以多种方式解析的表达式(或子表达式),不考虑优先级或关联性。它们有足够的语法锚,因此它们实际上是不可协商的——例如,ID'('ID')只能与之匹配。帕伦夫妇保证了这一点,而且没有任何运算符允许对优先级做出任何决定

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


    对此解释有一些支持。

    我认为它可以在表达式中使用“$”引用。看起来像是确定主表达式应被视为命令还是表达式的优先测试路径,不是吗?