On Thu, May 21, 2020 at 08:40:08PM +0000, David Santiago wrote: > Can someone explain me why my grammar isn't working? Unfortunately i > can't figure it out :-( > > | headers > | | header > | | * MATCH "Proxy-Connection" > | | header-value > | | * MATCH "keep-alive\n" > | | crlf > | | * FAIL > | * FAIL > * FAIL > Nil
Notice how <header-value> is capturing the newline in "keep-alive\n"? That means there's not a newline for the <.crlf> subrule that follows, and thus the match fails. Try changing "rule header-value" to be a "token" instead. That will prevent it from consuming any whitespace immediately following the <graph>+ sequence. When I tried your script with header-value defined as a token, it got a lot farther into the match: $ rakudo test.raku TOP | request-line | | method | | * MATCH "CONNECT" | | request-uri | | * MATCH "ssl.gstatic.com:443" | | http-version | | * MATCH "HTTP/1.1" | | crlf | | * MATCH "\n" | * MATCH "CONNECT ssl.gstatic.com:443 HTTP/1.1\n" | headers | | header | | * MATCH "Proxy-Connection" | | header-value | | * MATCH "keep-alive" | | crlf | | * MATCH "\n" | * MATCH "Proxy-Connection: keep-alive\n" * MATCH "CONNECT ssl.gstatic.com:443 HTTP/1.1\nProxy-Connection: keep-" Nil Personally, I would likely define <header-value> to be something more like token header-value { \N+ } which gets any sequence of non-newline characters, since some of the headers coming afterwards contain spaces and characters which aren't part of <graph>. Pm