1 package de.lathanda.eos.baseparser;
3 import java.util.LinkedList;
4 import java.util.Map.Entry;
5 import java.util.TreeMap;
7 import de.lathanda.eos.baseparser.exceptions.WrongPlaceForDeclarationException;
8 import de.lathanda.eos.vm.ErrorInformation;
9 import de.lathanda.eos.vm.Marker;
23 private final LinkedList<ErrorInformation> errors =
new LinkedList<>();
27 private final TreeMap<String, Type> variables =
new TreeMap<>();
31 private final TreeMap<String, Type> storedVariables =
new TreeMap<>();
35 private final TreeMap<String, MethodType> functions;
39 private boolean hasWindow =
false;
43 private boolean hasFigure =
false;
47 private final String defaultWindowName;
51 private final boolean lockProperties;
55 private int variableLock = 0;
67 this.lockProperties = lockProperties;
68 this.defaultWindowName = defaultWindowName;
69 this.functions =
new TreeMap<>();
74 this.lockProperties = lockProperties;
75 this.defaultWindowName = defaultWIndowName;
76 this.functions =
new TreeMap<>();
97 if (variableLock == 0) {
98 variables.put(name, type);
105 return variables.containsKey(name);
116 storedVariables.clear();
122 return functions.get(name.toLowerCase() +
"(" + args +
")");
126 functions.put(name.toLowerCase() +
"(" + args +
")", methodType);
130 return functions.containsKey(name.toLowerCase() +
"(" + args +
")");
146 return !hasWindow && hasFigure;
156 storedVariables.putAll(variables);
161 variables.putAll(storedVariables);
166 StringBuilder res =
new StringBuilder();
167 res.append(
"environment\n");
168 res.append(
"hasWindow = ").append(hasWindow).append(
"\n");
169 res.append(
"hasFigure = ").append(hasFigure).append(
"\n");
170 res.append(
"variableLock = ").append(variableLock).append(
"\n");
171 res.append(
"local variable:\n");
172 for (Entry<String, Type> v : variables.entrySet()) {
173 res.append(v.getKey()).append(
":").append(v.getValue()).append(
"\n");
175 res.append(
"global variable:\n");
176 for (Entry<String, Type> v : storedVariables.entrySet()) {
177 res.append(v.getKey()).append(
":").append(v.getValue()).append(
"\n");
179 res.append(
"user defined functions:\n");
180 for (Entry<String, MethodType> f : functions.entrySet()) {
181 res.append(f.getValue()).append(
"\n");
183 res.append(
"endenvironment\n");
184 return res.toString();
188 return defaultWindowName;
192 return lockProperties;
void allowVariableDeclaration()
void setVariableType(String name, Type type)
boolean isVariableDefined(String name)
boolean getLockProperties()
LinkedList< ErrorInformation > getErrors()
MethodType getFunctionSignature(String name, int args)
Type getVariableType(String name)
String getDefaultWindowName()
void setFunctionSignature(String name, int args, MethodType methodType)
Environment(boolean lockProperties, Program p, String defaultWIndowName)
void prohibitVariableDeclaration()
Environment(Program p, String defaultWindowName, boolean lockProperties)
boolean isFunctionDefined(String name, int args)
void addError(Marker marker, String errorId, Object... data)
static SystemType getUnknown()