Jak uprościć wyrażenie arytmetyczne w stylu C zawierające zmienne podczas generowania kodu?
Próbuję zoptymalizować ocenę wyrażenia w kompilatorze.
Wyrażenia arytmetyczne są w stylu C i mogą zawierać zmienne. Mam nadzieję uprościć wyrażenia w jak największym stopniu.
Na przykład,(3+100*A*B+100)*3+100
może zostać uproszczony do409+300*A*B
.
Zależy to głównie od prawa dystrybucyjnego, prawa asocjacyjnego i prawa przemiennego.
Główną trudnością, jaką napotykam, jest połączenie tych praw arytmetycznych i tradycyjnych algorytmów oceny stosu.
Czy każdy może podzielić się doświadczeniami związanymi z tym lub podobnymi problemami w kontekście budowania kompilatora?