Getting a Pat's cheesesteak is like getting manna from heaven, only you have to pay for it, and you don't have to depend on the grace of the divine, only the line cooks behind the window.

Ordering at Pat's is an interesting experience. If there is a line, and there will be, you must be prepared. By my estimation, there are 450 possible steak orders. Fortunately for you, they are all good. Unfortunately for you, if the guy behind the counter has to read your mind, they will charge you 50¢ extra. Do, or do not. There is no try. If you screw up, with a shove you're back to the end of the line.

To help you out, here is the Pat's rapid ordering system presented in BNF notation. I confess I don't know how to order a pepper steak using 'the system', so that isn't included here.

PatsOrder         ::= SteakChoice Toppings OnionChoice

SteakChoice       ::= 'steak' | CheeseSteakChoice

CheeseSteakChoice ::= 'extra'? CheeseChoice

CheeseChoice      ::= 'wiz' | 'provolone' | 'american' | 'pizza'

Toppings          ::= 'lettuce'? 'tomato'? 'mushrooms'? 'peppers'?

OnionChoice       ::= 'wit' | 'wit-out'
So if you want a cheesesteak made with Cheez Whiz, mushrooms, and onions (my favorite), the order goes "wiz mushrooms wit". Like any good standard, this makes communication faster and easier, at least for the guy behind the counter.