def p_location(self, args):
    '\n        opt_space   ::= SPACE?\n\n        location_if ::= location\n        location_if ::= location SPACE IF tokens\n\n        # Note no space is allowed between FILENAME and NUMBER\n        location    ::= FILENAME COLON NUMBER\n        location    ::= FUNCNAME\n\n        # If just a number is given, the the filename is implied\n        location    ::= NUMBER\n        location    ::= METHOD\n        location    ::= OFFSET\n\n        # For tokens we accept anything. Were really just\n        # going to use the underlying string from the part\n        # after "if".  So below we all of the possible tokens\n\n        tokens      ::= token+\n        token       ::= COLON\n        token       ::= COMMA\n        token       ::= DIRECTION\n        token       ::= FILENAME\n        token       ::= FUNCNAME\n        token       ::= NUMBER\n        token       ::= OFFSET\n        token       ::= SPACE\n        '
opt_space   ::= SPACE?

location_if ::= location
location_if ::= location SPACE IF tokens

# Note no space is allowed between FILENAME and NUMBER
location    ::= FILENAME COLON NUMBER
location    ::= FUNCNAME

# If just a number is given, the the filename is implied
location    ::= NUMBER
location    ::= METHOD
location    ::= OFFSET

# For tokens we accept anything. Were really just
# going to use the underlying string from the part
# after "if".  So below we all of the possible tokens

tokens      ::= token+
token       ::= COLON
token       ::= COMMA
token       ::= DIRECTION
token       ::= FILENAME
token       ::= FUNCNAME
token       ::= NUMBER
token       ::= OFFSET
token       ::= SPACE
def p_location(self, args):
    '\n        opt_space   ::= SPACE?\n\n        location_if ::= location\n        location_if ::= location SPACE IF tokens\n\n        # Note no space is allowed between FILENAME and NUMBER\n        location    ::= FILENAME COLON NUMBER\n        location    ::= FUNCNAME\n\n        # If just a number is given, the the filename is implied\n        location    ::= NUMBER\n        location    ::= METHOD\n        location    ::= OFFSET\n\n        # For tokens we accept anything. Were really just\n        # going to use the underlying string from the part\n        # after "if".  So below we all of the possible tokens\n\n        tokens      ::= token+\n        token       ::= COLON\n        token       ::= COMMA\n        token       ::= DIRECTION\n        token       ::= FILENAME\n        token       ::= FUNCNAME\n        token       ::= NUMBER\n        token       ::= OFFSET\n        token       ::= SPACE\n        '