1. A method for semantically adapting a software application to a device having specific constraint rules, said method comprising: (a) inputting a precedence of semantic adaptation of components of said software application, as a directed acyclic graph (DAG), where vertices correspond to said components and directed edges indicate order of precedence; (b) inputting a relationship table, each entry of said relationship table corresponding to one of said components/vertices of said DAG, wherein each entry in said relationship table includes: a pair of subcomponents having a binary relation or a single component having a unary relation; a relation comprising one of AND, XOR, OR, NAND, NOR, Equivalence, Implication, KEEP, DROP, and MODIFY, wherein said binary relation comprises one of AND, XOR, OR, NAND, NOR, Equivalence, and Implication, wherein said unary relation comprises one of KEEP and DROP; and an action, wherein in said MODIFY relation, said action includes actions taken on a second sub-component, in cases of KEEP or DROP of a first sub-component, or on said MODIFY relation of said first sub-component; (c) for each vertex in said DAG not having an incoming edge, evaluating rules for a vertex according to said relationship table, wherein said evaluate rules comprises: solving Boolean relations of said subcomponents or: in said cases of KEEP or DROP, acting on said second sub-component according to said MODIFY relation; (d) returning said evaluate rules to said vertex; (e) if said evaluate rules for said vertex is DROP, then processing a next vertex of said DAG; if said evaluate rules for said vertex is not DROP, then semantically adapting said vertex, wherein said semantic adaptation is specific to device constraint rules of memory size or screen size linked to a specific component, and if said specific component corresponds to said vertex being semantically adapted, then KEEPing or DROPing said specific component according to said device constraint rules and returning said specific component as KEEP or DROP to said vertex; if said specific component corresponds to said vertex not being semantically adapted, then applying an action to said vertex from said MODIFY rules and repeating said evaluate rules to produce an updated DAG; (f) updating all specific components/vertices in said updated DAG, as said returned KEEP or DROP; (g) removing said returned DROP components/vertices from said updated DAG; (h) continuing evaluating all components/vertices of said updated DAG, until said all components/vertices are removed for said evaluating; and (i) using said evaluated components/vertices of said updated DAG to produce a semantically adapted software application specific to said device constraint rules.