A <- e |
A
は「非終端記号」であり、このルールの名前となるシンボルで、宝剣では英大文字または英小文字またはアンダースコア
'_'
で始まり、英大文字または英小文字またはアンダースコアまたは数字が続くシンボル。e
は「parsing
expression」。e1 e2 e3 ...
e1
/ e2 / e3 ...
e*
e+
e?
&e
!e
"str"
\n
はLFコードに、 \r
はCRコードに、 \t
はタブコードに対応[a-z]
宝剣では [a-fA-F]
という書き方には対応していない[a-f]/[A-F]
と書く.
EOF
!.
と同じ%e
e
が成功すれば成功だが、結果として出力されるSyntaxTreeの中に
は含まれない#
'token'
NotTokenPred
が成功する事。NotTokenPred
は以下のように定義すれば良いだろう。NotTokenPred
<- !([a-z]/[A-Z]/[0-9]/"_") |
NotTokenPred
が入力を消費しないようにすべき
である事。A
<- B C $1 D / B E $2 F |
入力 | 結果 |
---|---|
B C D | 成功 |
B E F | 成功 |
B D | 失敗 |
B C F | エラー1 |
B E G | エラー2 |
A
<< spec
precedence
expression
A
は、演算の対象となるオペランドを示すルール。spec
は、infixl
, infixr
, infixn
,
prefix
, postfix
,
ternary
のどれか1つinfixl |
中置演算子左結合 |
infixr |
中置演算子右結合 |
infixn |
中置演算子非結合 |
prefix |
前置演算子 |
postfix |
後置演算子 |
ternary |
三項演算子 |
precedence
は演算子の優先順位で、1以上の整数で、大きい方が優先順位が高いexpression
は、演算子にマッチするparsing expression。三項演算子の場合は2つ必要A
<- Number |
A
<- A__5 |
A
<% e
$ctype locale
LC_CTYPE
をlocale
にする$ctype C
$ctype ja_JP.SJIS
ja_JP.SJIS
は C-SJIS
に、 ja_JP.eucjp
は C-EUCJP
に置換されてから適用されるA <- A "a" / "a"
A
を解析しようとしてしまい、無限ループになってしまう。A <- "a"+
と書き直す。'*' '+'
はマッチする部分の入力を全て消費する。そのため"a"* "ab"
は、決して aaab
とはマッチしない。"a"*
は入力のうち aaa
を消費してしまうので、"ab"
が b
とマッチせず"a"+ "b"
と書き直さなければならない。