1

我正在尝试在 Windows 上使用 antlrworks 1.5 (ANTLR 3.5) 从 ANTLR.grammar 文件生成 c 代码,但它不会生成任何头文件,例如它生成的 sample.g:
sample.tokens
sampleLexer.c
sampleParser。 C

但没有任何头文件,我不知道为什么。

我现在使用的语法非常简单,例如:

grammar sample;

options 
{
language    = C;
}

rule1:
'ABC'   
;

我也收到这样的警告:

[12:39:44] warning(24):  template error: context [/outputFile /parser] 1:1 could not pass through undefined attribute filterMode
[12:39:44] warning(24):  template error: context [/outputFile /parser /genericParser /_sub721 /ruleAttributeScopeFuncMacro] 1:4 no such property or can't access: null.attributes
[12:39:44] warning(24):  template error: context [/outputFile /parser /genericParser] 155:5 no such property or can't access: null.apifuncs
[12:39:44] warning(24):  template error: context [/outputFile /parser /genericParser /rule /ruleDeclarations] 4:1 no such property or can't access: null.attributes
[12:39:44] warning(24):  template error: context [/outputFile /parser /genericParser /rule /ruleInitializations] 8:1 no such property or can't access: null.attributes
[12:39:44] warning(24):  template error: context [/outputFile /lexer /lexerRule /ruleDeclarations] 4:1 no such property or can't access: null.attributes

我在 stackoverflow 上找到了一篇关于类似警告的文章:
使用 Antlr-3.5-complete.jar 生成 OracleSQL 语法的大量模板错误
(这是我发现的唯一一件事,我认为它可能对头文件没有做任何事情生成)

我将不胜感激,我想从很久以前为 java 制作的一些 sql 语法为我的 c++ 项目生成一些 AST 树,但我被这个有趣的问题所困扰。

笔记:

我还查看了所有这些文章:

http://www.antlr.org/wiki/display/ANTLR3/FAQ+-+Getting+Started //入门指南 http://www.antlr.org/wiki/pages/viewpage.action?pageId=728 //指南关于如何安装 ANTLR(虽然我使用的是 antlrworks,所以我真的不需要任何其他安装) http://www.antlr.org/wiki/pages/viewpage.action?pageId=29130826 //CplusTARGET(它没有支持 AST 树,我已经在 stackoverflow 上阅读过它,这就是我现在尝试 c 目标的原因) http://www.antlr.org/wiki/display/ANTLR3/Using+the+ANTLR3+C+Target //C TARGET https://github.com/antlr/examples-v3 //目标示例

4

2 回答 2

1

这可能是 ANTLRWorks 1.5.1 已经解决的错误的副作用(下周内发布)。

https://github.com/antlr/antlrworks/pull/9

于 2013-07-05T11:14:31.087 回答
0

我在 1.5.0 上遇到了同样的问题,使用 1.5.2 解决了这个问题。你可以在这里下载它http://www.antlr3.org/works/

于 2015-09-17T12:22:00.720 回答