【问题标题】: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 将允许类(或枚举)定义不带分号。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-27
      相关资源
      最近更新 更多