Grammar-based compression, where one replaces a long string by a small
context-free grammar that generates the string, is a simple and powerful
paradigm that captures many popular compression schemes. Given a grammar, the
random access problem is to compactly represent the grammar while supporting
random access, that is, given a position in the original uncompressed string
report the character at that position. In this paper we study the random access
problem with the finger search property, that is, the time for a random access
query should depend on the distance between a specified index f, called the
\emph{finger}, and the query index i. We consider both a static variant,
where we first place a finger and subsequently access indices near the finger
efficiently, and a dynamic variant where also moving the finger such that the
time depends on the distance moved is supported.
Let n be the size the grammar, and let N be the size of the string. For
the static variant we give a linear space representation that supports placing
the finger in O(logN) time and subsequently accessing in O(logD) time,
where D is the distance between the finger and the accessed index. For the
dynamic variant we give a linear space representation that supports placing the
finger in O(logN) time and accessing and moving the finger in O(logD+loglogN) time. Compared to the best linear space solution to random
access, we improve a O(logN) query bound to O(logD) for the static
variant and to O(logD+loglogN) for the dynamic variant, while
maintaining linear space. As an application of our results we obtain an
improved solution to the longest common extension problem in grammar compressed
strings. To obtain our results, we introduce several new techniques of
independent interest, including a novel van Emde Boas style decomposition of
grammars