[ragel-users] How to distinguish between two machines from within the same action?

Fran├žois Beausoleil francois at teksol.info
Thu Sep 8 21:06:32 UTC 2011


 Hey folks!  

I'm writing the "definitive" URL parser class. Lofty goal, perhaps, but also a learning exercise. I have an issue with entering and leaving actions.

My code's on GitHub: https://github.com/francois/urlparser/blob/master/url.rl#L34

Given the following two URLs:

tcp://127.0.0.1:1234
tcp://a:b@127.0.0.1:1234/

For both URLs, I correctly recognize the scheme. For both URLs, either user or hostname is wrong, and in both cases, the port's not recognized.

My Ruby implementation is at https://github.com/francois/urlparser/blob/master/ruby/lib/urlparser/parser.rl#L14

My question boils down to: how do I definitively know that what I'm looking at is a user, vs a hostname, since both have nearly the same set of characters. Should I be using "State Action Embedding Operators"? Actually, scratch that: it seems that's what I should be doing, because I managed to recognize the host in some cases. For the first URL above, I can recognize most of the port: I end up with 123, not 1234, thus losing the last character.

A little pointer to some existing parser with the similar behavior would be appreciated.

Thanks!
Fran├žois



_______________________________________________
ragel-users mailing list
ragel-users at complang.org
http://www.complang.org/mailman/listinfo/ragel-users


More information about the ragel-users mailing list