【发布时间】:2013-01-25 15:15:06
【问题描述】:
我想创建一个解析器来解析一个非常类似于以下 samba 配置文件的文档。它有很多部分,每个部分都有一个标题行,以 [ 开头,后跟关键字部分名称,例如全局、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 时出现问题匹配令牌 NoViableAltException('o'@[1:1: Tokens : ( SECTION_TAG_START | SECTION_TAG_END | GLOBAL_SECTION_TAG | SHARE_NAME_SECTION_TAG | PRINTER_SECTION_TAG | NEW_LINE |白色空间 );])
谢谢。
【问题讨论】:
-
感谢回复,补充了我的语法。谢谢。
-
感谢您的加入。
标签: file parsing configuration antlr samba