From: rtrimana Date: Thu, 29 Sep 2016 21:56:02 +0000 (-0700) Subject: Adding square brackets handling for arrays; Adding more policy files X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;ds=sidebyside;h=937bdbd1f5218918668a92d024c11ba8bdc88f4c;p=iot2.git Adding square brackets handling for arrays; Adding more policy files --- diff --git a/config/iotpolicy/camerapolicy.pol b/config/iotpolicy/camerapolicy.pol new file mode 100644 index 0000000..ac99558 --- /dev/null +++ b/config/iotpolicy/camerapolicy.pol @@ -0,0 +1,32 @@ +public interface Camera { + + public void MethodA(int A, int B); + public void MethodA(int A, int B, int AB); + public int MethodB(int C, String D[]); + public String MethodC(String E, Map F); + public float MethodD(Set G, float H); + public boolean MethodE(String I, boolean J); + public void MethodF(int K); + + capability ImageCapture { + description = "The quick brown fox jumps over the smart dog"; + description = "Another description"; + method = "MethodA(int A, int B)"; + method = "MethodB(int C, String D[])"; + method = "MethodC(String E, Map F)"; + } + + capability VideoRecording { + description = "The quick brown fox jumps over the cool dog"; + method = "MethodA(int A, int B)"; + method = "MethodA(int A, int B, int AB)"; + method = "MethodD(Set G, float H)"; + } + + capability BackupData { + description = "The quick brown fox jumps over the clever dog"; + method = "MethodE(String I, boolean J)"; + } +} + + diff --git a/config/iotpolicy/camerarequires.pol b/config/iotpolicy/camerarequires.pol new file mode 100644 index 0000000..90049de --- /dev/null +++ b/config/iotpolicy/camerarequires.pol @@ -0,0 +1,3 @@ + +requires Camera with ImageCapture, BackupData as interface CameraWithCaptureAndData; + diff --git a/config/iotpolicy/lightbulbpolicy.pol b/config/iotpolicy/lightbulbpolicy.pol new file mode 100644 index 0000000..900089c --- /dev/null +++ b/config/iotpolicy/lightbulbpolicy.pol @@ -0,0 +1,24 @@ +public interface LightBulb { + + public void MethodA(int A, float B); + public void MethodA(int A, float B, int AB); + public int MethodB(String C, String D); + public byte MethodC(String E, Map F); + + capability Flicker { + description = "The quick brown fox jumps over the smart dog"; + description = "Another description"; + method = "MethodA(int A, float B)"; + method = "MethodB(String C, String D)"; + method = "MethodC(String E, Map F)"; + } + + capability AutoOnOff { + description = "The quick brown fox jumps over the cool dog"; + method = "MethodA(int A, float B)"; + method = "MethodA(int A, float B, int AB)"; + method = "MethodC(String E, Map F)"; + } +} + + diff --git a/config/iotpolicy/lightbulbrequires.pol b/config/iotpolicy/lightbulbrequires.pol new file mode 100644 index 0000000..24a7ca1 --- /dev/null +++ b/config/iotpolicy/lightbulbrequires.pol @@ -0,0 +1,3 @@ + +requires LightBulb with Flicker as interface LightBulbWithFlicker; + diff --git a/config/iotpolicy/policy.pol b/config/iotpolicy/policy.pol deleted file mode 100644 index 986f6f9..0000000 --- a/config/iotpolicy/policy.pol +++ /dev/null @@ -1,32 +0,0 @@ -public interface Camera { - - public void MethodA(int A, int B); - public void MethodA(int A, int B, int AB); - public int MethodB(int C, String D); - public String MethodC(String E, Map F); - public float MethodD(Set G, float H); - public boolean MethodE(String I, boolean J); - public void MethodF(int K); - - capability ImageCapture { - description = "The quick brown fox jumps over the smart dog"; - description = "Another description"; - method = "MethodA(int A, int B)"; - method = "MethodB(int C, String D)"; - method = "MethodC(String E, Map F)"; - } - - capability VideoRecording { - description = "The quick brown fox jumps over the cool dog"; - method = "MethodA(int A, int B)"; - method = "MethodA(int A, int B, int AB)"; - method = "MethodD(Set G, float H)"; - } - - capability BackupData { - description = "The quick brown fox jumps over the clever dog"; - method = "MethodE(String I, boolean J)"; - } -} - - diff --git a/config/iotpolicy/requires.pol b/config/iotpolicy/requires.pol deleted file mode 100644 index 2531e20..0000000 --- a/config/iotpolicy/requires.pol +++ /dev/null @@ -1,4 +0,0 @@ - -requires Camera with ImageCapture, BackupData as interface CameraWithCaptureAndData; -requires Camera with ImageCapture, VideoRecording as interface CameraWithCaptureAndRecording; - diff --git a/iotjava/Makefile b/iotjava/Makefile index 6fa1209..6b19677 100644 --- a/iotjava/Makefile +++ b/iotjava/Makefile @@ -19,7 +19,7 @@ compiler: PHONY += run run: - cd $(BIN_DIR)/iotpolicy; $(JAVA) -cp .:..:../$(PARSERJARS):../$(BIN_DIR) iotpolicy.IoTCompiler policy.pol requires.pol -java Java -cplus Cplus + cd $(BIN_DIR)/iotpolicy; $(JAVA) -cp .:..:../$(PARSERJARS):../$(BIN_DIR) iotpolicy.IoTCompiler camerapolicy.pol camerarequires.pol -java Java -cplus Cplus PHONY += doc doc: iotruntime iotinstaller diff --git a/iotjava/iotpolicy/parser/Lexer.java b/iotjava/iotpolicy/parser/Lexer.java index 947b4e3..b3f3fd9 100644 --- a/iotjava/iotpolicy/parser/Lexer.java +++ b/iotjava/iotpolicy/parser/Lexer.java @@ -47,11 +47,11 @@ public class Lexer implements java_cup.runtime.Scanner, sym { private static final String ZZ_CMAP_PACKED = "\11\0\1\6\1\4\1\50\1\6\1\3\22\0\1\6\1\0\1\36"+ "\1\0\1\1\3\0\1\40\1\41\2\0\1\37\3\0\12\2\1\0"+ - "\1\5\1\42\1\46\1\43\2\0\22\1\1\30\7\1\1\0\1\47"+ - "\2\0\1\1\1\0\1\24\1\16\1\27\1\25\1\20\1\23\1\22"+ - "\1\13\1\7\2\1\1\21\1\33\1\10\1\14\1\32\1\34\1\15"+ - "\1\12\1\11\1\26\1\31\1\35\1\1\1\17\1\1\1\44\1\0"+ - "\1\45\7\0\1\50\u1fa2\0\1\50\1\50\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\udfe6\0"; + "\1\5\1\42\1\46\1\43\2\0\22\1\1\30\7\1\1\2\1\47"+ + "\1\2\1\0\1\1\1\0\1\24\1\16\1\27\1\25\1\20\1\23"+ + "\1\22\1\13\1\7\2\1\1\21\1\33\1\10\1\14\1\32\1\34"+ + "\1\15\1\12\1\11\1\26\1\31\1\35\1\1\1\17\1\1\1\44"+ + "\1\0\1\45\7\0\1\50\u1fa2\0\1\50\1\50\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\udfe6\0"; /** * Translates characters to character classes @@ -379,7 +379,7 @@ public class Lexer implements java_cup.runtime.Scanner, sym { char [] map = new char[0x110000]; int i = 0; /* index in packed string */ int j = 0; /* index in unpacked array */ - while (i < 166) { + while (i < 168) { int count = packed.charAt(i++); char value = packed.charAt(i++); do map[j++] = value; while (--count > 0); diff --git a/iotjava/iotpolicy/parser/Parser.java b/iotjava/iotpolicy/parser/Parser.java index 34802a2..5f3158a 100644 --- a/iotjava/iotpolicy/parser/Parser.java +++ b/iotjava/iotpolicy/parser/Parser.java @@ -47,11 +47,11 @@ public class Parser extends java_cup.runtime.lr_parser { "\007\000\002\007\011\000\002\007\011\000\002\007\011" + "\000\002\007\011\000\002\007\010\000\002\007\010\000" + "\002\007\012\000\002\007\012\000\002\007\012\000\002" + - "\007\012\000\002\010\004\000\002\010\002\000\002\011" + - "\007\000\002\012\004\000\002\012\002\000\002\013\006" + - "\000\002\013\006\000\002\014\004\000\002\014\002\000" + - "\002\015\012\000\002\016\003\000\002\016\005\000\002" + - "\016\002" }); + "\007\012\000\002\011\004\000\002\011\002\000\002\012" + + "\007\000\002\013\004\000\002\013\002\000\002\014\006" + + "\000\002\014\006\000\002\015\004\000\002\015\002\000" + + "\002\016\012\000\002\017\003\000\002\017\005\000\002" + + "\017\002" }); /** Access to production table. */ public short[][] production_table() {return _production_table;} @@ -121,14 +121,14 @@ public class Parser extends java_cup.runtime.lr_parser { /** reduce_goto table. */ protected static final short[][] _reduce_table = unpackFromStrings(new String[] { - "\000\127\000\010\002\006\003\003\014\004\001\001\000" + - "\002\001\001\000\004\015\115\001\001\000\002\001\001" + + "\000\127\000\010\002\006\003\003\015\004\001\001\000" + + "\002\001\001\000\004\016\115\001\001\000\002\001\001" + "\000\002\001\001\000\002\001\001\000\002\001\001\000" + "\002\001\001\000\004\004\013\001\001\000\006\005\014" + - "\010\016\001\001\000\002\001\001\000\002\001\001\000" + - "\004\011\017\001\001\000\002\001\001\000\002\001\001" + - "\000\002\001\001\000\002\001\001\000\004\012\024\001" + - "\001\000\004\013\025\001\001\000\002\001\001\000\002" + + "\011\016\001\001\000\002\001\001\000\002\001\001\000" + + "\004\012\017\001\001\000\002\001\001\000\002\001\001" + + "\000\002\001\001\000\002\001\001\000\004\013\024\001" + + "\001\000\004\014\025\001\001\000\002\001\001\000\002" + "\001\001\000\002\001\001\000\002\001\001\000\002\001" + "\001\000\002\001\001\000\002\001\001\000\002\001\001" + "\000\002\001\001\000\002\001\001\000\002\001\001\000" + @@ -147,7 +147,7 @@ public class Parser extends java_cup.runtime.lr_parser { "\002\001\001\000\002\001\001\000\002\001\001\000\004" + "\006\112\001\001\000\004\007\046\001\001\000\002\001" + "\001\000\002\001\001\000\002\001\001\000\002\001\001" + - "\000\002\001\001\000\004\016\122\001\001\000\002\001" + + "\000\002\001\001\000\004\017\122\001\001\000\002\001" + "\001\000\002\001\001\000\002\001\001\000\002\001\001" + "\000\002\001\001\000\002\001\001\000\002\001\001\000" + "\002\001\001" }); @@ -807,7 +807,7 @@ class CUP$Parser$actions { cl.addChild(cap); RESULT = cl; - CUP$Parser$result = parser.getSymbolFactory().newSymbol("capablist",6, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-1)), ((java_cup.runtime.Symbol)CUP$Parser$stack.peek()), RESULT); + CUP$Parser$result = parser.getSymbolFactory().newSymbol("capablist",7, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-1)), ((java_cup.runtime.Symbol)CUP$Parser$stack.peek()), RESULT); } return CUP$Parser$result; @@ -819,7 +819,7 @@ class CUP$Parser$actions { ParseNode pn = new ParseNode("capab_list"); RESULT = pn; - CUP$Parser$result = parser.getSymbolFactory().newSymbol("capablist",6, ((java_cup.runtime.Symbol)CUP$Parser$stack.peek()), RESULT); + CUP$Parser$result = parser.getSymbolFactory().newSymbol("capablist",7, ((java_cup.runtime.Symbol)CUP$Parser$stack.peek()), RESULT); } return CUP$Parser$result; @@ -839,7 +839,7 @@ class CUP$Parser$actions { pn.addChild(ccont); RESULT = pn; - CUP$Parser$result = parser.getSymbolFactory().newSymbol("capab",7, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-4)), ((java_cup.runtime.Symbol)CUP$Parser$stack.peek()), RESULT); + CUP$Parser$result = parser.getSymbolFactory().newSymbol("capab",8, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-4)), ((java_cup.runtime.Symbol)CUP$Parser$stack.peek()), RESULT); } return CUP$Parser$result; @@ -857,7 +857,7 @@ class CUP$Parser$actions { ccont.addChild(cnt); RESULT = ccont; - CUP$Parser$result = parser.getSymbolFactory().newSymbol("capabcont",8, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-1)), ((java_cup.runtime.Symbol)CUP$Parser$stack.peek()), RESULT); + CUP$Parser$result = parser.getSymbolFactory().newSymbol("capabcont",9, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-1)), ((java_cup.runtime.Symbol)CUP$Parser$stack.peek()), RESULT); } return CUP$Parser$result; @@ -869,7 +869,7 @@ class CUP$Parser$actions { ParseNode pn = new ParseNode("capab_content"); RESULT = pn; - CUP$Parser$result = parser.getSymbolFactory().newSymbol("capabcont",8, ((java_cup.runtime.Symbol)CUP$Parser$stack.peek()), RESULT); + CUP$Parser$result = parser.getSymbolFactory().newSymbol("capabcont",9, ((java_cup.runtime.Symbol)CUP$Parser$stack.peek()), RESULT); } return CUP$Parser$result; @@ -888,7 +888,7 @@ class CUP$Parser$actions { pn.addChild("capab_desc").setLiteral(strdsc); RESULT = pn; - CUP$Parser$result = parser.getSymbolFactory().newSymbol("cont",9, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-3)), ((java_cup.runtime.Symbol)CUP$Parser$stack.peek()), RESULT); + CUP$Parser$result = parser.getSymbolFactory().newSymbol("cont",10, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-3)), ((java_cup.runtime.Symbol)CUP$Parser$stack.peek()), RESULT); } return CUP$Parser$result; @@ -907,7 +907,7 @@ class CUP$Parser$actions { pn.addChild("capab_meth").setLiteral(strmeth); RESULT = pn; - CUP$Parser$result = parser.getSymbolFactory().newSymbol("cont",9, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-3)), ((java_cup.runtime.Symbol)CUP$Parser$stack.peek()), RESULT); + CUP$Parser$result = parser.getSymbolFactory().newSymbol("cont",10, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-3)), ((java_cup.runtime.Symbol)CUP$Parser$stack.peek()), RESULT); } return CUP$Parser$result; @@ -925,7 +925,7 @@ class CUP$Parser$actions { rl.addChild(req); RESULT = rl; - CUP$Parser$result = parser.getSymbolFactory().newSymbol("reqlist",10, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-1)), ((java_cup.runtime.Symbol)CUP$Parser$stack.peek()), RESULT); + CUP$Parser$result = parser.getSymbolFactory().newSymbol("reqlist",11, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-1)), ((java_cup.runtime.Symbol)CUP$Parser$stack.peek()), RESULT); } return CUP$Parser$result; @@ -937,7 +937,7 @@ class CUP$Parser$actions { ParseNode pn = new ParseNode("reqlist"); RESULT = pn; - CUP$Parser$result = parser.getSymbolFactory().newSymbol("reqlist",10, ((java_cup.runtime.Symbol)CUP$Parser$stack.peek()), RESULT); + CUP$Parser$result = parser.getSymbolFactory().newSymbol("reqlist",11, ((java_cup.runtime.Symbol)CUP$Parser$stack.peek()), RESULT); } return CUP$Parser$result; @@ -961,7 +961,7 @@ class CUP$Parser$actions { pn.addChild("new_intface_ident").setLiteral(idnewint); RESULT = pn; - CUP$Parser$result = parser.getSymbolFactory().newSymbol("require",11, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-7)), ((java_cup.runtime.Symbol)CUP$Parser$stack.peek()), RESULT); + CUP$Parser$result = parser.getSymbolFactory().newSymbol("require",12, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-7)), ((java_cup.runtime.Symbol)CUP$Parser$stack.peek()), RESULT); } return CUP$Parser$result; @@ -977,7 +977,7 @@ class CUP$Parser$actions { pn.addChild("capab_ident").setLiteral(idcap); RESULT = pn; - CUP$Parser$result = parser.getSymbolFactory().newSymbol("capintlist",12, ((java_cup.runtime.Symbol)CUP$Parser$stack.peek()), ((java_cup.runtime.Symbol)CUP$Parser$stack.peek()), RESULT); + CUP$Parser$result = parser.getSymbolFactory().newSymbol("capintlist",13, ((java_cup.runtime.Symbol)CUP$Parser$stack.peek()), ((java_cup.runtime.Symbol)CUP$Parser$stack.peek()), RESULT); } return CUP$Parser$result; @@ -995,7 +995,7 @@ class CUP$Parser$actions { cil.addChild("capab_ident").setLiteral(idcap); RESULT = cil; - CUP$Parser$result = parser.getSymbolFactory().newSymbol("capintlist",12, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-2)), ((java_cup.runtime.Symbol)CUP$Parser$stack.peek()), RESULT); + CUP$Parser$result = parser.getSymbolFactory().newSymbol("capintlist",13, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-2)), ((java_cup.runtime.Symbol)CUP$Parser$stack.peek()), RESULT); } return CUP$Parser$result; @@ -1007,7 +1007,7 @@ class CUP$Parser$actions { ParseNode pn = new ParseNode("capab_ident_list"); RESULT = pn; - CUP$Parser$result = parser.getSymbolFactory().newSymbol("capintlist",12, ((java_cup.runtime.Symbol)CUP$Parser$stack.peek()), RESULT); + CUP$Parser$result = parser.getSymbolFactory().newSymbol("capintlist",13, ((java_cup.runtime.Symbol)CUP$Parser$stack.peek()), RESULT); } return CUP$Parser$result; diff --git a/others/javacup/iotparser.cup b/others/javacup/iotparser.cup index c6c9f6d..36dcb7a 100644 --- a/others/javacup/iotparser.cup +++ b/others/javacup/iotparser.cup @@ -30,7 +30,7 @@ terminal TYPE; terminal IDENT, STRINGCONST; non terminal ParseNode policy; -non terminal ParseNode intface, methlist, meth, paramlist, param; +non terminal ParseNode intface, methlist, meth, paramlist, param, paramtype; non terminal ParseNode capablist, capab, capabcont, cont; non terminal ParseNode reqlist, require, capintlist; diff --git a/others/jflex/iotparser.jflex b/others/jflex/iotparser.jflex index 239c81d..8ad50b3 100644 --- a/others/jflex/iotparser.jflex +++ b/others/jflex/iotparser.jflex @@ -52,7 +52,7 @@ import java_cup.runtime.ComplexSymbolFactory.Location; %eofval} -Ident = [a-zA-Z$_] [a-zA-Z0-9$_]* +Ident = [a-zA-Z$_] [a-zA-Z0-9$_\[\]]* new_line = \r|\n|\r\n;