Permalänk
Medlem

Parsning av text i C#

Jag har byggt en superenkel text-parser av ett eget-påhittad "scriptspråk" (eller vad man nu kan kalla det) för lite egna ändamål.
Det hela bygger på textfiler som bitvis kan se ut så här:

poke #$EA,$23F0
poke #$EA,$23FF

etc etc. Sen i mitt program parsar jag detta och utför de "kommandon" som är beskrivna i textfilen.
"Problemet" är att jag skulle vilja kunna stöda sånt här med:

poke #$EA,$2300+($F0*0)
poke #$EA,$2300+($F0*1)

Ja, ni kanske förstår. En smartare parser helt enkelt. Spontant känns det som det kan bli väldigt avancerat om det inte kan finnas nån typ av genväg som jag inte vet om?
Nån som har nån snilleblixt som inte är för avancerad?

Visa signatur

Dator: MB: Gigabyte B760 Gaming X | SSD: Samsung 990 Pro M.2 1TB + Crucial P3 M.2 1TB CPU: Intel Core i7 14700 2.1 GHz 61MB | RAM: Corsair 32GB (2x16GB) DDR5 4800MHz CL40 Vengean | Grafikkort: ASUS Dual GeForce RTX 4060 EVO 8GB OC | Chassi: be quiet! Pure Base 600 Silver | PSU: Corsair RM750e ATX 3.0 750W V3 | Optisk: ASUS BW-12B1ST Blu-Ray/DVD brännare | CPU-kylare: Thermalright Peerless Assassin 120 SE | Operativ: Windows 11 | Scanner: Canon Canoscan 9000F
Övrigt: Nintendo Switch, Switch 2, NES Mini, SNES Mini, Nintendo New 3DS, NES, Famicom AV, PS3, PS5, AppleTV 4K, Synology NAS DS923+ (32GB), iPhone 16 Pro 128GB, LG OLED 55C2

Permalänk
Hedersmedlem

@oRBIT2002 Om du kan transformera uttrycket till något som är giltigt i ett existerande språk (eller anpassa din syntax) finns det kanske färdiga funktioner för att evaluera. Lua eller javascript är populära alternativ.

Permalänk
Avstängd

En metod som läser in data, kontrollerar den och skickar den vidare?

Metoden är vad du själv ska skriva beroende vad du får för indata. Det kanske finns färdiga metoder du kan använda, men då måste din indata se exakt likadan ut som den metod du kopierar. Det inträffar nästan aldrig, men du kan givetvis sno kod från en sådan metod.

Permalänk
Medlem

Jag är nog inte kvalificerad att svara på frågan i allmänhet och definitivt inte för att svara på ett pedagogiskt sätt - men ja, om du ökar komplexiteten i din grammatik så kommer komplexiteten i parsern att öka. Förhoppningsvis återanvänder du tillagda regler så att de kan återanvändas på olika ställen i språket och ha en genensam implementation.

Du är medveten om koncept som context free grammar, BNF, lexer, parser, parser generator (lex/flex/yacc/bison etc), AST, samt frontends och backends i kompilatorer? Väldigt smarta personer har ju hållit på väldigt länge med det här området, så vill man bygga ”en smartare parser” så finns det en hel del verktyg, litteratur och exempel att titta på.

Permalänk
Medlem

Jag hade nog hoppats på nån funktionalitet som kunde användas som jag inte visste om, men det verkar ju vara lite knivigt det här helt klart.

Visa signatur

Dator: MB: Gigabyte B760 Gaming X | SSD: Samsung 990 Pro M.2 1TB + Crucial P3 M.2 1TB CPU: Intel Core i7 14700 2.1 GHz 61MB | RAM: Corsair 32GB (2x16GB) DDR5 4800MHz CL40 Vengean | Grafikkort: ASUS Dual GeForce RTX 4060 EVO 8GB OC | Chassi: be quiet! Pure Base 600 Silver | PSU: Corsair RM750e ATX 3.0 750W V3 | Optisk: ASUS BW-12B1ST Blu-Ray/DVD brännare | CPU-kylare: Thermalright Peerless Assassin 120 SE | Operativ: Windows 11 | Scanner: Canon Canoscan 9000F
Övrigt: Nintendo Switch, Switch 2, NES Mini, SNES Mini, Nintendo New 3DS, NES, Famicom AV, PS3, PS5, AppleTV 4K, Synology NAS DS923+ (32GB), iPhone 16 Pro 128GB, LG OLED 55C2