Skip to content

Commit

Permalink
Add NodeType bits and add Destructor.
Browse files Browse the repository at this point in the history
  • Loading branch information
weetmuts committed Jul 9, 2024
1 parent 6515612 commit 98c5dd6
Show file tree
Hide file tree
Showing 20 changed files with 605 additions and 169 deletions.
3 changes: 3 additions & 0 deletions src/main/antlr4/com/viklauverk/eventbtools/core/EvBFormula.g4
Original file line number Diff line number Diff line change
Expand Up @@ -272,6 +272,9 @@ expression
| { symbol_table.isNumberSymbol(_input.LT(1).getText()) }? sym=SYMBOL meta? # NumberSymbol
| { symbol_table.isNonFreeVariableSymbol(_input.LT(1).getText()) }? variable=SYMBOL meta? # NonFreeExpressionVariable
| { symbol_table.isVariableSymbol(_input.LT(1).getText()) }? variable=SYMBOL PRIM? meta? # ExpressionVariable
| { symbol_table.isConstructorSymbol(_input.LT(1).getText()) }? constructor=SYMBOL meta? # Constructor
| { symbol_table.isDestructorSymbol(_input.LT(1).getText()) }? destructor=SYMBOL meta? # Destructor
| { symbol_table.isOperatorSymbol(_input.LT(1).getText()) }? operator=SYMBOL meta? # Operator
| { symbol_table.isConstantSymbol(_input.LT(1).getText()) }? constant=SYMBOL meta? # ExpressionConstant
// Should we be able to talk about all functions such that their applications give such and such result? For the moment, we can't.
| { symbol_table.isVariableSymbol(_input.LT(1).getText()) }? variable=SYMBOL PRIM? INV? meta? '(' inner=expression ')' # VariableFunctionApplication
Expand Down
13 changes: 7 additions & 6 deletions src/main/java/com/viklauverk/eventbtools/core/AllRenders.java
Original file line number Diff line number Diff line change
Expand Up @@ -43,28 +43,29 @@ public class AllRenders
private SystemSearch system_search_;

@SuppressWarnings("this-escape")
public AllRenders(RenderTheory rt,
RenderPolymorphicDataType rpdt,
RenderContext rc,
public AllRenders(RenderContext rc,
RenderMachine rm,
RenderEvent re,
RenderFormula rf,
RenderTheory rt,
RenderPolymorphicDataType rpdt,
Canvas c)
{
rt_ = rt;
rpdt_ = rpdt;
rc_ = rc;
rm_ = rm;
re_ = re;
rf_ = rf;
rt_ = rt;
rpdt_ = rpdt;
system_search_ = new SystemSearch();

root_canvas_ = c;
current_ = c;
rt_.setRenders(this);
rc_.setRenders(this);
rm_.setRenders(this);
re_.setRenders(this);
rt_.setRenders(this);
rpdt_.setRenders(this);
}

public Canvas currentCanvas()
Expand Down
60 changes: 60 additions & 0 deletions src/main/java/com/viklauverk/eventbtools/core/Canvas.java
Original file line number Diff line number Diff line change
Expand Up @@ -1138,6 +1138,66 @@ public void constant(String s)
assert (false) : "Unknown encoding "+render_target_;
}

public void constructor(String s)
{
switch (render_target_)
{
case PLAIN:
append(s);
return;
case TERMINAL:
append(colorize(BGreen, s));
return;
case TEX:
append("\\CNSTR{"+Util.texSafe(s)+"}");
return;
case HTML:
append(" span(class=CNSTR)="+Util.quoteXMQ(s)+" ");
return;
}
assert (false) : "Unknown encoding "+render_target_;
}

public void destructor(String s)
{
switch (render_target_)
{
case PLAIN:
append(s);
return;
case TERMINAL:
append(colorize(BGreen, s));
return;
case TEX:
append("\\DSTR{"+Util.texSafe(s)+"}");
return;
case HTML:
append(" span(class=DSTR)="+Util.quoteXMQ(s)+" ");
return;
}
assert (false) : "Unknown encoding "+render_target_;
}

public void operator(String s)
{
switch (render_target_)
{
case PLAIN:
append(s);
return;
case TERMINAL:
append(colorize(BGreen, s));
return;
case TEX:
append("\\OPRT{"+Util.texSafe(s)+"}");
return;
case HTML:
append(" span(class=OPRT)="+Util.quoteXMQ(s)+" ");
return;
}
assert (false) : "Unknown encoding "+render_target_;
}

public void primitiveSet(String s)
{
switch (render_target_)
Expand Down
35 changes: 35 additions & 0 deletions src/main/java/com/viklauverk/eventbtools/core/Constructor.java
Original file line number Diff line number Diff line change
Expand Up @@ -17,13 +17,25 @@

package com.viklauverk.eventbtools.core;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.HashMap;
import java.util.Set;
import java.util.HashSet;
import java.util.stream.Collectors;

public class Constructor extends Typed
{
private String name_;
private String comment_;
private Formula definition_;
private PolymorphicDataType polymorphic_datatype_;

private Map<String,Destructor> destructors_ = new HashMap<>();
private List<Destructor> destructor_ordering_ = new ArrayList<>();
private List<String> destructor_names_ = new ArrayList<>();

public Constructor(String n, PolymorphicDataType pdt)
{
name_ = n;
Expand Down Expand Up @@ -70,4 +82,27 @@ public boolean hasDefinition()
{
return definition_ != null;
}

public void addDestructor(Destructor o)
{
destructors_.put(o.name(), o);
destructor_ordering_.add(o);
destructor_names_ = destructors_.keySet().stream().sorted().collect(Collectors.toList());
}

public Destructor getDestructor(String name)
{
return destructors_.get(name);
}

public List<Destructor> destructorOrdering()
{
return destructor_ordering_;
}

public List<String> destructorNames()
{
return destructor_names_;
}

}
73 changes: 73 additions & 0 deletions src/main/java/com/viklauverk/eventbtools/core/Destructor.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,73 @@
/*
Copyright (C) 2021-2024 Viklauverk AB
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/

package com.viklauverk.eventbtools.core;

public class Destructor extends Typed
{
private String name_;
private String comment_;
private Formula definition_;
private Constructor constructor_;

public Destructor(String n, Constructor cnstr)
{
name_ = n;
constructor_ = cnstr;
}

@Override
public String toString()
{
return name_;
}

public String name()
{
return name_;
}

public String comment()
{
return comment_;
}

public void addComment(String c)
{
comment_ = c;
}

public void setDefinition(Formula f)
{
definition_ = f;
}

public Formula definition()
{
return definition_;
}

public boolean hasDefinition()
{
return definition_ != null;
}

public Constructor constructor()
{
return constructor_;
}
}
18 changes: 18 additions & 0 deletions src/main/java/com/viklauverk/eventbtools/core/FormulaBuilder.java
Original file line number Diff line number Diff line change
Expand Up @@ -174,6 +174,24 @@ public Formula visitExpressionConstant(EvBFormulaParser.ExpressionConstantContex
return FormulaFactory.newConstantSymbol(ctx.constant.getText(), visitOptionalMeta(ctx.meta()));
}

@Override
public Formula visitConstructor(EvBFormulaParser.ConstructorContext ctx)
{
return FormulaFactory.newConstructorSymbol(ctx.constructor.getText(), visitOptionalMeta(ctx.meta()));
}

@Override
public Formula visitDestructor(EvBFormulaParser.DestructorContext ctx)
{
return FormulaFactory.newDestructorSymbol(ctx.destructor.getText(), visitOptionalMeta(ctx.meta()));
}

@Override
public Formula visitOperator(EvBFormulaParser.OperatorContext ctx)
{
return FormulaFactory.newOperatorSymbol(ctx.operator.getText(), visitOptionalMeta(ctx.meta()));
}

@Override
public Formula visitVariableFunctionApplication(EvBFormulaParser.VariableFunctionApplicationContext ctx)
{
Expand Down
18 changes: 18 additions & 0 deletions src/main/java/com/viklauverk/eventbtools/core/FormulaFactory.java
Original file line number Diff line number Diff line change
Expand Up @@ -135,6 +135,24 @@ Formula newSetSymbol (String s, Formula meta)
return new Formula(Node.SET_SYMBOL, Symbols.intern(s), meta);
}

public static
Formula newConstructorSymbol (String s, Formula meta)
{
return new Formula(Node.CONSTRUCTOR_SYMBOL, Symbols.intern(s), meta);
}

public static
Formula newDestructorSymbol (String s, Formula meta)
{
return new Formula(Node.DESTRUCTOR_SYMBOL, Symbols.intern(s), meta);
}

public static
Formula newOperatorSymbol (String s, Formula meta)
{
return new Formula(Node.OPERATOR_SYMBOL, Symbols.intern(s), meta);
}

public static
Formula newPolymorphicDataTypeSymbol(String s, Formula parameters, Formula meta)
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,9 @@ public interface FormulaVisitor
Formula visit_VARIABLE_NONFREE_SYMBOL(Formula i);
Formula visit_CONSTANT_SYMBOL(Formula i);
Formula visit_POLYMORPHIC_DATA_TYPE_SYMBOL(Formula i);
Formula visit_CONSTRUCTOR_SYMBOL(Formula i);
Formula visit_DESTRUCTOR_SYMBOL(Formula i);
Formula visit_OPERATOR_SYMBOL(Formula i);
Formula visit_APPLICATION(Formula i);
Formula visit_PARENTHESISED_PREDICATE(Formula i);
Formula visit_PARENTHESISED_EXPRESSION(Formula i);
Expand Down
Loading

0 comments on commit 98c5dd6

Please sign in to comment.