Tag: antlr

令牌在ANTLR 3 C中返回值

我是ANTLR的新手,我正在尝试使用C语言目标(antler3C)编写一个简单的解析器。 语法很简单,我想让每个规则返回一个值,例如: number returns [long value] : ( INT {$value = $INT.ivalue;} | HEX {$value = $HEX.hvalue;} ) ; HEX returns [long hvalue] : ‘0’ ‘x’ (‘0′..’9’|’a’..’f’|’A’..’F’)+ {$hvalue = strtol((char*)$text->chars,NULL,16);} ; INT returns [long ivalue] : ‘0’..’9’+ {$ivalue = strtol((char*)$text->chars,NULL,10);} ; 每个规则收集它的子规则的返回值,直到最顶层的规则返回一个充满我的数据的漂亮结构。 据我所知,ANTLR允许词法分析器规则(令牌,例如’INT’和’HEX’)返回值,就像解析器规则(例如’number’)一样。 但是,生成的C代码将无法编译: error C2228: left of ‘.ivalue’ must have class/struct/union error C2228: left […]

“FOLLOW_set_in_”…在生成的解析器中未定义

我已经为类似Java的DSL编写了一个语法。 虽然它仍然存在一些问题(它不能像我希望的那样识别所有输入),但最让我担心的是生成的C代码是不可编译的。 我使用AntlrWorks 1.5和Antlr 3.5(Antlr 4显然不支持C目标)。 问题在于表达规则。 我有规则prio14Expression到prio0Expression,它处理运算符优先级。 问题是优先级2,它评估前缀和后缀运算符: … prio3Expression: prio2Expression ((‘*’ | ‘/’ | ‘%’) prio2Expression)*; prio2Expression: (‘++’ | ‘–‘ | ‘!’ | ‘+’ | ‘-‘)* prio1Expression (‘++’ | ‘–‘)*; prio1Expression: prio0Expression ( (‘.’ prio0Expression) | (‘(‘ (expression (‘,’ expression)*)? ‘)’) | (‘[‘ expression (‘,’ expression)* ‘]’) )*; prio0Expression: /*(‘(‘) => */(‘(‘ expression […]

ANTLR解析器生成器最适合具有受限内存的C ++应用程序吗?

我正在寻找一个好的解析器生成器,我可以用它来读取我们的大型商业应用程序中的自定义文本文件格式。 目前,这种特殊的文件格式是使用手工递归解析器读取的,但格式已经增长并且复杂化到了这种方法变得无法管理的程度。 似乎最终的解决方案是为这种格式构建一个正确的语法,然后使用像yacc这样的真正的解析器生成器来读取它,但我无法确定使用哪个这样的生成器,或者即使它们值得麻烦一点都不 我看过ANTLR和Spirit,但是我们的项目除了早期的答案之外还有特定的限制因素让我想知道它们是否适合我们。 特别是,我需要: 使用MSVC生成C或C ++代码的解析器。 ANTLR 3不支持C ++; 它声称直接产生C,但是让它实际工作的文档有点令人困惑。 严重限制内存使用量。 内存在我们的应用程序中占据了巨大的优势,即使是微小的泄漏也是致命的。 我需要能够覆盖解析器的内存分配器以使用我们的自定义malloc(),或者至少我需要为它提供一个连续的池,从中抽取所有内存(之后我可以解除分配)。 我可以为解析器可执行文件本身节省大约200kb,但是它在解析时分配的任何动态堆都必须在之后释放。 很好的表现。 这不太重要,但我们应该能够在3ghz处理器上解析不超过一秒的100kb文本。 必须是GPL免费的。 我们不能使用GNU代码。 我喜欢ANTLRworks的IDE和调试工具,但看起来让它的C目标实际上与我们的应用程序一起工作将是一项艰巨的任务。 在开始使用这个问题之前,ANTLR是否适合这项工作? 有问题的文字格式如下: attribute “FluxCapacitance” real constant asset DeLorean { //comment foo bar baz model “delorean.mdl” animation “gullwing.anm” references “Marty” loadonce } template TimeMachine { attribute FluxCapacitance 10 asset DeLorean }

C目标运行时的简单ANTLR 3.4示例

有没有人知道(或有)一个简单的ANTLR 3.4示例main()函数用于C目标? 我试图在C或C ++中开始使用ANTLR,我看到的所有示例(包括这个 )都已过时,例如它们使用的函数不再存在。 似乎没有下载包本身的任何示例,Wiki上的示例已过时。

antlr为c生成ast并解析ast

我正在对c程序进行静态分析。我在antlr网站上搜索,似乎没有合适的语法文件为c程序生成ast。这意味着我必须从一开始就自己做。或者有更快的速度我还需要一个可以遍历解析器创建的ast的树解析器。