Soubor: /home/Matysek/BakalarkaCD/Zdrojove_kody/callTable.java Stránka 1 z 2
package callTable;
import parser.Expression;
import varTable.VarTabs;
import errors.Errors;
import errors.Messages;
public class CallTab {
private static CallTabLine[] lines = new CallTabLine[1000];
private static int lineCount = 0;
public static void call(String name, Expression[] params, String output) { lines[lineCount++] = new CallTabLine(name, params, output);
}
public static void report() {
System.out.println("---");
Messages.msg("Nalezeno celkem " + lineCount + " volani funkci");
for (int i = 0; i < lineCount; i++) {
System.out.print(lines[i].getPlace() + lines[i].getName() + "(");
for (int j = 0; j < lines[i].getParCount(); j++) {
if (VarTabs.existsTab(lines[i].getName()) && (j < VarTabs.getTab(lines[i].getName ()).getInCount())) {
System.out.print(VarTabs.getTab(lines[i].getName()).getInput(j));
}
else System.out.print("?");
if (j < lines[i].getParCount() - 1) System.out.print(", ");
}
System.out.println(")." + lines[i].getOutput());
if (!VarTabs.existsTab(lines[i].getName())) {
Errors.postCtrl(lines[i].getAt(), lines[i].getBase(),"Funkce " + lines[i].getName() + " neni definovana");
} else {
if (VarTabs.getTab(lines[i].getName()).getInCount() != lines[i].getParCount()) { Errors.postCtrl(lines[i].getAt(), lines[i].getBase(),
"Ocekavam " + VarTabs.getTab(lines[i].getName()).getInCount() + " parametry funkce " + lines[i].getName());
}
if (!VarTabs.getTab(lines[i].getName()).existsVar(lines[i].getOutput())) {
Errors.postCtrl(lines[i].getAt(), lines[i].getBase(), "Funkce " + lines[i].getName ()
+ " neobsahuje zadnou promennou " + lines[i].getOutput());
}else if (!VarTabs.getTab(lines[i].getName()).getVar(lines[i].getOutput()).getType ().equals("OUT")) {
Errors.postCtrl(lines[i].getAt(), lines[i].getBase(),
"Promenna " + lines[i].getOutput() + " funkce "
+ lines[i].getName() + " neni deklarovana jako vystupni");
} } } } }
package callTable;
import parser.Expression;
import parser.Reader;
import varTable.VarTabs;
public class CallTabLine {
private String place = "", base = "";
private Expression[] params;
private int parCount = 0, at = 0;
private String name = "", output = "";
public CallTabLine(String name, Expression[] params, String output) {
Soubor: /home/Matysek/BakalarkaCD/Zdrojove_kody/callTable.java Stránka 2 z 2
this.name = name;
this.params = params;
int i = 0;
while (params[i++] != null) parCount++;
this.output = output;
this.at = Reader.getIndex();
this.base = VarTabs.getActualTab();
this.place = VarTabs.getActualTab() + " - " + Reader.getLastSymbol().getLine() + ". radek: ";
}
public Expression getParam(int index) { return params[index]; } public String getName() { return name; }
public String getOutput() { return output; } public String getPlace() { return place; } public int getParCount() { return parCount; } public int getAt() { return at; }
public String getBase() { return base; } }