構文
XLの構文は、XML形式の構文とLISP形式の構文2種類がある。本来、XML 形式のみで十分であるが、それでは煩雑になるので、LISP形式も採用した。ただし、LISP形式はXML形式の要素の中に入れ子にすることが出来るが、その逆は出来ない。関数の仕様書などでは二つの形式を併記している。 XLパーザには、XMLモードとLISPモードの二種類がある。XMLモードの時には、タグを認識するための構文解析が行われ、また、要素の中の '(',')' 、 '^' 、および数字を認識すると、LISPモードになる。LISPモードでは、 ' < ' を認識すると、XMLモードになる。二つのモードはネストしており、モードの変化点はパーザによって記憶されており、ネストが終わると自動的に基のモードへもどる。 XMLモードのときの要素は、空白や改行で区切られる。空白や改行は無視する化しないかは?xml:optionで指定することが出来る。もし、空白を無視しないことにした場合、空白のところの区切り目に空白だけの文字列が挿入される。
<tag>
abc def
hhh
^sym
ghi
(+ a b)
jk 123
lm
(print stdout !
<name data="eee"> hello </name>)
nop
</tag>
空白、改行を無視するモードでは、
(tag
"abc" "def"
"hhh"
sym
"ghi"
(+ a b)
"jk" 123
"lm"
(print stdout
([name data="eee"] "hello"))
"nop"
</tag>
と等価である。空白、改行を無視しないモードでは、
(tag
"abc" " " "def" "\n\t\t"
"hhh"
sym
"ghi"
(+ a b)
"jk" 123
"lm"
(print stdout
([name data="eee"] "hello"))
"nop"
</tag>
となる。タグのあと、 '(' や '^' など、LISPモードへ変化する前後では空白や改行は無視されることに注意されたい。
▲