在指定是否允许空格时,我需要多么明确?例如,这些规则是:
rule lambda
'lambda' ( '(' params ')' )? block
end
rule params
# ...
end
rule block
'{' # ... '}'
end
足以匹配
lambda {
}
基本上我是否需要指定可能出现的可选空格?
答案 0 :(得分:2)
是的,你这样做。在这些规则中,您需要跳过空格,但是,例如,当您解析可能包含空格的字符串时,您希望保留它们;这就是你必须指定的原因。
但是,在将树梢应用于字符串之前,您可能会尝试运行“快速且脏”的基于正则表达式的算法,该算法会从可选的位置丢弃空格。但是,在语法中指定空格可能要困难得多。