【问题标题】:LZZ syntax error for typedef enum _foo { a } foo;typedef enum _foo { a } foo 的 LZZ 语法错误;
【发布时间】:2011-10-26 09:56:31
【问题描述】:
为什么LZZ 告诉我typedef enum _foo { a } foo; 行有语法错误?
Test.lzz:1:19: Syntax error before '{'.
Test.lzz:1:1: Discarding 'typedef'.
Test.lzz:1:28: Syntax error before ';'.
Test.lzz:1:28: Inserting '<identifier>' before ';'.
【问题讨论】:
-
Works on Ideone(gcc-4.3.4)
标签:
c++
syntax-error
lazy-c++
【解决方案1】:
来自documentation:
与真正的 C++ 解析器不同,Lzz 不维护类型和模板名称数据库。 Lzz 仅使用上下文信息进行解析。然而,由于 C++ 语法不明确,这种策略在某些情况下是不够的;幸运的是,Lzz 可以跳过其中的大部分。
此工具不接受 C++ 作为其输入;它接受一种看起来有点像 C++ 的精简语言,生成 C++ 作为其输出。如果您想使用它,您将不得不学习它自己的语言,并希望它足以满足您要编写的代码。就个人而言,我建议您坚持使用标准 C++,因为该语言有据可查且被广泛理解。
【解决方案2】:
您在从 C 继承的代码中看到了很多这种情况。您能不能直接这样做
enum foo { a }
Lzz 文档确实说不支持类定义后的声明符(请参阅支持的构造下的类定义),并提供了一些示例。这同样适用于枚举,但没有明确说明。
注意 Lzz 将允许类(或枚举)定义不带分号。