3

次の EBNF を使用して nuke スクリプト (foundry .nk ファイル) を渡そうとしていますが、「コンテンツ」リテラルでキャッチしすぎているようです。また、書式設定でいくつかの重大な初心者の間違いを犯していると確信しています。私に手を貸してくれる人はいますか?

EBNF:

file           := header, content
header         := shebang, version
shebang        := '#!', ts, word, ('-',[a-zA-Z0-9]+)?,'\n'
version        := 'version', ts, [0-9], '.', [0-9], ts, 'v', [0-9], '\n'
content        := node*
node           := word, ts, '{\n', nodecontent*, '}\n'
nodecontent    := ts, knobname, ts, knobvalue, '\n'
knobname       := word
knobvalue      := word / string / multiknobgroup / knobgroup
knobgroup      := '{', (word / string, ts)*, '}'
multiknobgroup := '{\n', (ts, knobgroup, '\n')*, ts, '}\n'
string         := '"', word*, '"'
word           := ([a-zA-Z0-9-_()/\~.<>?;:])+,ts
ts             := [ \t]*

ニュークスクリプト:

#! /opt/foundry/Nuke/6.3v7-x64/Nuke6.3 -nx
version 6.3 v7
Root {
 inputs 0
 name /path/to/file_name.nk
 first_frame 0
 last_frame 100
 lock_range true
 format "2048 1556 0 0 2048 1556 1 2K_Super_35(full-ap)"
 proxy_type scale
 proxy_format "1024 778 0 0 1024 778 1 1K_Super_35(full-ap)"
 addUserKnob {20 custom l Custom}
 addUserKnob {1 scene l Scene}
 views {
  {left ""}
  {right ""}
 }
}

現在の EBNF は、「views」ノブ値でチョークします。ノードから削除することで、私のコードは期待どおりに機能します。私の完全なコードはここにあります: http://pastebin.com/z01RWpqW

ありがとう

4

1 に答える 1

3

これは固定宣言です:

declaration = """
file           := header, content
header         := shebang, version
shebang        := '#!', ts, word, ('-',[a-zA-Z0-9]+)?,'\n'
version        := 'version', ts, [0-9], '.', [0-9], ts, 'v', [0-9], '\n'

content        := node*
node           := word, ts, '{\n', nodecontent*, ts, '}', '\n'*
nodecontent    := ts, knobname, ts, knobvalue, '\n'
knobname       := word
knobvalue      := word / string / multiknobgroup / knobgroup
knobgroup      := '{', (word / string)*, ts, '}'
multiknobgroup :=  '{\n', (ts, knobgroup, '\n')*, ts, '}'
string         := '"', word*, '"'
word           := ([a-zA-Z0-9-_()/\~.<>?;:])+,ts
ts             := [ \t]*
"""
  1. ノードは \n で終わる可能性があるため、ノード定義に '\n'* を追加する必要があります
  2. \n は nodecontent 定義 (キー値 \n) によって追加され、multiknobgroup が nodecontent と一致しない結果になるため、multiknobgroup 定義は }\n で終了することはできませ
于 2012-12-27T23:09:02.710 に答える