GoForSmoke:
I can see that you feel that certain things have to be so I'll say once that you hold your project to restrictions that you do not need.
Custom keyboard? Did you know that Arduino boards can use PS/2 keyboard and mouse almost directly? You can get a set at Walmart for about $15.
So the main thing to keep in mind for this is that this isn't one of the hacky throwaway experiment type projects that gets a week of attention and then "shelved" on the side of a cluttered desk to die a slow and uneventful death. ** I mean for all I know it could be, buuut I'm optimistic** heh. If it was, I'd probably go for the cheapest, least hassle option such as the PS2 option, which you've mentioned. If that was the case then you're absolutely right. Lowest common denominator.
However as you can see here:
https://www.instagram.com/p/B427TS2jbhP/
https://www.instagram.com/p/B43UFREnctH/
https://www.instagram.com/p/B46IPDVH4cV/
This is not one of those projects. I've designed, fabricated and assembled a simple custom multiplexed QWERTY keyboard. It works like a charm and thus I have reached the point where I can start coding this text based game. This is the time where I gotta identify and decide on the most suitable data format of handling and arranging my game content since it's a crucial decision which will dictate the entire basis for the project.
Mainly speaking, arduinos support for PS/2 is great - it's also not what I need. So in that regard, these aren't restrictions, these are project design requirements.
Oh and price wise, the total for the pcb fabrications and components for 5 of these came to around $25 bucks so even value wise (excluding assembly time) it's cheaper. But I did learn about ardinos PS/2 native support so I've learned something today and I just might even implement PS/2 support too. 
GoForSmoke:
As far as pins, PS/2 uses a few and a serial interface LCD needs 2. If you want to get used to MCU's then maybe start using pin multipliers like shift registers or port expanders rather than "go bigger" which is more PC-think.
There are more reasons why I went with a due, it has several serial ports, which I'm going to be using, it has a nice core as I'm looking to write to a display, network, Serial, play several audio files and edit the game data at once. The LCD I'm using is a parallel port one but I might just switch to an SPI one once they come in. I'm multiplexing an almost full qwerty keypad AND I have quite a few other bells and whistles that I have yet to hang on this thing. So tying to make due with the limited pin-count of a teensy is more of a pain in the rear. If the due won't work out, I'll probably switch to an STM32f4 board instead with a whopping 177 pins 6 uarts 2 spis and running at 168 MHz.
GoForSmoke:
I parse & lex text at high speed --on the fly, no pauses. Just so you know, it's not what you seem to be used to and fun part is that it can be used to turn a text book into a much smaller token book. I figure that if you have a dictionary with all the game words in it, the game text could be tokenized to 16-bit word numbers that correspond to dictionary words. All text input gets tokenized and all output prints the matching words.
I've done this kind of thing since I was writing programs to generate NC and CNC tapes in 1980-85 though the last project got killed as a result of the Boesky SNL scandal, a real shame as the important parts were working.
key word <<-------->> number
You can use a supported protocol but it's going to take more computer to support that.
So long and good luck!
I understand the basics of parsing but in a different scope. (web parsing) so I'm having a difficult time visualizing the application of your method. Do you have any relevant resources you could share on the subject? As for it's suitability for this priject - Are you familliar with a game called Zork? That's essentially what I'm working on here. My own game that works like that. There are game items, inventory, dialogues, open world paths that a player can take, container with items that the player can find and take, etc.
So this isn't just the question of how to read the copious data but also how to store it. You are (as far as I can tell) are inly telling me how to read the data using parsing. What I'm looking for is a data format of storage. Unless I'm misunderstanding and you actually mean that the parse::lex is what I can use in conjunction wit any type of data storage?