So the idea is that a linear layer is simply a matrix multiplication of the inputs by the weights defined by the layer:
y = x * A.T + b
Where A is the weight matrix of the linear layer.
Now, imagine that x is one hot encoded vector representing a single word in your vocabulary. This vector is all zeros with a single one. Then you can ask yourself, what is the output of the multiplication x * A.T? The result is a single row of A. If this doesn’t make sense, try it yourself on paper. Multiply a sparse vector by any dense matrix A.
After you have confirmed that what I say is true we can imagine next steps:
For one-hot vector x_i (for each word in the vocabulary):
1. Compute y_i = x_i * A 
2. Stack  y_i for i = 1 ... vocab_size into a new of row vectors… matrix E
Now, this matrix E serves two purposes. It is both a linear transformation whose weights can be updated/learned AND a look-up table for your vocabulary.
I hope that makes sense!