org.modelcc.parser.fence.Tuple Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of ModelCC Show documentation
Show all versions of ModelCC Show documentation
ModelCC is a model-based parser generator (a.k.a. compiler compiler) that decouples language specification from language processing, avoiding some of the problems caused by grammar-driven parser generators. ModelCC receives a conceptual model as input, along with constraints that annotate it. It is then able to create a parser for the desired textual language and the generated parser fully automates the instantiation of the language conceptual model. ModelCC also includes a built-in reference resolution mechanism that results in abstract syntax graphs, rather than mere abstract syntax trees.
The newest version!
/*
* ModelCC, distributed under ModelCC Shared Software License, www.modelcc.org
*/
package org.modelcc.parser.fence;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import org.modelcc.language.syntax.Rule;
/**
* Tuple (rule,{list of non-expanded symbols}) that represents valid reductions.
*
* @author Luis Quesada ([email protected]), bug fix by Fernando Berzal ([email protected])
*/
public class Tuple implements Serializable {
/**
* The rule.
*/
private Rule r;
/**
* The relevant rule.
*/
private Rule relevant;
/**
* The list of symbols.
*/
private List symbols;
/**
* Constructor
* @param r Grammar rule
*/
public Tuple(Rule r)
{
this.r = r;
this.symbols = new ArrayList();
this.relevant = null;
}
/**
* @return the rule
*/
public Rule getRule() {
return r;
}
/**
* @return the symbols
*/
public List getSymbols()
{
return symbols;
}
public int getSymbolCount ()
{
return symbols.size();
}
public ParsedSymbol getSymbol (int index)
{
if (index ss)
{
for (ParsedSymbol s: ss)
if (!symbols.contains(s))
symbols.addAll(ss);
}
public void addSymbol (ParsedSymbol s)
{
if (!symbols.contains(s))
symbols.add(s);
}
/**
* @return the relevant rule.
*/
public Rule getRelevant() {
return relevant;
}
/**
* @param relevant the relevant to set
*/
public void setRelevant(Rule relevant) {
this.relevant = relevant;
}
// toString
@Override
public String toString ()
{
return r + " [" + symbols.size() + "]";
}
}