The LSL compiler has some serious problems caused by the lack of constant folding. The most obvious one is that expressions like "PI / 2" have to be replaced by special constants, and if you need less common ones like "PI / 180" you have to initialise your globals at run time... which adds to the size of the script AND the heap. In addition, this means that negative numbers are tokenized as numbers to allow negative numbers to be used in global initialization, so that the expression a-1 is illegal, but a - 1 is legal.
Constant Folding is the general solution to this and other problems. It's one of the most elementary optimizations, and always a safe one for a compiler where the target language's arithmetic matches the source language's, like LSL. What constant folding does is defer code generation for expressions that only contain constants until the value is required to continue parsing, and to evaluate the constant expression at compile time.
LSL already does a certain amount of this in the generation of global vectors, casting integers to floats as necessary. There's no reason this can't be generalized, to allow constant expressions at the global level at least: this would always be safe because any failure to completely evaluate an expression is a syntax error. This would allow for the premature tokenization of negative numbers to be set aside... removing one of the common sources of confusion for new scripters, and save a huge amount of memory over a sim-full of scripts as people are able to make constant lists like llParticleSystem inputs into globals rather than assigning them at runtime.
Doing this throughout the code would further save CPU cycles wasted on calculating things like "PI / 180" over and over again, and memory wasted on extra variables used as constants.