CKDefinition parses .ckd ( CGIKit
Definition ) file. CKComponent stores the
result of parse and uses it for binding.
The format of CKD file is very different from Ruby or HTML Here, the format
of CKD file is described as pseudo-BNF like Ruby's document.
STMTS : (STMS)*
STMT : ELEMENT_NAME `:' ELEMENT_TYPE `{' ATTRS `}'
ATTRS : (ATTRIBUTE `=' VALUE)*
ATTRIBUTE : ruby_method_name
VALUE : METHODS `;'
| LITERAL `;'
METHODS : ruby_method_name(`.'ruby_method_name)*
LITERAL : `true'
| `false'
| DIGIT_SEQUENCE
| STRING
DIGIT_SEQUENCE : DIGIT+
DIGIT : `0' | `1' | `2' | `3' | `4' | `5' | `6' | `7' | `8' | `9'
STRING : `'' any_character* `''
| `"' any_character* `"'
ELEMENT_NAME : (LETTER | DIGIT | `_')+
ELEMENT_TYPE : ruby_class_name
LETTER : `A' | `B' | `C' | `D' | `E' | `F' | `G' | `H' | `I' | `J' | `K' | `L' | `M' | `N' | `O' | `P' | `Q' | `R' | `S' | `T' | `U' | `V' | `W' | `X' | `Y' | `Z' | `a' | `b' | `c' | `d' | `e' | `f' | `g' | `h' | `i' | `j' | `k' | `l' | `m' | `n' | `o' | `p' | `q' | `r' | `s' | `t' | `u' | `v' | `w' | `x' | `y' | `z'
ruby_method_name means Ruby's Method Name: For example, `foo', `to_s' and `is_a?'. Also, ruby_class
means Ruby's Class Name: For instance, `CKString' and `CKComponent'.
CKDefinition regards a part which begins
from `#' to the end of the line as comment. In the next case, `# foo bar
comment' is not interpreted by CKDefinition.
foo : CKString {
# foo bar comment
value = "foo";
}