parsing - 在 PowerShell 语法中, `lvalueExpression` 规则说的是什么?

标签 parsing powershell grammar ebnf

我正在查看此处发布的 PowerShell 语法:http://www.manning.com/payette/AppCexcerpt.pdf

(我认为它自 PowerShell v1 以来就没有更新过,并且有一些错别字。所以,这显然不是真正的 PowerShell 语法,而是一个面向人的文档。)

在 C.2.1 节中,它说:

<lvalueExpression> = <lvalue> [? |? <lvalue>]*

问号的含义是什么?我不知道它的意思是“匹配任何字符”还是“匹配问号”还是打字错误。

我不确定这是为了匹配什么输入,但也许是这样的:

$a,$b = 1, 2

在哪种情况下问号应该是逗号?

最佳答案

根据它在前面的规则 ( <assignmentStatementRule> = <lvalueExpression> <AssignmentOperatorToken> <pipelineRule> ) 中的使用,看起来 lvalueExpressionAppendix CWindows PowerShell in Action对应expressionThe PowerShell Language SpecificationB.2.3 部分中那Joey链接到。比这更匹配它是困难的,但我还是会添加一些猜测:)

? [? |? <lvalue>]* 中的字符很可能是错误的。如果它被用来表示“前面的标记是可选的”,那么:

  • [|它所应用的代币应该被引用
  • 只有[作为值表达式的一部分是有意义的,但索引已在稍后的 propertyOrArrayReferenceOperator 中介绍。规则
  • ?没有在语法中的其他任何地方使用,但是 {0|1} 多次使用来表示“可以出现零次或一次”

鉴于其与 [ '|' <cmdletCall> ]* 的相似性在本节第一条规则的末尾,它可能是一个复制粘贴错误,再加上“智能引号”往返编码错误。假设这是为了稍后编辑而复制的,那么 ?|?可能变成了'.'表示多个属性访问(但同样,这包含在 propertyOrArrayReferenceOperator 规则中)。

虽然基于 C.2.1 部分末尾的声明“[管道规则] 也处理解析赋值表达式”,lvalueExpression可能是为了列出除 simpleLvalue 之外的所有可赋值表达式(例如 cast-expression 代表 [int]$x = 1array-literal-expression 代表 $a,$b,$c = 1,2,3 等)。

关于parsing - 在 PowerShell 语法中, `lvalueExpression` 规则说的是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11958941/

相关文章:

ruby - Ruby 的 AST 中的 'send' 关键字是什么意思?

java - 从 java 属性文件中读取 int[]

解压缩时powershell空值表达式错误

prolog - 在 Prolog 中解析多位数的数字

c# - Irony 中的空白终止符和 MakePlusRule

python - 迭代从 csv 传递过来的列表。柱子

c++ - 如何解析版本号来比较呢?

.net - 如何在不生成 msbuild.exe 进程的情况下从 Powershell 运行 MSBuild?

azure - WSL2 上的 powershell 浏览器访问

c++ - 提升精神: parse boolean expression and reduce to canonical normal form