[antlr-interest] Is it possible to tell whether the source or header is being generated?
Luke A. Guest
laguest at archangeli.co.uk
Sat May 26 09:26:19 PDT 2007
On Sat, 2007-05-26 at 09:15 -0700, Terence Parr wrote:
> On May 26, 2007, at 9:07 AM, Luke A. Guest wrote:
>
> > Hi,
> >
> > basically, I was just wondering if in any template in the
> > <language>.stg
> > file it is possible to determine whether the header orthe source is
> > currently being generated? i.e. inside lexer()?
>
> Well, shouldn't they be different templates? I can't remember but
> should be a headerFile vs parser vs lexer etc...
So, I should do something like this then?
outputFile(LEXER,PARSER,TREE_PARSER, actionScope, actions,
docComment, recognizer,
name, tokens, tokenNames, rules, cyclicDFAs,
bitsets, buildTemplate, buildAST, rewrite, profile,
backtracking, synpreds, memoize, numRules,
fileName, ANTLRVersion, generatedTimestamp, trace,
scopes, superClass, literals) ::=
<<
-- $ANTLR <ANTLRVersion> <fileName> <generatedTimestamp>
<@imports>
with Ada.Characters.Latin_1;
<if(TREE_PARSER)>
--import org.antlr.runtime.tree.*;
<endif>
--import java.util.Stack;
--import java.util.List;
--import java.util.ArrayList;
<if(backtracking)>
--import java.util.Map;
--import java.util.HashMap;
<endif>
<@end>
<docComment>
<if(LEXER)>
package body <recognizer.grammar.name>_Lexer is
<recognizer>
end <recognizer.grammar.name>_Lexer;
<endif>
<if(PARSER)>
package body <recognizer.grammar.name>_Parser is
<recognizer>
end <recognizer.grammar.name>_Parser;
<endif>
<if(TREE_PARSER)>
package body <recognizer.grammar.name>_Parser is
<recognizer>
end <recognizer.grammar.name>_Parser;
<endif>
>>
/** The header file; make sure to define headerFileExtension() below */
headerFile(LEXER,PARSER,TREE_PARSER, actionScope, actions,
docComment, recognizer,
name, tokens, tokenNames, rules, cyclicDFAs,
bitsets, buildTemplate, buildAST, rewrite, profile,
backtracking, synpreds, memoize, numRules,
fileName, ANTLRVersion, generatedTimestamp, trace,
scopes, superClass, literals) ::=
<<
-- $ANTLR <ANTLRVersion> <fileName> <generatedTimestamp>
<if(LEXER)>
package body <recognizer.grammar.name>_Lexer is
<recognizer>
end <recognizer.grammar.name>_Lexer;
<endif>
<if(PARSER)>
package body <recognizer.grammar.name>_Parser is
<recognizer>
end <recognizer.grammar.name>_Parser;
<endif>
<if(TREE_PARSER)>
package body <recognizer.grammar.name>_Parser is
<recognizer>
end <recognizer.grammar.name>_Parser;
<endif>
>>
lexer(grammar, name, tokens, scopes, rules, numRules, labelType="Token",
filterMode) ::= <<
-- This is the Ada tagged type (class in C++/Java parlance).
type <grammar.name>_Lexer_Type is new ANTLR.Lexer.Lexer_Type with
private;
...
>>
Should I define the lexer "type" inside the headerFile() template and
have the functions for the lexer handled inside the lexer() template?
Thanks,
Luke.
More information about the antlr-interest
mailing list