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 ml-build src/su4sml.cm Rep_SecureUML_ComponentUML.test src/repsecure_parser
codegen: 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 ModelElement | Status
--------------------------+--------------------------------------------------- --------------------------+---------------------------------------------------
Transition | Transition |
Event | no support for TimeEvent and ChangeEvent Event | currently only support for CallEvent.
(SignalEven, CallEvent) | (SignalEvent, CallEvent)|
Guard | the guard's expression is just a string Guard | the guard's expression is just a string
PseudoStateVars | PseudoStateVars |
StateVertex | no support for StubState's StateVertex | no support for StubState's
@ -154,7 +154,7 @@ AttributeCallExp | ok
OperationCallExp | ok OperationCallExp | ok
OperationWithTypeCallExp | ok OperationWithTypeCallExp | ok
LetExp: | ok LetExp: | ok
IteratorExp | ok IteratorExp | ok
IterateExp | ok IterateExp | ok
PrimitiveLiteralExp | ok (called "LiteralExp" in current code) PrimitiveLiteralExp | ok (called "LiteralExp" in current code)
CollectionLiteralExp | only support for empty collections, 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))); 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? *) (* maybe this should also hav a "description" field? *)
type cartridge = {name : language, type cartridge = {lang : string, (* identifier (for input) *)
generator: Rep.Model -> string -> unit, name : string, (* short description (for output) *)
parser : string -> Rep.Model, description : string, (* long description *)
template : string} 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? *) (* maybe these should be declared by the individual cartridges and simply concatenated here? *)
val cartridge_list = [ {name = base, (* FIXME: add long descriptions *)
generator = Base_Gcg.generate, val cartridge_list = [ {lang = "base",
parser = RepParser.readFile, name = "Base Cartridge",
template = "base.tpl"}, description = "",
{name = cSharp, recommended = false,
generator = CSharp_Gcg.generate, generator = Base_Gcg.generate,
parser = RepParser.readFile, parser = RepParser.readFile,
template = "C#.tpl"}, template = "base.tpl"},
{name = cSharpSecure, {lang = "c#",
generator = CSharpSecure_Gcg.generate, name = "C# Cartridge",
parser = RepParser.readFile, description = "",
template = "C#_SecureUML.tpl"}, recommended = true,
{name = dotNet, generator = CSharp_Gcg.generate,
generator = CSharp_NET1_Gcg.generate, parser = RepParser.readFile,
parser = RepParser.readFile, template = "C#.tpl"},
template = "C#.pl"}, {lang = "c#_secure",
{name = dotNetSecure, name = "C# SecureUML Cartridge",
generator = CSharpSecure_NET1_Gcg.generate, description = "",
parser = RepParser.readFile, recommended = true,
template = "C#_SecureUML.tpl"}, generator = CSharpSecure_Gcg.generate,
{name = cSharpSM, parser = RepParser.readFile,
generator = CSharpSM_Gcg.generate, template = "C#_SecureUML.tpl"},
parser = RepParser.readFile, {lang = "c#_net1",
template = "C#_SM.tpl"}, name = "C# .NET1 Cartridge",
{name = java, description = "",
generator = Java_Gcg.generate, recommended = true,
parser = RepParser.readFile, generator = CSharp_NET1_Gcg.generate,
template = "java.tpl"}, parser = RepParser.readFile,
{name = junit, template = "C#.pl"},
generator = Junit_Gcg.generate, {lang = "c#_net1_secure",
parser = RepParser.readFile, name = "C# .NET1 SecureUML Cartridge",
template = "junit.tpl"}, description = "",
{name = javaocl, recommended = true,
generator = Java_Ocl_Gcg.generate, generator = CSharpSecure_NET1_Gcg.generate,
parser = RepParser.readFile, parser = RepParser.readFile,
template = "java_ocl.tpl"}, template = "C#_SecureUML.tpl"},
{name = securemova, {lang = "c#_sm",
generator = SecureMova_Gcg.generate, name = "C# StateMachine Cartridge",
parser = RepParser.transformXMI o XmiParser.readFile, description = "",
template = "securemova.tpl"}] 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 supported_languages = map #lang cartridge_list
val recommended_languages = map #lang (List.filter #recommended cartridge_list)
val string_of_languages = String.concatWith " | " supported_languages val string_of_languages = String.concatWith " | " recommended_languages
fun is_supported lang = ListEq.includes supported_languages lang 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 = 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"^ fun print_usage () = print ("usage: codegen <xmi_file> <language>\n"^
"\tlanguage = "^string_of_languages ^"\n") "\tlanguage = "^string_of_languages ^"\n")
fun main (_,[xmi_file,lang]) = ((if is_supported lang fun main (_,[xmi_file,lang]) = ((if is_supported lang
then generate xmi_file (parse_language lang) then generate xmi_file lang
else print_usage ()); else print_usage ());
OS.Process.success) OS.Process.success)
(* | main (_,[xmi_file,lang,template]) = (generate_with_template ; 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. (** capitalize the string s.
* Returns the given string with the first letter changed to upper case * 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 fun capitalize s = let val slist = String.explode s
in in
String.implode (Char.toUpper (List.hd slist)::List.tl slist) String.implode (Char.toUpper (List.hd slist)::List.tl slist)
end end
(* can this be expressed more combinatorially? *)
fun deep_atpre (t as Literal _) = t fun deep_atpre (t as Literal _) = t
| deep_atpre (t as CollectionLiteral _) = t | deep_atpre (t as CollectionLiteral _) = t
| deep_atpre (t as If (cond,cond_type,then_term,then_type, | 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? *) (* how to do the following in a clean/portable way? *)
fun read_dtd dtd = fun read_dtd dtd =
(OS.FileSys.chDir (su4sml_home()); (OS.FileSys.chDir (su4sml_home());
(* dummy check to see if the file exists...*) (* check to see if the DTD file exists. *)
OS.FileSys.fileSize "UML15OCL.xmi" ; if OS.FileSys.access ("UML15OCL.xmi",[]) then
(Parser.parseDocument (Parser.parseDocument
(SOME (Uri.String2Uri ("file:UML15OCL.xmi"))) (SOME (Uri.String2Uri ("file:UML15OCL.xmi")))
(SOME dtd) (dtd,nil,nil) (SOME dtd) (dtd,nil,nil))
handle ex => (error_msg ("Error while reading file UML15OCL.xmi: "^ else error ("Error while reading file UML15OCL.xmi: "^
General.exnMessage ex); "no such file or directory");
raise ex)); OS.FileSys.chDir currentDir)
OS.FileSys.chDir currentDir )
fun read_file dtd filename = fun read_file dtd filename =
if filename = "-" if filename = "-"