Hi Josh,
The best place to start in the design stage is by building out a formal EBNF grammar that works for your language syntax. Our LL(*) Parser Framework uses EBNF-like syntax, so you would then translate your formal EBNF grammar over to productions in our framework.
As for expressions, you can nest expressions, but do so in order of precedence. For instance the outermost level would be Expression, then you might have Expression's production call one for AssignmentExpression, and that call into a BinaryOperatorExpression, and so on down the levels of precedence until you get to a PrimaryExpression, things like Identifier.
Things like a ParenthesizedExpression would consume the opening '(' and then call into Expression again, followed by ')'.
See our Getting Started #4 QuickStart's SimpleGrammar.cs file for some examples on expression setup in a grammar.