I have never written a DSL, but I am considering it as a feature for a new project (hypothetical). It would be for end users to be able to express in natur开发者_开发百科al language concepts such as weekdays between 10 and 11 except on the first monday of the month.
Dutch users might write weekdagen tussen 10 en 11 behalve op de eerste maandag van de maand. In this case the position of the words seems to match, but there may be expressions where the position of verbs/nouns etc. could be different between languages.
I realise the obvious answer (it depends). I am a .NET developer and I consider using Boo but I'm open to suggestions. I need to understand wether each translation requires rewriting a part of the implementation (which part) or if there is a way to do actual translations, maybe in some sort of preprocessor.
Your not going to find a translator that is capable of doing this for more than a few languages (say between one or two languages and English), especially considering English which itself could have at least 3 ways to write it.
If you want to write a DSL, you need to come up with the production rules first (what can you write) and then work it into a way to express it in english/dutch/martian/etc.
For instance: Schedule := Frame Inclusion [Exception]
which would be:
- Frame: Month, Year, Week, WeekDays, WeekEnds, Days of the Month, Holidays, etc
- Inclusion: Between, Not In, Around, Containing, etc
- Exception: Except [Schedule], But Not [Schedule], Unless [Schedule]
You can then worry about a lexer/parser which corrects a specific grammar and puts it into that form of productions.
These are off the top of my head and not even close, but should be enough to get started.
A DSL created with the Domain-Specific Language Tools can be localized. They place all strings into .resx files.
精彩评论