/*******************************************************************************
* Copyright (c) 2008 Scott Stanchfield.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Based on the ANTLR parser generator by Terence Parr, http://antlr.org
* Ric Klaren <klaren@cs.utwente.nl>
* Scott Stanchfield - Modifications for XML Parsing
*******************************************************************************/
package com.javadude.antxr;
class StringLiteralElement extends GrammarAtom {
// atomText with quotes stripped and escape codes processed
protected String processedAtomText;
public StringLiteralElement(Grammar g, Token t, int autoGenType) {
super(g, t, autoGenType);
if (!(g instanceof LexerGrammar)) {
// lexer does not have token types for string literals
TokenSymbol ts = grammar.tokenManager.getTokenSymbol(atomText);
if (ts == null) {
g.antxrTool.error("Undefined literal: " + atomText, grammar.getFilename(), t.getLine(), t.getColumn());
}
else {
tokenType = ts.getTokenType();
}
}
line = t.getLine();
// process the string literal text by removing quotes and escaping chars
// If a lexical grammar, add the characters to the char vocabulary
processedAtomText = new String();
for (int i = 1; i < atomText.length() - 1; i++) {
char c = atomText.charAt(i);
if (c == '\\') {
if (i + 1 < atomText.length() - 1) {
i++;
c = atomText.charAt(i);
switch (c) {
case 'n':
c = '\n';
break;
case 'r':
c = '\r';
break;
case 't':
c = '\t';
break;
}
}
}
if (g instanceof LexerGrammar) {
((LexerGrammar)g).charVocabulary.add(c);
}
processedAtomText += c;
}
}
@Override
public void generate() {
grammar.generator.gen(this);
}
@Override
public Lookahead look(int k) {
return grammar.theLLkAnalyzer.look(k, this);
}
}