Den Code würde ich in weitere Tokens unterteilen, sodass es du in folgender Form hast. Nach der Unterteilung kannst du auch gerade die "-Zeichen weglassen:
Text:Mercury | Text:Sol | Steuerzeichen:{ | Text:Texture | Text:mercury.* | Text:BumpMap | Text:mercurybump.* | Text:BumpHeight | Zahl:2.5 | Text:Radius | Zahl:2440 | ...
Solche Daten können von rekursiven Parsern relativ einfach ausgewertet werden.
Du muss zuerst eine Grammatik definieren, irgend so in der Art:
Objekt => Text [Text] Text "{" { ObjektDefinition } "}"
ObjektDefinition => ( Text ( Text | Zahl ) ) | UnterObjekt
UnterObjekt => Text "{" ObjektDefinition "}"
[] bedeutet optional
{} bedeutet beliebig viele Male
Natürlich kannst du es dir auch einfacher machen, dafür ist das ganze dann aber vermutlich weniger tolerant und es liegt keine klare Definition der Sprache zu Grunde.
Mein
Mathe-Parser funktioniert auf diesem Prinzip, wobei der Code aber nicht zuerst in Tokens unterteilt werden sondern alles bis zum letzten Charakter in der Sprache definiert ist.