Quindi devo scrivere un sistema di filtraggio, che può applicare una serie di regole preelaborate ai dati - e attivare alcune azioni definite nel set di regole continuando la sua valutazione.
<ruleset name="1">
<rule>
<conditions>
<and>
<or>
<match image="aceofspades" level="70" />
<match image="aceofdiamonds" level="66" />
</or>
<not>
<match image="aceofclubs" level="60" />
</not>
</and>
<action name="apply_ruleset" ruleset="2">
</rule>
<rule>
...
</rule>
</ruleset>
<ruleset name="2">
</ruleset>
(Un buon esempio di come ci si sente ad essere simili: config di sendmail, alcune configurazioni di Apache, set di regole IPTables, con più tabelle, JOIN / ACCEPT / DROP, ecc.)
Ciò che mi infastidisce di ogni progetto attuale a cui riesco a pensare:
- mantenendo lo stato di and-or nodes
- essere in grado di saltare facilmente tra le regole principali e secondarie
- tracciamento di riferimenti circolari
- mantenendo un vasto insieme di possibili condizioni
- velocità di runtime: parsing / hashing potrebbe richiedere del tempo, ma ogni pacchetto di dati deve essere passato attraverso il set di dati il più velocemente possibile.
Che cosa dovrei leggere / pensare per essere sicuro che il mio parser sarà abbastanza carino da lavorare con set di grandi dimensioni e non compromettere troppo la velocità / flessibilità? (per non parlare del codice iptables) .
Il linguaggio di destinazione è C ++ (comunque vorrebbe implementare un sistema simile in Perl più tardi ..), stava leggendo questo - ma ancora non si vede una buona soluzione per cambiare i set di regole / mantenere le logiche booleane all'interno delle regole.