yacc 语法不足以解析文件
yacc grammar not sufficient to parse the file
我有一个如下所示的配置文件。(tmp.conf)
[ main ]
e_type=0x1B
我的yacc文件(test.y)如下
%%
config_file_sections
: main
;
main
: main_attribute_list
{
e_parse_debug_log_message(E_DEBUG_AT,"Found main_section\n");
e_parse_found_main_section_complete();
}
;
main_attribute_list
: T_E_TYPE number
{
e_parse_debug_log_message(E_DEBUG_AT,"Found main section token T_E_TYPE:\n");
}
;
number
: NUMBER { $$ = ; }
;
%%
如果我将文件传递给程序,它会挂起而没有任何问题 output.My 问题是上面给出的解析上面显示的配置文件的语法。
这根本不行。它甚至没有正确解析第一个字符,但之后它只允许一个部分和一个名称-值对。你需要更多这样的东西:
%%
config_file
: /* empty */
| config_file config_file_section
;
config_file_section
: '[' identifier ']' attribute_list
;
attribute_list
: /* empty */
| attribute-list attribute-pair
;
attribute-pair
: identifier '=' number
;
identifier
: IDENTIFIER
;
number
: NUMBER
;
%%
语义动作留作 reader 的练习。
我有一个如下所示的配置文件。(tmp.conf)
[ main ]
e_type=0x1B
我的yacc文件(test.y)如下
%%
config_file_sections
: main
;
main
: main_attribute_list
{
e_parse_debug_log_message(E_DEBUG_AT,"Found main_section\n");
e_parse_found_main_section_complete();
}
;
main_attribute_list
: T_E_TYPE number
{
e_parse_debug_log_message(E_DEBUG_AT,"Found main section token T_E_TYPE:\n");
}
;
number
: NUMBER { $$ = ; }
;
%%
如果我将文件传递给程序,它会挂起而没有任何问题 output.My 问题是上面给出的解析上面显示的配置文件的语法。
这根本不行。它甚至没有正确解析第一个字符,但之后它只允许一个部分和一个名称-值对。你需要更多这样的东西:
%%
config_file
: /* empty */
| config_file config_file_section
;
config_file_section
: '[' identifier ']' attribute_list
;
attribute_list
: /* empty */
| attribute-list attribute-pair
;
attribute-pair
: identifier '=' number
;
identifier
: IDENTIFIER
;
number
: NUMBER
;
%%
语义动作留作 reader 的练习。