In his book "Domain-Specific Languages", Martin Folwer describes internal and external DSLs.
Internal DSL = is a subset of existing programming language e.g. Ruby/Java etc.
External DSL = you define a syntax and a vocabulary.
An external DSL can be much more expressive, but can require an external parsing and code generation.
While an internal DSL doesn't require an additional processing, but is sometimes hard to understand for non-programming domain experts (e.g. business analysts, testers).
When choosing your type of DSL, it's important to analyze who its users are. If they are mostly non-technical people, then an external DSL can be a better choice. For a small team of experienced programmers an internal DSL can be chosen, if the programming language they use is expressive enough.