在bash中,分配中=
周围不能有空格。
x=10
bash的yylex()
只是将整个x=10
作为ASSIGNMENT_WORD
令牌返回。然后进行处理。
http://git.savannah.gnu.org/cgit/bash.git/tree/parse.y#n723
但是更好地由解析器而不是词法分析器处理分配(作为我在解析器中处理分配的大多数示例)?
如何设计语法来禁用=
周围的空格?谢谢。
答案 0 :(得分:2)
但是更好地由解析器而不是词法分析器处理分配(作为我在解析器中处理分配的大多数示例)?
如果通常使用空格来分隔词法标记,那么避免为变量赋值产生异常可能更容易。请注意,在the shell command language的特定情况下,规范明确地描述了按照这种方式进行的词法标记化的解析,因此在这种情况下,编写代码以使其直接对应于规范特别有吸引力。
如果您这样做,那么也让词法分析器将分配识别为自己的标记类型,这将非常有帮助,因为该信息从词法分析中便宜出来,而对于解析器阶段则更为混乱且昂贵(重新)检查每个令牌值以识别哪些是分配。
如何设计语法来禁用=周围的空格?
如果将空白规则应用于语法级别(而不是令牌化级别),则令牌生成器需要发出显式的空白令牌,以便解析器可以看到空白的位置。然后,您可以编写语法规则,在允许的空白处而不是在不允许的空白处容纳空白。但是,请从做过此事(使用另一种语言)的人那里获取它:它丑陋且令人讨厌,您应该尽一切努力避免它。