次の samba 構成ファイルに非常によく似たドキュメントのパーサーを作成したいと考えています。多くのセクションがあり、各セクションにはヘッダー行があり、[ で始まり、global、share_name などのキーワード セクション名が行末まで続きます。セクション ヘッダー行に続く は、このセクションのパラメーターです。別のセクションの新しい行の先頭に到達するまで、セクションの終わりはわかりません [..、この種のドキュメントのルールを作成するにはどうすればよいですか? 私が見つけたすべてのantlrの例は、いつセクションを開始し、いつセクションを終了するかを正確に知っています。どうもありがとう!
[global]
netbios name = NETBIOS_NAME
workgroup = WORKGROUP
security = user
[SHARE_NAME]
comment = COMMENT
force create mode = 0770
locking = yes
[printers]
comment = COMMENT
path = /var/spool/samba
browseable = No
これが私の文法です:
grammar SambaConfiguration;
file : global_section
share_name_section
printer_section
EOF
;
global_section
: SECTION_TAG_START GLOBAL_SECTION_TAG (.)* SECTION_TAG_END NEW_LINE
(~SECTION_TAG_START (.)* NEW_LINE)*
;
share_name_section
: SECTION_TAG_START SHARE_NAME_SECTION_TAG (.)* SECTION_TAG_END NEW_LINE
((~SECTION_TAG_START) (.)* NEW_LINE)*
;
printer_section
: SECTION_TAG_START PRINTER_SECTION_TAG (.)* SECTION_TAG_END NEW_LINE
((~SECTION_TAG_START) (.)* NEW_LINE)*
;
SECTION_TAG_START
: '['
;
SECTION_TAG_END
: ']'
;
GLOBAL_SECTION_TAG
: 'global'
;
SHARE_NAME_SECTION_TAG
: 'SHARE_NAME'
;
PRINTER_SECTION_TAG
: 'printer'
;
NEW_LINE :
'\r' ? '\n' | '\r'
;
WHITE_SPACE
: ' ' | '\t'
;
どういうわけか、それは正しく動作しません。Antlrworks で実行すると、次の例外が発生します。
12:19 のトークン一致の問題
ありがとう。