我对著名的C语言BNF范式很感兴趣,并学习了一段时间,让我困惑的是有些语法看起来不正确,但根据BNF规则却被认为是正确的。
例如,int test {}
是什么意思?我认为这在C语言中是错误的语法,但事实上,BNF将其视为函数定义:
int -> type_const -> type_spec -> decl_specs
test-> id -> direct_declarator -> declarator
'{' '}' -> compound_stat
decl_specs declarator compound_stat -> function_definition
我用bison试了一下,它认为输入的int test {}
是正确的形式,但是我在C编译器上尝试了一下,它无法编译。
所以有以下问题:
int test {}
是一个正确的语法吗?- 如果是正确的语法,那么它意味着什么,为什么编译器不能识别它?
- 如果它是一种错误的语法,我可以说BNF不够严格吗?这是不是意味着现代C编译器不遵循这个BNF?
int test {}
是语法上正确但语义上错误的吗? - user2269707test->id->direct_declarator->identifier
路径看来行不通了。除非有另一种奇特的定义函数的方式。 - Blaze