removed ADT for cartridge languages

git-svn-id: https://projects.brucker.ch/su4sml/svn/infsec-import/trunk/src/su4sml@6197 3260e6d1-4efc-4170-b0a7-36055960796d
This commit is contained in:
Jürgen Doser 2007-02-23 12:51:22 +00:00
parent ddfe7c84cd
commit e6097c3056
5 changed files with 98 additions and 96 deletions

View File

@ -21,5 +21,5 @@ repsecure_parser:
ml-build src/su4sml.cm Rep_SecureUML_ComponentUML.test src/repsecure_parser
codegen:
ml-build src/codegen/codegen.cm Codegen.main src/codegen
ml-build src/codegen/codegen.cm Codegen.main codegen

6
STATUS
View File

@ -70,8 +70,8 @@ Package | xmi_* does not distinguish between models, packages,
ModelElement | Status
--------------------------+---------------------------------------------------
Transition |
Event | no support for TimeEvent and ChangeEvent
(SignalEven, CallEvent) |
Event | currently only support for CallEvent.
(SignalEvent, CallEvent)|
Guard | the guard's expression is just a string
PseudoStateVars |
StateVertex | no support for StubState's
@ -154,7 +154,7 @@ AttributeCallExp | ok
OperationCallExp | ok
OperationWithTypeCallExp | ok
LetExp: | ok
IteratorExp | ok
IteratorExp | ok
IterateExp | ok
PrimitiveLiteralExp | ok (called "LiteralExp" in current code)
CollectionLiteralExp | only support for empty collections,

View File

@ -58,94 +58,97 @@ structure SecureMova_Gcg = GCG_Core (ComponentUML_Cartridge(Base_Cartridge))
structure JavaSecure_Gcg = GCG_Core (Java_Cartridge(SecureUML_Cartridge(Base_Cartridge)));
*)
datatype language = base | cSharp | cSharpSecure | dotNet | dotNetSecure
| cSharpSM | java | junit | javaocl | securemova
(* FIXME: instead of the next two functions, one could put the *)
(* information into the cartridge_list. That way, one would have *)
(* to change 2 places less when adding a new cartridge. *)
val parse_language =
fn "base" => base
| "c#" => cSharp
| "c#_secure" => cSharpSecure
| "c#_net1" => dotNet
| "c#_secure_net1" => dotNetSecure
| "c#sm" => cSharpSM
| "java" => java
| "junit" => junit
| "javaocl" => javaocl
| "securemova" => securemova
val language_name =
fn base => "base"
| cSharp => "c#"
| cSharpSecure => "c#_secure"
| dotNet => "c#_net1"
| dotNetSecure => "c#_secure_net1"
| cSharpSM => "c#sm"
| java => "java"
| junit => "junit"
| javaocl => "javaocl"
| securemova => "securemova"
(* maybe this should also hav a "description" field? *)
type cartridge = {name : language,
generator: Rep.Model -> string -> unit,
parser : string -> Rep.Model,
template : string}
type cartridge = {lang : string, (* identifier (for input) *)
name : string, (* short description (for output) *)
description : string, (* long description *)
recommended : bool, (* presented to the end-user? *)
generator : Rep.Model -> string -> unit,
parser : string -> Rep.Model,
template : string}
(* maybe these should be declared by the individual cartridges and simply concatenated here? *)
val cartridge_list = [ {name = base,
generator = Base_Gcg.generate,
parser = RepParser.readFile,
template = "base.tpl"},
{name = cSharp,
generator = CSharp_Gcg.generate,
parser = RepParser.readFile,
template = "C#.tpl"},
{name = cSharpSecure,
generator = CSharpSecure_Gcg.generate,
parser = RepParser.readFile,
template = "C#_SecureUML.tpl"},
{name = dotNet,
generator = CSharp_NET1_Gcg.generate,
parser = RepParser.readFile,
template = "C#.pl"},
{name = dotNetSecure,
generator = CSharpSecure_NET1_Gcg.generate,
parser = RepParser.readFile,
template = "C#_SecureUML.tpl"},
{name = cSharpSM,
generator = CSharpSM_Gcg.generate,
parser = RepParser.readFile,
template = "C#_SM.tpl"},
{name = java,
generator = Java_Gcg.generate,
parser = RepParser.readFile,
template = "java.tpl"},
{name = junit,
generator = Junit_Gcg.generate,
parser = RepParser.readFile,
template = "junit.tpl"},
{name = javaocl,
generator = Java_Ocl_Gcg.generate,
parser = RepParser.readFile,
template = "java_ocl.tpl"},
{name = securemova,
generator = SecureMova_Gcg.generate,
parser = RepParser.transformXMI o XmiParser.readFile,
template = "securemova.tpl"}]
(* FIXME: add long descriptions *)
val cartridge_list = [ {lang = "base",
name = "Base Cartridge",
description = "",
recommended = false,
generator = Base_Gcg.generate,
parser = RepParser.readFile,
template = "base.tpl"},
{lang = "c#",
name = "C# Cartridge",
description = "",
recommended = true,
generator = CSharp_Gcg.generate,
parser = RepParser.readFile,
template = "C#.tpl"},
{lang = "c#_secure",
name = "C# SecureUML Cartridge",
description = "",
recommended = true,
generator = CSharpSecure_Gcg.generate,
parser = RepParser.readFile,
template = "C#_SecureUML.tpl"},
{lang = "c#_net1",
name = "C# .NET1 Cartridge",
description = "",
recommended = true,
generator = CSharp_NET1_Gcg.generate,
parser = RepParser.readFile,
template = "C#.pl"},
{lang = "c#_net1_secure",
name = "C# .NET1 SecureUML Cartridge",
description = "",
recommended = true,
generator = CSharpSecure_NET1_Gcg.generate,
parser = RepParser.readFile,
template = "C#_SecureUML.tpl"},
{lang = "c#_sm",
name = "C# StateMachine Cartridge",
description = "",
recommended = true,
generator = CSharpSM_Gcg.generate,
parser = RepParser.readFile,
template = "C#_SM.tpl"},
{lang = "java",
name = "Java Cartridge",
description = "",
recommended = true,
generator = Java_Gcg.generate,
parser = RepParser.readFile,
template = "java.tpl"},
{lang = "junit",
name = "Junit Cartridge",
description = "",
recommended = true,
generator = Junit_Gcg.generate,
parser = RepParser.readFile,
template = "junit.tpl"},
{lang = "java_ocl",
name = "Java OCL Cartridge",
description = "",
recommended = true,
generator = Java_Ocl_Gcg.generate,
parser = RepParser.readFile,
template = "java_ocl.tpl"},
{lang = "securemova",
name = "SecureMOVA Cartridge",
description = "",
recommended = false,
generator = SecureMova_Gcg.generate,
parser = RepParser.transformXMI o XmiParser.readFile,
template = "securemova.tpl"}]:cartridge list
val supported_languages = map (language_name o #name) cartridge_list
val string_of_languages = String.concatWith " | " supported_languages
val supported_languages = map #lang cartridge_list
val recommended_languages = map #lang (List.filter #recommended cartridge_list)
val string_of_languages = String.concatWith " | " recommended_languages
fun is_supported lang = ListEq.includes supported_languages lang
fun cartridge_of lang = Option.valOf (List.find (fn c => #name c = lang) cartridge_list)
fun cartridge_of lang = Option.valOf (List.find (fn c => #lang c = lang) cartridge_list)
fun generateFromModel model lang =
@ -162,8 +165,8 @@ fun generate xmi_file lang = generateFromModel ((#parser (cartridge_of lang)) xm
fun print_usage () = print ("usage: codegen <xmi_file> <language>\n"^
"\tlanguage = "^string_of_languages ^"\n")
fun main (_,[xmi_file,lang]) = ((if is_supported lang
then generate xmi_file (parse_language lang)
fun main (_,[xmi_file,lang]) = ((if is_supported lang
then generate xmi_file lang
else print_usage ());
OS.Process.success)
(* | main (_,[xmi_file,lang,template]) = (generate_with_template ; OS.Process.success) *)

View File

@ -34,14 +34,14 @@ open Rep_SecureUML_ComponentUML
(** capitalize the string s.
* Returns the given string with the first letter changed to upper case
* Should be moved to a helper library?
* Should be moved to a helper library? (StringHandling.sml)
*)
fun capitalize s = let val slist = String.explode s
in
String.implode (Char.toUpper (List.hd slist)::List.tl slist)
end
(* can this be expressed more combinatorially? *)
fun deep_atpre (t as Literal _) = t
| deep_atpre (t as CollectionLiteral _) = t
| deep_atpre (t as If (cond,cond_type,then_term,then_type,

View File

@ -42,15 +42,14 @@ fun readFile filename =
(* how to do the following in a clean/portable way? *)
fun read_dtd dtd =
(OS.FileSys.chDir (su4sml_home());
(* dummy check to see if the file exists...*)
OS.FileSys.fileSize "UML15OCL.xmi" ;
(Parser.parseDocument
(SOME (Uri.String2Uri ("file:UML15OCL.xmi")))
(SOME dtd) (dtd,nil,nil)
handle ex => (error_msg ("Error while reading file UML15OCL.xmi: "^
General.exnMessage ex);
raise ex));
OS.FileSys.chDir currentDir )
(* check to see if the DTD file exists. *)
if OS.FileSys.access ("UML15OCL.xmi",[]) then
(Parser.parseDocument
(SOME (Uri.String2Uri ("file:UML15OCL.xmi")))
(SOME dtd) (dtd,nil,nil))
else error ("Error while reading file UML15OCL.xmi: "^
"no such file or directory");
OS.FileSys.chDir currentDir)
fun read_file dtd filename =
if filename = "-"