如何禁止令牌之间的空白?

问题描述 投票:1回答:1

在bash中,qazxsw poi周围必须没有空格。

=

bash的x=10 只返回整个yylex()作为x=10令牌。然后进行处理。

ASSIGNMENT_WORD

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

如何设计语法来禁用http://git.savannah.gnu.org/cgit/bash.git/tree/parse.y#n723周围的空间?谢谢。

bison flex-lexer yacc lex lemon
1个回答
2
投票

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

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

如果你这样做,那么让词法分析器将赋值识别为它们自己的令牌类型也是非常有帮助的,因为这些信息非常便宜地落在词法分析之外,而对于解析器阶段来说它会更加混乱和昂贵。 - )检查每个标记值以识别哪些是赋值。

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

如果要在语法级别应用空白规则,而不是标记化级别,则标记生成器需要发出显式的空白标记,以便解析器可以看到空白的位置。然后,您可以编写适用于允许空格的空格的语法规则,而不是其中的空格。但是从那些做过那种事情的人那里(对于另一种语言)来说:它是丑陋和讨厌的,你应该尽一切努力避免它。

© www.soinside.com 2019 - 2024. All rights reserved.