質問
simpleparse を使用して、かなり単純な言語学を解析するためにPythonプログラムで使用しています。次のサンプルテキスト(各行)を別々に解析できるはずです。
d6
(d4 + d8 + 5) + 6
{5d20}+12
[d10 + 6d6] + 9
(d10 + d12) + 8d8
.
私は上記のために次のEBNFを書きましたが、「D6」の単純な場合でも、パーサーは私にクラッシュし続けます:
# 'number' is already predefined in SimpleParse to parse exactly what you think it will parse
root := roll
roll := space,operations,space
operations := function+
function := ((dice,op,function)/(grouping,op,function)/(function,op,grouping))/(dice/grouping/constant) #just to clarify, the '/' is a FirstOf operator
constant := number
grouping := ([[(],operations,[])])/'{',dice,'}'
dice := number?,[dD],number
op := space,[-+],space
space := [ \t]*
.
多分私は私のEBNFの間違った場所でロジックをどこかに手に入れたのか疑問に思います。
編集:興味がある、ここに最後のEBNFがどのように見えるものです。
.roll := space,operations,space
operations := function
function := (dice,op,operations)/(grouping,op,operations)/dice/constant/grouping
constant := number
grouping := ('(',operations,')')/('{',dice,'}')/('[',operations,']')
dice := number?,[dD],number
op := space,[-+],space
space := [ \t]*
解決
number
を定義していません。ドキュメントで事前定義されていません。
所属していません StackOverflow