blob: 428be0a3f6a2da9a8fd9f60a0f3a6b82bd8f90bc [file] [log] [blame]
--
-- An instance of this template must have a $Export section and the export_terminals option
--
-- Macros that may be redefined in an instance of this template
--
-- $eof_token
-- $additional_interfaces
-- $super_stream_class -- subclass com.ibm.lpg.LpgLexStream for getKind
-- $prs_stream_class -- use /.PrsStream./ if not subclassing
--
-- B E G I N N I N G O F T E M P L A T E LexerTemplateD
--
%options programming_language=java,margin=4
%options table
%options action-block=("*.java", "/.", "./")
%options ParseTable=lpg.runtime.ParseTable
%options prefix=Char_
--
-- This template requires that the name of the EOF token be set
-- to EOF and that the prefix be "Char_" to be consistent with
-- KeywordTemplateD.
--
%Eof
EOF
%End
--
-- This template also requires that the name of the parser EOF
-- Token to be exported be set to EOF_TOKEN
--
%Export
EOF_TOKEN
%End
%Define
--
-- Macros that are be needed in an instance of this template
--
$eof_token /.$_EOF_TOKEN./
$additional_interfaces /../
$super_stream_class /.AbstractLexer./
$prs_stream_class /.AbstractParser./
$environment_class /.BasicEnvironment./
$adapt_environment /.environment./
$prs_stream /. // macro prs_stream is deprecated. Use function getPrsStream
getPrsStream()./
$setSym1 /. // macro setSym1 is deprecated. Use function setResult
lexParser.setSym1./
$setResult /. // macro setResult is deprecated. Use function setResult
lexParser.setSym1./
$getSym /. // macro getSym is deprecated. Use function getLastToken
lexParser.getSym./
$getToken /. // macro getToken is deprecated. Use function getToken
lexParser.getToken./
$getLeftSpan /. // macro getLeftSpan is deprecated. Use function getLeftSpan
lexParser.getFirstToken./
$getRightSpan /. // macro getRightSpan is deprecated. Use function getRightSpan
lexParser.getLastToken./
--
-- Macros useful for specifying actions
--
$Header
/.
//
// Rule $rule_number: $rule_text
//./
$DefaultAction
/. $Header
case $rule_number: { ./
$BeginAction /.$DefaultAction./
$EndAction
/. break;
}./
$BeginJava
/.$BeginAction
$symbol_declarations./
$EndJava /.$EndAction./
$NoAction
/. $Header
case $rule_number:
break; ./
$BeginActions
/.
public void ruleAction( int ruleNumber)
{
switch(ruleNumber)
{./
$SplitActions
/.
default:
ruleAction$rule_number(ruleNumber);
break;
}
return;
}
public void ruleAction$rule_number(int ruleNumber)
{
switch (ruleNumber)
{./
$EndActions
/.
default:
break;
}
return;
}./
%End
%Globals
/.import lpg.runtime.*;
import org.eclipse.ocl.lpg.AbstractLexer;
import org.eclipse.ocl.lpg.AbstractParser;
./
%End
%Headers
/.
@SuppressWarnings("nls")
public class $action_type extends $super_stream_class implements $exp_type, $sym_type, RuleAction$additional_interfaces
{
private static ParseTable prs = new $prs_type();
//
// The Lexer contains an array of characters as the input stream to be parsed.
// There are methods to retrieve and classify characters.
// The lexparser "token" is implemented simply as the index of the next character in the array.
// The Lexer extends the abstract class LpgLexStream with an implementation of the abstract
// method getKind. The template defines the Lexer class and the lexer() method.
// A driver creates the action class, "Lexer", passing an Option object to the constructor.
//
protected $kw_lexer_class kwLexer;
protected boolean printTokens;
private $prs_stream_class parser;
private LexParser lexParser = new LexParser(this, prs, this);
private final $environment_class oclEnvironment;
public $action_type($environment_class environment) {
super($adapt_environment);
oclEnvironment = environment;
}
public $action_class($environment_class environment, char[] chars) {
this(environment, chars, "OCL", ECLIPSE_TAB_VALUE);
kwLexer = new $kw_lexer_class(getInputChars(), $_IDENTIFIER);
}
public $action_type($environment_class environment, char[] input_chars, String filename, int tab) {
super($adapt_environment, input_chars, filename, tab);
oclEnvironment = environment;
}
public $environment_class getOCLEnvironment() {
return oclEnvironment;
}
@Override
public int [] getKeywordKinds() { return kwLexer.getKeywordKinds(); }
public int getLeftSpan() { return lexParser.getFirstToken(); }
public $prs_stream_class getParser() { return parser; }
public int getRhsFirstTokenIndex(int i) { return lexParser.getFirstToken(i); }
public int getRhsLastTokenIndex(int i) { return lexParser.getLastToken(i); }
public int getRightSpan() { return lexParser.getLastToken(); }
@Override
public int getToken(int i) { return lexParser.getToken(i); }
@Override
public void initialize(char [] content, String filename)
{
super.initialize(content, filename);
if (kwLexer == null)
kwLexer = new $kw_lexer_class(getInputChars(), $_IDENTIFIER);
else
kwLexer.setInputChars(getInputChars());
}
@Override
public String[] orderedExportedSymbols() { return $exp_type.orderedTerminalSymbols; }
@Override
public void setInputChars(char[] inputChars) {
super.setInputChars(inputChars);
kwLexer = new $kw_lexer_class(getInputChars(), $_IDENTIFIER);
}
@Override
public void lexToTokens(Monitor monitor, $prs_stream_class parser)
{
if (getInputChars() == null)
throw new NullPointerException("LexStream was not initialized");
this.parser = parser;
parser.makeToken(0, 0, 0); // Token list must start with a bad token
lexParser.parseCharacters(monitor); // Lex the input characters
int i = getStreamIndex();
parser.makeToken(i, i, $eof_token); // and end with the end of file token
parser.setStreamLength(parser.getSize());
return;
}
./
%End
%Rules
/.$BeginActions./
%End
%Trailers
/.
$EndActions
}
./
%End
--
-- E N D O F T E M P L A T E
--