我正在为我的翻译编写解析器,当我编写挂钩规则时,我遇到了这个令人困惑的案例。
我有这样的规则
MediaSizeName
出于某种原因,它对我来说并不匹配\ n但是当我做相反时
blank -> ()
= " "*
/ "\n"*
它匹配换行符,但与空格键不匹配。
造成这种情况的原因是什么?不应该做什么,只是改变命令表达式进行测试?这是我使用的挂钩实现中的错误吗?
答案 0 :(得分:1)
Kleene星(*
)匹配零个或多个重复。所以" "*
总会匹配;如果没有空格,它将匹配零空格。为了尝试下一个替代方案,您需要使用一个或多个重复运算符+
。