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!. と同じ%eeが成功すれば成功だが、結果として出力される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
expressionA
は、演算の対象となるオペランドを示すルール。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 localeLC_CTYPE をlocaleにする$ctype C$ctype ja_JP.SJISja_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" と書き直さなければならない。