|
Velocityについて
コミュニティ
ドキュメント
ツール
比較
日本語訳について
|
|
Velocity Specification - BNF − Velocity の仕様 - BNF
|
Please note that this is currently out of date and will be updated soon.
これは古いため、近日中に更新する予定ですのでご注意ください。
 |
 |
 |
 |
This is a tentative BNF for Velocity, right now this is
pretty much the WM syntax. This might change, as arithmetic
might not make it into the syntax, and the future
velocity syntax will more then likely remove block
markers and instead use an "#end" token to signify
the end of a directive.
<statement>
::= <text>
| <block>
| <if-statement>
| <else-if-statement>
| <foreach-statement>
| <include-statement>
| <set-statement>
| <parse-statement>
| <param-statment>
| <stop-statement>
| <reference>
<block>
::= "#begin" { <expresion> } "#end"
<if-statement>
::= "#if" "(" <expresion> ")" <statement> [ <else-statement> ]
<else-if-statement>
::= "#elseif" "(" <expresion> ")" <statement> [ <else-statement> ]
<foreach-statement>
::= "#foreach" <reference> "in" <reference> <statement>
<include-statement>
::= "#include" <string-literal>
<set-statement>
::= "#set" <reference> "=" <expression>
<parse-statement>
::= "#parse" <string-literal>
<param-statment>
::= "#param" <reference> "=" <string-literal>
<stop-statement>
::= "#stop"
<reference>
::= "$" <identifier> { "." <method> | <identifier> }
<method>
::= <identifier> "(" [ <parameter> { "," <parameter> } ] ")"
<parameter>
::= <reference> | <string-literal>
<alpha-char>
::= "a..z, A..Z"
<identifier-char>
::= "a..z, A..Z ,0..9 ,- ,_"
<identifier>
::= <alpha-char> { <identifier-char> }
<expression>
::= <true>
| <false>
| <primary-expression> "=" <assignment>
| <conditional-or-expression>
<assignment>
::= <primary-expression> "=" <assignment>
<conditional-or-expression>
::= <conditional-and-expression> { "||" <conditional-and-expression> }
<conditional-and-expression>
::= <equality-expression> { "&&" <equality-expression> }
<equality-expression>
::= <relational-expression>
{ "==" <relational-expression>
| "!=" <relational-expression>
}
<relational-expression>
::= <additive-expression>
{
"<" <additive-expression>
| ">" <additive-expression>
| "<=" <additive-expression>
| ">=" <additive-expression>
}
<additive-expression>
::= <multiplicative-expression>
{
"+" <multiplicative-expression>
| "-" <multiplicative-expression>
}
<multiplicative-expression>
::= <unary-expression>
{
"*" <unary-expression>
| "/" <unary-expression>
| "%" <unary-expression>
}
<unary-expression>
::= "!" <unary-expression> | <primary-expression>
<primary-expression>
::= <string-literal>
| <number-literal>
| <reference>
| "(" <expression> ")"
|
 |
 |
 |
 |
 |
 |
 |
 |
Velocity向けの仮のBNFですが、今のところほとんど WM (WebMacro) の構文と同じです。
この仕様はおそらく変更されるでしょう。というのは、
算術式は構文にうまく組み込まれていないのと、将来のVelocityの構文では、
指示子の終わりを示すのに使われていたブロックマーカーを廃止し、
代わりに「#end」トークンを使用する可能性が高いからです。
<statement>
::= <text>
| <block>
| <if-statement>
| <else-if-statement>
| <foreach-statement>
| <include-statement>
| <set-statement>
| <parse-statement>
| <param-statment>
| <stop-statement>
| <reference>
<block>
::= "#begin" { <expresion> } "#end"
<if-statement>
::= "#if" "(" <expresion> ")" <statement> [ <else-statement> ]
<else-if-statement>
::= "#elseif" "(" <expresion> ")" <statement> [ <else-statement> ]
<foreach-statement>
::= "#foreach" <reference> "in" <reference> <statement>
<include-statement>
::= "#include" <string-literal>
<set-statement>
::= "#set" <reference> "=" <expression>
<parse-statement>
::= "#parse" <string-literal>
<param-statment>
::= "#param" <reference> "=" <string-literal>
<stop-statement>
::= "#stop"
<reference>
::= "$" <identifier> { "." <method> | <identifier> }
<method>
::= <identifier> "(" [ <parameter> { "," <parameter> } ] ")"
<parameter>
::= <reference> | <string-literal>
<alpha-char>
::= "a..z, A..Z"
<identifier-char>
::= "a..z, A..Z ,0..9 ,- ,_"
<identifier>
::= <alpha-char> { <identifier-char> }
<expression>
::= <true>
| <false>
| <primary-expression> "=" <assignment>
| <conditional-or-expression>
<assignment>
::= <primary-expression> "=" <assignment>
<conditional-or-expression>
::= <conditional-and-expression> { "||" <conditional-and-expression> }
<conditional-and-expression>
::= <equality-expression> { "&&" <equality-expression> }
<equality-expression>
::= <relational-expression>
{ "==" <relational-expression>
| "!=" <relational-expression>
}
<relational-expression>
::= <additive-expression>
{
"<" <additive-expression>
| ">" <additive-expression>
| "<=" <additive-expression>
| ">=" <additive-expression>
}
<additive-expression>
::= <multiplicative-expression>
{
"+" <multiplicative-expression>
| "-" <multiplicative-expression>
}
<multiplicative-expression>
::= <unary-expression>
{
"*" <unary-expression>
| "/" <unary-expression>
| "%" <unary-expression>
}
<unary-expression>
::= "!" <unary-expression> | <primary-expression>
<primary-expression>
::= <string-literal>
| <number-literal>
| <reference>
| "(" <expression> ")"
|
 |
 |
 |
 |
|
|
|