|
|
- // the YML homepage
-
- include homepage.en.yhtml2
-
- page "YML – Why a Markup Language?!" {
- h1 > Introduction
-
- h2 > What is YML?
-
- p >>
- Well, it's the idea not to need to define a grammar first when you want to use a
- ¬http://en.wikipedia.org/wiki/Domain_Specific_Language Domain Specific Language¬.
- For that purpose, YML is being translated into XML. Let's make an example.
- >>
-
- p >>
- Everything which comes close to a C like language, parses without a grammar
- definition:
- >>
-
- p > This:
-
- Code
- ||
- template< class T > T max(T a, T b);
- ||
-
- p > Parses to:
-
- Code
- ||
- <?xml version='1.0' encoding='UTF-8'?>
- <template>
- <generic>
- <class/>
- <T/>
- </generic>
- <T>
- <max>
- <parm>
- <T/>
- <a/>
- </parm>
- <parm>
- <T/>
- <b/>
- </parm>
- </max>
- </T>
- </template>
- ||
-
- p >>
- Instead of defining grammars, you test out and play around until the
- results are matching your needs. If the resulting tree does not fit
- what you're expecting, change it by patching the grammar with `code > decl`:
- >>
-
- p > This:
-
- Code
- ||
- module A {
- interface B {
- attribute long n;
- };
- };
- ||
-
- p > Parses to:
-
- Code
- ||
- <?xml version='1.0' encoding='UTF-8'?>
- <module>
- <A>
- <interface>
- <B>
- <attribute>
- <long>
- <n/>
- </long>
- </attribute>
- </B>
- </interface>
- </A>
- </module>
- ||
-
- p >>
- This does not look like what we want. So we tell YML that
- we have a module name after the module, an interface name after
- the interface and type and name after the attribute:
- >>
-
- p > This:
-
- Code
- ||
- decl module @name;
- decl interface @name;
- decl attribute @type @name;
-
- module A {
- interface B {
- attribute long n;
- };
- };
- ||
-
- p > Parses to:
-
- Code
- ||
- <?xml version='1.0' encoding='UTF-8'?>
- <module name="A">
- <interface name="B">
- <attribute type="long" name="n"/>
- </interface>
- </module>
- ||
-
- h2 id=what > What can I do with YML?
-
- p > With YML you can:
-
- ul {
- li p > use a C-like ¬http://en.wikipedia.org/wiki/Domain-specific_language DSL¬ without writing a grammar first
- li p > generate code out of this ¬http://en.wikipedia.org/wiki/Domain-specific_language DSL¬ using ¬yslt YSLT¬
- li p > generate code out of ¬http://en.wikipedia.org/wiki/Unified_Modeling_Language UML¬ using ¬yslt YSLT¬ on ¬http://en.wikipedia.org/wiki/XML_Metadata_Interchange XMI¬
- li p > generate code out of any XML based language like ¬http://en.wikipedia.org/wiki/Scalable_Vector_Graphics SVG¬ using ¬yslt YSLT¬
- li p > define a ¬http://en.wikipedia.org/wiki/Wiki wiki¬ like language in just a few lines like ¬http://fdik.org/yml/programming#wiki YHTML¬ does
- li p > replace bad designed and complicated XML languages with simpler C-like ones
- li p > ... and much more.
- }
-
- h2 id=howitworks > How it works: Replacing angle brackets with some Python
-
- p > Just writing down what I wanted to have instead of XML for a sample:
-
- Code ||
- <list name="List of goods">
- <head>
- <columTitle>
- Goods
- </columnTitle>
- <columnTitle>
- Price
- </columnTitle>
- </head>
- <row>
- <value>
- Beer
- </value>
- <value>
- 20
- </value>
- </row>
- <row>
- <value>
- Wine
- </value>
- <value>
- 30
- </value>
- </row>
- </list>
- ||
-
- p > Something like that should be more easy, say, like this:
-
- Code ||
- list "List of goods" {
- head title "Goods", title "Price";
- row value "Beer", value 20;
- row value "Wine", value 30;
- }
- ||
-
- h2 id=ylanguages > Y Languages
-
- p >>
- The latter is what I call an Y language – a language specified in YML. How could this be
- achieved? Well, what's to do? To have the required information, how to build XML from the
- script above, we need:
- >>
-
- ul {
- li >>
- the information, that “list of goods” is an attribute named «name», while «Goods» is
- the text value of a tag
- >>
- li > «title» shout be written out as «columnTitle»
- }
-
- p > How to do that? Let's invent a simple definition language for that information:
-
- Code ||
- decl list(name);
- decl title alias columnTitle;
- ||
-
- p > Here you can ¬samples/list.yml2 download the complete list sample¬.
-
- div id=bottom > ¬#top ^Top^¬ ¬programming >> Using YML 2¬ ¬index.en.yhtml2 (source)¬
- }
|