And even semantic analysis is at least very similar in most PLs. Even DSLs. Assuming you're using concepts like variables and functions.
When it comes to codegen / interpreter runtimes, things start to diverge. But this also depends on the use case. More often than not a DSL is a one-to-one map to an existing language, with syntactic sugar on top.
I'm curious, what's the DSL you're working on?