Commit 76db5e89 authored by Leonard Faecke's avatar Leonard Faecke
Browse files

+ Added remaining operators

* Expanded analysis of groups
parent bb13bb17
Loading
Loading
Loading
Loading
+78 −7
Original line number Diff line number Diff line
@@ -849,10 +849,73 @@ System.out.println("Analyzing function");
	}
	
	private void analyzeOperators(TTCN3Module module, Map<String, Long> output) {
		//Shift and rotate operators
		for(ShiftExpression exp : EcoreUtil2.getAllContentsOfType(module, ShiftExpression.class)) {
			String operation = "UnkownShiftOperation";
			switch(exp.getOperator()) {
		for(SingleExpression s : EcoreUtil2.getAllContentsOfType(module, SingleExpression.class)) {
			if(s.getOperator() == null) continue;
			String operation = "Unkown";
			switch(s.getOperator()) {
			case "+":
				operation = "Add";
				break;
			case "-":
				operation = "Subtract";
				break;
			case "&":
				operation = "Concat";
				break;
			case "*":
				operation = "Multiply";
				break;
			case "/":
				operation = "Divide";
				break;
			case "mod":
				operation = "Modulo";
				break;
			case "rem":
				operation = "Remainder";
				break;
			case "<":
				operation = "LessThan";
				break;
			case ">":
				operation = "GreaterThan";
				break;
			case "<=":
				operation = "LessOrEqual";
				break;
			case ">=":
				operation = "GreaterOrEqual";
				break;
			case "==":
				operation = "Equal";
				break;
			case "!=":
				operation = "NotEqual";
				break;
			case "and":
				operation = "And";
				break;
			case "or":
				operation = "Or";
				break;
			case "not":
				operation = "Not";
				break;
			case "xor":
				operation = "Xor";
				break;
			case "and4b":
				operation = "BAnd";
				break;
			case "or4b":
				operation = "BOr";
				break;
			case "not4b":
				operation = "BNot";
				break;
			case "xor4b":
				operation = "BXor";
				break;
			case "<<":
				operation = "LeftShift";
				break;
@@ -866,8 +929,9 @@ System.out.println("Analyzing function");
				operation = "RightRotate";
				break;
			default:
				System.out.println("Unkown Shift operation found");
				System.out.println(s.getOperator());
			}
			
			addToOutput(output, operation);
		}
		
@@ -890,8 +954,11 @@ System.out.println("Analyzing function");
		int groups = 0;
		for(ModuleDefinition def : module.getDefs().getDefinitions()) {
			if(def.getDef().getClass() == GroupDefImpl.class) {
				GroupDef g = (GroupDef) def.getDef();
				groups++;
				sum += checkRecursionDepth((GroupDef) def.getDef());
				int d = checkRecursionDepth(g);
				sum += d;
				addToOutput(output, "GroupDepth_" + d);
			}
		}
		addNToOutput(output, "TopLevel_GroupDef", groups);
@@ -900,7 +967,11 @@ System.out.println("Analyzing function");
		//analyze group content
		for(GroupDef group : EcoreUtil2.getAllContentsOfType(module, GroupDef.class)) {
			if(group.getList() == null) continue;
			EcoreUtil2.getAllContainers(group);
			
			if(group.getList() == null) addToOutput(output, "GroupSize_0");
			else addToOutput(output, "GroupSize_" + (group.getList().getDefinitions().size()));
			
			
			for(ModuleDefinition def : group.getList().getDefinitions()) {
				String name = def.getDef().getClass().getSimpleName();
				addToOutput(output, "InGroup_" + name.substring(0, name.length()-4));
+12 −12
Original line number Diff line number Diff line
@@ -1146,43 +1146,43 @@ BooleanExpression:
	SingleExpression;

SingleExpression returns SingleExpression:
	XorExpression ({SingleExpression.left=current} OR right=XorExpression)*;
	XorExpression ({SingleExpression.left=current} operator=OR right=XorExpression)*;

XorExpression returns SingleExpression:
	AndExpression ({XorExpression.left=current} XOR right=AndExpression)*;
	AndExpression ({XorExpression.left=current} operator=XOR right=AndExpression)*;

AndExpression returns SingleExpression:
	NotExpression ({AndExpression.left=current} AND right=NotExpression)*;
	NotExpression ({AndExpression.left=current} operator=AND right=NotExpression)*;

NotExpression returns SingleExpression:
	NOT? EqualExpression;
	operator=NOT? exp=EqualExpression;

EqualExpression returns SingleExpression:
	RelExpression ({EqualExpression.left=current} EqualOp right=RelExpression)*;
	RelExpression ({EqualExpression.left=current} operator=EqualOp right=RelExpression)*;

RelExpression returns SingleExpression:
	ShiftExpression ({RelExpression.left=current} RelOp right=ShiftExpression)* | CompoundExpression;
	ShiftExpression ({RelExpression.left=current} operator=RelOp right=ShiftExpression)* | CompoundExpression;

ShiftExpression returns SingleExpression:
	BitOrExpression ({ShiftExpression.left=current} operator=ShiftOp right=BitOrExpression)*;

BitOrExpression returns SingleExpression:
	BitXorExpression ({BitOrExpression.left=current} OR4B right=BitXorExpression)*;
	BitXorExpression ({BitOrExpression.left=current} operator=OR4B right=BitXorExpression)*;

BitXorExpression returns SingleExpression:
	BitAndExpression ({BitXorExpression.left=current} XOR4B right=BitAndExpression)*;
	BitAndExpression ({BitXorExpression.left=current} operator=XOR4B right=BitAndExpression)*;

BitAndExpression returns SingleExpression:
	BitNotExpression ({BitAndExpression.left=current} AND4B right=BitNotExpression)*;
	BitNotExpression ({BitAndExpression.left=current} operator=AND4B right=BitNotExpression)*;

BitNotExpression returns SingleExpression:
	NOT4B? AddExpression;
	operator=NOT4B? exp=AddExpression;

AddExpression returns SingleExpression:
	MulExpression ({AddExpression.left=current} AddOp right=MulExpression)*;
	MulExpression ({AddExpression.left=current} operator=AddOp right=MulExpression)*;

MulExpression returns SingleExpression:
	UnaryExpression ({MulExpression.left=current} MultiplyOp right=UnaryExpression)* | CompoundExpression;
	UnaryExpression ({MulExpression.left=current} operator=MultiplyOp right=UnaryExpression)* | CompoundExpression;

UnaryExpression returns SingleExpression:
	UnaryOp? Primary;