1

在 bash 中,分配中不能有空格=

x=10

bashyylex()只是将整个事物x=10作为ASSIGNMENT_WORD令牌返回。然后进行处理。

http://git.savannah.gnu.org/cgit/bash.git/tree/parse.y#n723

但是它是否更好地处理解析器而不是词法分析器的分配(作为我看到的关于在解析器中处理它的分配的大多数示例)?

如何设计语法以禁用周围的空格=?谢谢。

4

1 回答 1

2

但是它是否更好地处理解析器而不是词法分析器的分配(作为我看到的关于在解析器中处理它的分配的大多数示例)?

如果空格通常用于分隔词法标记,那么避免对变量赋值产生异常可能更容易。请注意,在shell 命令语言的特定情况下,规范明确地描述了以词法标记化的方式进行的解析,因此在这种情况下,编写代码使其与规范直接对应是特别有吸引力的。

如果你这样做,那么让词法分析器将赋值识别为它们自己的标记类型是非常有帮助的,因为该信息非常便宜地从词法分析中掉出来,而解析器阶段(重新-)检查每个标记值以识别哪些是分配。

如何设计语法以禁用 = 周围的空格?

如果要在语法级别(而不是标记化级别)应用空格规则,则标记器需要发出明确的空格标记,以便解析器看到空格在哪里。然后,您可以编写语法规则,在允许的地方容纳空格,而不是在不允许的地方容纳空格。但是从做过这件事的人那里(对于不同的语言)来说:它丑陋且令人讨厌,您应该尽一切努力避免它。

于 2019-02-14T17:32:22.607 回答