Should I replace all the spaces and tabs before processing?
Você pode fazer isso se quiser que o espaço em branco seja tão sem sentido quanto em c, c ++, java, c #.
Isso significa fazer uma passagem dupla pelo arquivo. Para arquivos muito grandes, isso pode ser proibitivo porque força você a manter tudo na memória ou criar um arquivo temporário. Existem técnicas para consumir espaço em branco na hora. Considere-os antes de recorrer a isso.
Should I use regex just to verify the correctness of the input or for something more?
Nem todo idioma pode ser validado com regex. Certifique-se de qual categoria você está antes de se comprometer com ela.
Should I use just plain string manipulation? I'm using Golang and strings are immutable, string manipulation implies allocations and a lot of code (speed is not REALLY important here but I'd like to find the correct way to solve this).
"Muito código" não é uma boa maneira de definir um idioma. Aqui está uma boa maneira:
Should I write a lexer and parser for this?
Isso oferece o maior poder de qualquer coisa que você mencionou. Existem provavelmente alternativas mais simples que se centralizam em torno da reutilização de analisadores escritos para coisas como json ou xml, mas você está apenas empurrando seus tipos de entrada para um formato de dados diferente.