p and q seem to be pointers. They point to record variables that have respectively (or, possibly, both), rlink and llink (correct guessing link and left link).
This snippet is probably used in the context of a graph, or possibly a linked list.
The carriage operator (^) in Pascal is a dereference operator that allows you to access the contents of a variable, not the pointer.
The direct equivalent in C would be
(p*).rlink=q (q*).llink=p
but of course this is usually expressed as
p->rlink=q q->llink=p
with the operator C β, which performs deferment and member access to one step.
source share