- if ($cnt >= 3) {
- $cmb = $tokens[$cnt - 3].$tokens[$cnt - 2].$tokens[$cnt - 1];
- if (isset($this->three[$cmb])) {
- return $this->pick($this->three[$cmb]);
- }
- }
- if ($cnt >= 2) {
- $cmb = $tokens[$cnt - 2].$tokens[$cnt - 1];
- if (isset($this->two[$cmb])) {
- return $this->pick($this->two[$cmb]);
- }
- }
- if ($cnt >= 1) {
- $cmb = $tokens[$cnt - 1];
- if (isset($this->one[$cmb])) {
- return $this->pick($this->one[$cmb]);
+ for ($size = min($this->size, $cnt); $size > 0; --$size) {
+ $cmb = $this->generalize(array_slice($tokens, -$size));
+ if (isset($this->transitions[$cmb])) {
+ $pick = $this->pick($this->transitions[$cmb]);
+ if (!is_null($pick)) {
+ return $this->exampleOf($pick);
+ }