/ / Aký je správny spôsob, ako štruktúrovať kód kombinátora Scala parser? - parsovanie, scala, kódovanie, formátovanie

Aký je správny spôsob, ako štruktúrovať kód kombinátora Scala parser? - parsovanie, scala, kódovanie, formátovanie

Knižnica Scala Parsers to vyžadujepodtriedu Parsers, ktorý vám nakoniec poskytuje konkrétnu implementáciu analyzátora, zdá sa, že ju skutočne nemôžete rozdeliť do viacerých tried alebo objektov, pokiaľ nie sú v rámci triedy, ktorá bola pôvodne podtriedou Parserov. správny spôsob riešenia tohto problému, aby som nemusel mať iba 50 línií v rade?

odpovede:

2 pre odpoveď č. 1

Osobne si myslím, že spôsob, ako to urobiť, je udržať všetko v jednej triede, alebo, ak má zmysel, vytvoriť jednu hierarchiu dedičstva, aby sa rozšírila o pojmy, rovnako ako JavaTokenParsers predlžuje RegexParsers ktorá sa rozširuje Parsers, Tiež používanie tokenizovaných analyzátorov pomáha trochu, tým, že rozdeľuje lexikálne z gramatiky.

Iné ako to, ponechajte to na jednom mieste: rozdelenie gramatiky vedie k nočné moru porozumenia. Všetky ostatné - triedy AST a kód, ktorý na nich pracuje, nemusia byť vedené spolu s analyzátorom.

Teraz, ak to naozaj nie je pre váš test, môžeterozdeliť ich v znakoch a použiť vlastné typy na vytvorenie potrebných závislostí medzi znakmi. Vy im jednoducho vytvoríte jednu veľkú triedu (alebo objekt), ktorá dedí zo všetkých vlastností.


1 pre odpoveď č. 2

Môžete rozdeliť rôzne komponenty do traits rozšírenie rovnakého rodiča Parser typu a potom ich zmiešajte, aby ste vytvorili svojekonečný analyzátor. Je zrejmé, že niektoré z kombinátorov analyzátorov budú závislé od ostatných, ale prinajmenšom základné faktory (napr. Terminálové analyzátory) by mohli byť takto vyčíslené. Pravdepodobne nebudete chcieť rozdeliť do príliš veľa rôznych tried / vlastností, inak by bolo veľmi ťažké analyzovať, čo analyzátor robí, ak je kód rozdelený na príliš veľa rôznych súborov.