Мне было любопытно, можно ли вставлять вещи в дерево матча, фактически ничего. Я не пытаюсь решить проблему.Могу ли я вставлять именованные захваты в дерево совпадений, фактически ничего не согласуя?
В этом примере у меня есть токен market
, который проверяет, что его совпадение является ключом в хэше. Затем я попытался как-то вставить значение этого хэша в дерево соответствий. Я решил, что у меня может быть токен, который всегда совпадает, long_market_string
, а затем заглянуть в дерево, чтобы увидеть, что соответствовало market
.
grammar OrderNumber::Grammar {
token TOP {
<channel> <product> <market> <long_market_string> '/' <revision>
}
token channel { <[ M F P ]> }
token product { <[ 0..9 A..Z ]> ** 4 }
token market {
(<[ A..Z ]>** 1..2) <?{ %Market_Shortcode{$0}:exists }>
}
# this should figure out what market matched
# I don't particularly care how this happens as long as
# I can insert this into the match tree
token long_market_string { <?> }
token revision { <[ A..C ]> }
}
Есть ли какой-нибудь способ, чтобы возиться с Match
дерева, как она создается?
я мог бы сделать что-то, что инвертирует вещи:
grammar AppleOrderNumber::Grammar {
token TOP {
<channel> <product> <long_market_string> '/' <revision>
}
token channel { <[ M F P ]> }
token product { <[ 0..9 A..Z ]> ** 4 }
token market {
(<[ A..Z ]>** 1..2) <?{ %Market_Shortcode{$0}:exists }>
}
token long_market_string { <market> }
token revision { <[ A..C ]> }
}
Но, который обрабатывает этот случай. Меня больше интересует вставка произвольного количества вещей.
Это не близко к тому, что я прошу, действительно. Все это легко. Я хочу вставить другие вещи в дерево соответствий, у которых нет токенов. Вы не можете «делать почти что угодно», потому что объекты Match имеют неизменяемые биты. –
@briandfoy Int - также неизменный объект. Когда я сказал, что токен - это тип метода, я имею в виду, что он наследует метод, и добавляет кучу вещей. Если вы делаете эту кучу вещей самостоятельно в обычном методе, вы можете делать абсолютно все, что может сделать токен. Я не планирую потратить неделю или больше на исходный код, чтобы сделать то, что почти никто не должен делать. Я пытался сделать это одно и то же несколько раз, прежде чем вы спросили, и не думал, что это стоит того времени, потратив на это часы. –
Хорошо, но я уже знаю это и не обсуждал это. Вы сказали, что попробовали одно и то же (я предполагаю, что вы не могли это сделать), но это также звучит так, будто вы пытаетесь убедить меня, что это тривиально делать самостоятельно. Там есть смешанные сообщения. –