[antlr-interest] AST generating grammar not building for C target
Josh Scholar
joshscholar at nightstudies.net
Tue Aug 21 00:32:13 PDT 2007
I solved my earlier problem by downloading the full source
distribution rather than getting the C code from FishEye (though it
would still be nice to keep up with development).
But my first test, an AST making grammar the compiles under Java isn't
compiling in Visual C++ 2005.
Whether I use the 3.0 or the 3.0.1 C include code (and using the
latest AntlrWorks) I get:
c:\assembler\antlr3\scratch\scratch\stuffparser.c(3008) : warning
C4003: not enough actual parameters for macro 'TOKTEXT'
c:\assembler\antlr3\scratch\scratch\stuffparser.c(3008) : error C2059:
syntax error : ')'
for line 3008 in the generated "[grammar name]parser.c"
root_1 = ADAPTOR->becomeRoot(ADAPTOR,
ADAPTOR->createTypeTokenText(ADAPTOR, LIST, TOKTEXT(h)), root_1);
or for a bit more context:
/* AST REWRITE
* elements : head, dot, rest
* token labels :
* rule labels : retval, rest, head, dot
* token list labels :
* rule list labels :
*/
if ( BACKTRACKING==0 )
{
pANTLR3_REWRITE_RULE_SUBTREE_STREAM stream_retval;
pANTLR3_REWRITE_RULE_SUBTREE_STREAM stream_rest;
pANTLR3_REWRITE_RULE_SUBTREE_STREAM stream_head;
pANTLR3_REWRITE_RULE_SUBTREE_STREAM stream_dot;
stream_retval=antlr3RewriteRuleSubtreeStreamNewAEE(ADAPTOR,
(pANTLR3_UINT8)"token retval", retval.tree != NULL ? retval.tree :
NULL);
stream_rest=antlr3RewriteRuleSubtreeStreamNewAEE(ADAPTOR,
(pANTLR3_UINT8)"token rest", rest.tree != NULL ? rest.tree : NULL);
stream_head=antlr3RewriteRuleSubtreeStreamNewAEE(ADAPTOR,
(pANTLR3_UINT8)"token head", head.tree != NULL ? head.tree : NULL);
stream_dot=antlr3RewriteRuleSubtreeStreamNewAEE(ADAPTOR,
(pANTLR3_UINT8)"token dot", dot.tree != NULL ? dot.tree : NULL);
root_0 = ADAPTOR->nil(ADAPTOR);
retval.tree = root_0;
// 29:78: -> ^( LIST[$h] ( $head)? ( $rest)* ( ^( DOT[$d]
$dot) )? )
{
//
C:\\assembler\\antlr3\\scratch\\scratch\\stuff.g:29:80: ^( LIST[$h] (
$head)? ( $rest)* ( ^( DOT[$d] $dot) )? )
{
pANTLR3_BASE_TREE root_1 = ADAPTOR->nil(ADAPTOR);
root_1 = ADAPTOR->becomeRoot(ADAPTOR,
ADAPTOR->createTypeTokenText(ADAPTOR, LIST, TOKTEXT(h)), root_1);
//
C:\\assembler\\antlr3\\scratch\\scratch\\stuff.g:29:91: ( $head)?
{
if ( stream_head->hasNext(stream_head) )
{
ADAPTOR->addChild(ADAPTOR, root_1,
stream_head->next(stream_head));
}
stream_head->reset(stream_head);
}
More information about the antlr-interest
mailing list