encoding
Allan CORNET [Wed, 6 Jan 2010 11:07:35 +0000 (12:07 +0100)]
scilab/modules/scicos/src/xml2modelica/linenum.ml
scilab/modules/scicos/src/xml2modelica/modelicaCodeGenerator.ml
scilab/modules/scicos/src/xml2modelica/stringLexer.ml
scilab/modules/scicos/src/xml2modelica/stringParser.ml
scilab/modules/scicos/src/xml2modelica/xML2Modelica.ml
scilab/modules/scicos/src/xml2modelica/xMLLexer.ml
scilab/modules/scicos/src/xml2modelica/xMLParser.ml
scilab/modules/scicos/src/xml2modelica/xMLTree.ml

index bdd1e65..4cb385d 100644 (file)
-# 23 "linenum.mll"\r
\r
-\r
-let linenum = ref 0\r
-let linebeg = ref 0\r
-\r
-\r
-# 9 "linenum.ml"\r
-let __ocaml_lex_tables = {\r
-  Lexing.lex_base = \r
-   "\000\000\254\255\001\000\255\255";\r
-  Lexing.lex_backtrk = \r
-   "\255\255\255\255\000\000\255\255";\r
-  Lexing.lex_default = \r
-   "\000\000\000\000\255\255\000\000";\r
-  Lexing.lex_trans = \r
-   "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\\r
-    \000\000\000\000\003\000\003\000\000\000\002\000\000\000\000\000\\r
-    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\\r
-    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\\r
-    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\\r
-    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\\r
-    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\\r
-    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\\r
-    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\\r
-    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\\r
-    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\\r
-    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\\r
-    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\\r
-    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\\r
-    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\\r
-    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\\r
-    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\\r
-    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\\r
-    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\\r
-    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\\r
-    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\\r
-    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\\r
-    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\\r
-    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\\r
-    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\\r
-    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\\r
-    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\\r
-    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\\r
-    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\\r
-    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\\r
-    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\\r
-    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\\r
-    \001\000\000\000";\r
-  Lexing.lex_check = \r
-   "\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\\r
-    \255\255\255\255\000\000\002\000\255\255\000\000\255\255\255\255\\r
-    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\\r
-    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\\r
-    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\\r
-    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\\r
-    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\\r
-    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\\r
-    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\\r
-    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\\r
-    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\\r
-    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\\r
-    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\\r
-    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\\r
-    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\\r
-    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\\r
-    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\\r
-    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\\r
-    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\\r
-    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\\r
-    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\\r
-    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\\r
-    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\\r
-    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\\r
-    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\\r
-    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\\r
-    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\\r
-    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\\r
-    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\\r
-    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\\r
-    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\\r
-    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\\r
-    \000\000\255\255";\r
-  Lexing.lex_base_code = \r
-   "";\r
-  Lexing.lex_backtrk_code = \r
-   "";\r
-  Lexing.lex_default_code = \r
-   "";\r
-  Lexing.lex_trans_code = \r
-   "";\r
-  Lexing.lex_check_code = \r
-   "";\r
-  Lexing.lex_code = \r
-   "";\r
-}\r
-\r
-let rec skip_line lexbuf =\r
-    __ocaml_lex_skip_line_rec lexbuf 0\r
-and __ocaml_lex_skip_line_rec lexbuf __ocaml_lex_state =\r
-  match Lexing.engine __ocaml_lex_tables __ocaml_lex_state lexbuf with\r
-      | 0 ->\r
-# 32 "linenum.mll"\r
-      ( incr linenum;\r
-        linebeg := Lexing.lexeme_start lexbuf;\r
-        Lexing.lexeme_end lexbuf )\r
-# 108 "linenum.ml"\r
-\r
-  | 1 ->\r
-# 36 "linenum.mll"\r
-      ( incr linenum;\r
-        linebeg := Lexing.lexeme_start lexbuf;\r
-        raise End_of_file )\r
-# 115 "linenum.ml"\r
-\r
-  | __ocaml_lex_state -> lexbuf.Lexing.refill_buff lexbuf; __ocaml_lex_skip_line_rec lexbuf __ocaml_lex_state\r
-\r
-;;\r
-\r
-# 40 "linenum.mll"\r
\r
-\r
-let for_position file loc =\r
-  let ic = open_in_bin file in\r
-  let lb = Lexing.from_channel ic in\r
-  linenum := 1;\r
-  linebeg := 0;\r
-  begin try\r
-    while skip_line lb <= loc do () done\r
-  with End_of_file -> ()\r
-  end;\r
-  close_in ic;\r
-  (!linenum - 1, !linebeg)\r
-\r
-\r
-# 137 "linenum.ml"\r
+# 23 "linenum.mll"
+
+let linenum = ref 0
+let linebeg = ref 0
+
+
+# 9 "linenum.ml"
+let __ocaml_lex_tables = {
+  Lexing.lex_base = 
+   "\000\000\254\255\001\000\255\255";
+  Lexing.lex_backtrk = 
+   "\255\255\255\255\000\000\255\255";
+  Lexing.lex_default = 
+   "\000\000\000\000\255\255\000\000";
+  Lexing.lex_trans = 
+   "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
+    \000\000\000\000\003\000\003\000\000\000\002\000\000\000\000\000\
+    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
+    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
+    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
+    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
+    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
+    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
+    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
+    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
+    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
+    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
+    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
+    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
+    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
+    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
+    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
+    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
+    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
+    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
+    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
+    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
+    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
+    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
+    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
+    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
+    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
+    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
+    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
+    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
+    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
+    \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\
+    \001\000\000\000";
+  Lexing.lex_check = 
+   "\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
+    \255\255\255\255\000\000\002\000\255\255\000\000\255\255\255\255\
+    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
+    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
+    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
+    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
+    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
+    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
+    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
+    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
+    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
+    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
+    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
+    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
+    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
+    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
+    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
+    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
+    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
+    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
+    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
+    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
+    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
+    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
+    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
+    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
+    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
+    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
+    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
+    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
+    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
+    \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\
+    \000\000\255\255";
+  Lexing.lex_base_code = 
+   "";
+  Lexing.lex_backtrk_code = 
+   "";
+  Lexing.lex_default_code = 
+   "";
+  Lexing.lex_trans_code = 
+   "";
+  Lexing.lex_check_code = 
+   "";
+  Lexing.lex_code = 
+   "";
+}
+
+let rec skip_line lexbuf =
+    __ocaml_lex_skip_line_rec lexbuf 0
+and __ocaml_lex_skip_line_rec lexbuf __ocaml_lex_state =
+  match Lexing.engine __ocaml_lex_tables __ocaml_lex_state lexbuf with
+      | 0 ->
+# 32 "linenum.mll"
+      ( incr linenum;
+        linebeg := Lexing.lexeme_start lexbuf;
+        Lexing.lexeme_end lexbuf )
+# 108 "linenum.ml"
+
+  | 1 ->
+# 36 "linenum.mll"
+      ( incr linenum;
+        linebeg := Lexing.lexeme_start lexbuf;
+        raise End_of_file )
+# 115 "linenum.ml"
+
+  | __ocaml_lex_state -> lexbuf.Lexing.refill_buff lexbuf; __ocaml_lex_skip_line_rec lexbuf __ocaml_lex_state
+
+;;
+
+# 40 "linenum.mll"
+
+let for_position file loc =
+  let ic = open_in_bin file in
+  let lb = Lexing.from_channel ic in
+  linenum := 1;
+  linebeg := 0;
+  begin try
+    while skip_line lb <= loc do () done
+  with End_of_file -> ()
+  end;
+  close_in ic;
+  (!linenum - 1, !linebeg)
+
+
+# 137 "linenum.ml"
index 8e1e3c1..fef2e2c 100644 (file)
-(*\r
- *  XML to Modelica\r
- *\r
- *  Copyright (C) 2005 - 2007 Imagine S.A.\r
- *  For more information or commercial use please contact us at www.amesim.com\r
- *\r
- *  This program is free software; you can redistribute it and/or\r
- *  modify it under the terms of the GNU General Public License\r
- *  as published by the Free Software Foundation; either version 2\r
- *  of the License, or (at your option) any later version.\r
- *\r
- *  This program is distributed in the hope that it will be useful,\r
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of\r
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
- *  GNU General Public License for more details.\r
- *\r
- *  You should have received a copy of the GNU General Public License\r
- *  along with this program; if not, write to the Free Software\r
- *  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.\r
- *\r
- *)\r
-\r
-open XMLTree\r
-\r
-let start_equations = ref []\r
-\r
-(* Decode XML special characters *)\r
-let decode_spc s =\r
-  let token_fun = StringLexer.token\r
-  and lexbuf = Lexing.from_string s in\r
-  StringParser.parse token_fun lexbuf\r
-\r
-let generate_attributes oc attribs =\r
-  let rec modified_attributes attribs = match attribs with\r
-    | [] -> []\r
-    | (attrib, value) :: attribs when value = "" ->\r
-        modified_attributes attribs\r
-    | (attrib, value) :: attribs ->\r
-        (attrib, value) :: (modified_attributes attribs) in\r
-  let rec generate_attributes' attribs = match attribs with\r
-    | [] -> ()\r
-    | [ (attrib, value) ] ->\r
-        Printf.fprintf oc "%s = %s" attrib value\r
-    | (attrib, value) :: attribs ->\r
-        Printf.fprintf oc "%s = %s, " attrib value;\r
-        generate_attributes' attribs in\r
-  match modified_attributes attribs with\r
-  | [] -> ()\r
-  | attribs ->\r
-      Printf.fprintf oc "(";\r
-      generate_attributes' attribs;\r
-      Printf.fprintf oc ")"\r
-\r
-let generate_code init filename model =\r
-  let generate_type_specifier oc t = match t.kind, t.output with\r
-    | Input, _ -> Printf.fprintf oc "  input Real"\r
-    | (FixedParameter | Parameter), _ -> Printf.fprintf oc "  parameter Real"\r
-    | Variable, true -> Printf.fprintf oc "  output Real"\r
-    | DiscreteVariable, _ when init -> Printf.fprintf oc "  Real"\r
-    | DiscreteVariable, _ -> Printf.fprintf oc "  discrete Real"\r
-    | _ -> Printf.fprintf oc "  Real"\r
-  and generate_identifier oc t =\r
-    Printf.fprintf oc " `%s`" (decode_spc t.id)\r
-  and generate_comment oc t =\r
-    Printf.fprintf oc " \"%s\";\n" (decode_spc t.comment) in\r
-  let generate_start_attribute oc t = match t.kind with\r
-    | _ when t.initial_value = "" -> ()\r
-    | Variable | DiscreteVariable when t.fixed <> "true"  ->\r
-        generate_attributes oc [ "start", t.initial_value ]\r
-    | Variable | DiscreteVariable ->\r
-        let equ =\r
-          Printf.sprintf "`%s` = %s;" (decode_spc t.id) t.initial_value in\r
-        start_equations := equ :: !start_equations\r
-    | FixedParameter | Parameter when t.fixed <> "false"  ->\r
-        let equ =\r
-          Printf.sprintf "`%s` = %s;" (decode_spc t.id) t.initial_value in\r
-        start_equations := equ :: !start_equations\r
-    | FixedParameter | Parameter ->\r
-        Printf.fprintf oc " = %s" t.initial_value\r
-    | Input -> () in\r
-  let rec generate_sub_elements oc = function\r
-    | [] -> ()\r
-    | Struct s :: elts ->\r
-        generate_sub_elements oc s.subnodes;\r
-        generate_sub_elements oc elts\r
-    | Terminal t :: elts ->\r
-        generate_terminal oc t;\r
-        generate_sub_elements oc elts\r
-  and generate_terminal oc t =\r
-    generate_type_specifier oc t;\r
-    generate_identifier oc t;\r
-    generate_start_attribute oc t;\r
-    generate_comment oc t\r
-  and generate_sub_equations oc = function\r
-    | [] -> ()\r
-    | equ :: equs ->\r
-        Printf.fprintf oc "  %s\n" (decode_spc equ);\r
-        generate_sub_equations oc equs in\r
-  let oc = open_out filename in\r
-  start_equations := [];\r
-  Printf.fprintf oc\r
-    "class %s\n" (Filename.chop_suffix (Filename.basename filename) ".mo");\r
-  generate_sub_elements oc model.elements;\r
-  Printf.fprintf oc "equation\n";\r
-  generate_sub_equations oc\r
-    (!start_equations @ model.equations @ model.when_clauses);\r
-  Printf.fprintf oc\r
-    "end %s;\n" (Filename.chop_suffix (Filename.basename filename) ".mo");\r
-  close_out oc\r
-\r
+(*
+ *  XML to Modelica
+ *
+ *  Copyright (C) 2005 - 2007 Imagine S.A.
+ *  For more information or commercial use please contact us at www.amesim.com
+ *
+ *  This program is free software; you can redistribute it and/or
+ *  modify it under the terms of the GNU General Public License
+ *  as published by the Free Software Foundation; either version 2
+ *  of the License, or (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+ *
+ *)
+
+open XMLTree
+
+let start_equations = ref []
+
+(* Decode XML special characters *)
+let decode_spc s =
+  let token_fun = StringLexer.token
+  and lexbuf = Lexing.from_string s in
+  StringParser.parse token_fun lexbuf
+
+let generate_attributes oc attribs =
+  let rec modified_attributes attribs = match attribs with
+    | [] -> []
+    | (attrib, value) :: attribs when value = "" ->
+        modified_attributes attribs
+    | (attrib, value) :: attribs ->
+        (attrib, value) :: (modified_attributes attribs) in
+  let rec generate_attributes' attribs = match attribs with
+    | [] -> ()
+    | [ (attrib, value) ] ->
+        Printf.fprintf oc "%s = %s" attrib value
+    | (attrib, value) :: attribs ->
+        Printf.fprintf oc "%s = %s, " attrib value;
+        generate_attributes' attribs in
+  match modified_attributes attribs with
+  | [] -> ()
+  | attribs ->
+      Printf.fprintf oc "(";
+      generate_attributes' attribs;
+      Printf.fprintf oc ")"
+
+let generate_code init filename model =
+  let generate_type_specifier oc t = match t.kind, t.output with
+    | Input, _ -> Printf.fprintf oc "  input Real"
+    | (FixedParameter | Parameter), _ -> Printf.fprintf oc "  parameter Real"
+    | Variable, true -> Printf.fprintf oc "  output Real"
+    | DiscreteVariable, _ when init -> Printf.fprintf oc "  Real"
+    | DiscreteVariable, _ -> Printf.fprintf oc "  discrete Real"
+    | _ -> Printf.fprintf oc "  Real"
+  and generate_identifier oc t =
+    Printf.fprintf oc " `%s`" (decode_spc t.id)
+  and generate_comment oc t =
+    Printf.fprintf oc " \"%s\";\n" (decode_spc t.comment) in
+  let generate_start_attribute oc t = match t.kind with
+    | _ when t.initial_value = "" -> ()
+    | Variable | DiscreteVariable when t.fixed <> "true"  ->
+        generate_attributes oc [ "start", t.initial_value ]
+    | Variable | DiscreteVariable ->
+        let equ =
+          Printf.sprintf "`%s` = %s;" (decode_spc t.id) t.initial_value in
+        start_equations := equ :: !start_equations
+    | FixedParameter | Parameter when t.fixed <> "false"  ->
+        let equ =
+          Printf.sprintf "`%s` = %s;" (decode_spc t.id) t.initial_value in
+        start_equations := equ :: !start_equations
+    | FixedParameter | Parameter ->
+        Printf.fprintf oc " = %s" t.initial_value
+    | Input -> () in
+  let rec generate_sub_elements oc = function
+    | [] -> ()
+    | Struct s :: elts ->
+        generate_sub_elements oc s.subnodes;
+        generate_sub_elements oc elts
+    | Terminal t :: elts ->
+        generate_terminal oc t;
+        generate_sub_elements oc elts
+  and generate_terminal oc t =
+    generate_type_specifier oc t;
+    generate_identifier oc t;
+    generate_start_attribute oc t;
+    generate_comment oc t
+  and generate_sub_equations oc = function
+    | [] -> ()
+    | equ :: equs ->
+        Printf.fprintf oc "  %s\n" (decode_spc equ);
+        generate_sub_equations oc equs in
+  let oc = open_out filename in
+  start_equations := [];
+  Printf.fprintf oc
+    "class %s\n" (Filename.chop_suffix (Filename.basename filename) ".mo");
+  generate_sub_elements oc model.elements;
+  Printf.fprintf oc "equation\n";
+  generate_sub_equations oc
+    (!start_equations @ model.equations @ model.when_clauses);
+  Printf.fprintf oc
+    "end %s;\n" (Filename.chop_suffix (Filename.basename filename) ".mo");
+  close_out oc
+
index f8136bf..bae3a22 100644 (file)
Binary files a/scilab/modules/scicos/src/xml2modelica/stringLexer.ml and b/scilab/modules/scicos/src/xml2modelica/stringLexer.ml differ
index 5e2b6c2..d881fc7 100644 (file)
@@ -4,8 +4,8 @@ type token =
 
 open Parsing;;
 # 23 "stringParser.mly"
-\r
-\r
+
+
 # 10 "stringParser.ml"
 let yytransl_const = [|
     0 (* EOF *);
@@ -98,11 +98,11 @@ let parse_string (lexfun : Lexing.lexbuf -> token) (lexbuf : Lexing.lexbuf) =
    (Parsing.yyparse yytables 1 lexfun lexbuf : string)
 ;;
 # 43 "stringParser.mly"
-\r
-\r
-let parse token_fun lexbuf =\r
-  try\r
-    parse_string token_fun lexbuf\r
-  with\r
-    | _ -> assert false\r
+
+
+let parse token_fun lexbuf =
+  try
+    parse_string token_fun lexbuf
+  with
+    | _ -> assert false
 # 109 "stringParser.ml"
index 9fb042f..b38e6d5 100644 (file)
@@ -1,80 +1,80 @@
-(*\r
- *  XML to Modelica\r
- *\r
- *  Copyright (C) 2005 - 2007 Imagine S.A.\r
- *  For more information or commercial use please contact us at www.amesim.com\r
- *\r
- *  This program is free software; you can redistribute it and/or\r
- *  modify it under the terms of the GNU General Public License\r
- *  as published by the Free Software Foundation; either version 2\r
- *  of the License, or (at your option) any later version.\r
- *\r
- *  This program is distributed in the hope that it will be useful,\r
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of\r
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
- *  GNU General Public License for more details.\r
- *\r
- *  You should have received a copy of the GNU General Public License\r
- *  along with this program; if not, write to the Free Software\r
- *  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.\r
- *\r
- *)\r
-\r
-let sccs_id =\r
-  "@(#)XML2Modelica - Copyright (C) 2008 LMS Imagine"\r
-\r
-let version = "1.0"\r
-\r
-let output = ref ""\r
-\r
-let input = ref ""\r
-\r
-let init = ref false\r
-\r
-let check_filename () =\r
-  if Filename.check_suffix !input "xml" then ()\r
-  else failwith "check_filename: Filename suffix must be 'xml'"\r
-\r
-let check_output () =\r
-  if !output = "" then failwith "check_output: No output filename specified"\r
-\r
-let set_output s =\r
-  if !output <> "" then failwith "set_output: More than one output specified";\r
-  output := s\r
-\r
-let set_input s =\r
-  if !input <> "" then failwith "set_input: More than one input specified";\r
-  input := s\r
-\r
-let construct_output_filename () =\r
-  if !output = "" then begin\r
-    output := Filename.chop_suffix !input "mo"\r
-  end;\r
-  !output\r
-\r
-let parse_args () =\r
-  Arg.parse\r
-    [("-o", Arg.String set_output,\r
-      "<outputfile>  Set output file name to <outputfile>");\r
-     ("-init", Arg.Set init,\r
-      "Generate flat Modelica code for initialization")]\r
-    set_input\r
-    ("usage: XML2modelica -o <outputfile> <inputfile>")\r
-\r
-let run () =\r
-  parse_args ();\r
-  check_filename ();\r
-  check_output ();\r
-  let ic = open_in !input in\r
-  Printf.printf "Input file name = %s\n" !input; flush stdout;\r
-  let lexbuf = Lexing.from_channel ic in\r
-  Printf.printf "Parsing..."; flush stdout;\r
-  let model = XMLParser.parse !input XMLLexer.token lexbuf in\r
-  let filename = construct_output_filename () in\r
-  Printf.printf "OK\nGenerating code..."; flush stdout;\r
-  ModelicaCodeGenerator.generate_code !init filename model;\r
-  Printf.printf " OK\nOutput file name = %s\n" !output; flush stdout;\r
-  Printf.printf "Terminated.\n"; flush stdout;\r
-  close_in ic\r
-\r
-let () = run ()\r
+(*
+ *  XML to Modelica
+ *
+ *  Copyright (C) 2005 - 2007 Imagine S.A.
+ *  For more information or commercial use please contact us at www.amesim.com
+ *
+ *  This program is free software; you can redistribute it and/or
+ *  modify it under the terms of the GNU General Public License
+ *  as published by the Free Software Foundation; either version 2
+ *  of the License, or (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+ *
+ *)
+
+let sccs_id =
+  "@(#)XML2Modelica - Copyright (C) 2008 LMS Imagine"
+
+let version = "1.0"
+
+let output = ref ""
+
+let input = ref ""
+
+let init = ref false
+
+let check_filename () =
+  if Filename.check_suffix !input "xml" then ()
+  else failwith "check_filename: Filename suffix must be 'xml'"
+
+let check_output () =
+  if !output = "" then failwith "check_output: No output filename specified"
+
+let set_output s =
+  if !output <> "" then failwith "set_output: More than one output specified";
+  output := s
+
+let set_input s =
+  if !input <> "" then failwith "set_input: More than one input specified";
+  input := s
+
+let construct_output_filename () =
+  if !output = "" then begin
+    output := Filename.chop_suffix !input "mo"
+  end;
+  !output
+
+let parse_args () =
+  Arg.parse
+    [("-o", Arg.String set_output,
+      "<outputfile>  Set output file name to <outputfile>");
+     ("-init", Arg.Set init,
+      "Generate flat Modelica code for initialization")]
+    set_input
+    ("usage: XML2modelica -o <outputfile> <inputfile>")
+
+let run () =
+  parse_args ();
+  check_filename ();
+  check_output ();
+  let ic = open_in !input in
+  Printf.printf "Input file name = %s\n" !input; flush stdout;
+  let lexbuf = Lexing.from_channel ic in
+  Printf.printf "Parsing..."; flush stdout;
+  let model = XMLParser.parse !input XMLLexer.token lexbuf in
+  let filename = construct_output_filename () in
+  Printf.printf "OK\nGenerating code..."; flush stdout;
+  ModelicaCodeGenerator.generate_code !init filename model;
+  Printf.printf " OK\nOutput file name = %s\n" !output; flush stdout;
+  Printf.printf "Terminated.\n"; flush stdout;
+  close_in ic
+
+let () = run ()
index 39780b5..744a465 100644 (file)
@@ -1,10 +1,10 @@
 # 23 "xMLLexer.mll"
\r
-\r
-open XMLParser\r
-\r
-exception Eof\r
-\r
+
+open XMLParser
+
+exception Eof
+
 
 # 10 "xMLLexer.ml"
 let __ocaml_lex_tables = {
@@ -480,25 +480,25 @@ and __ocaml_lex_token_rec lexbuf __ocaml_lex_state =
 
   | 2 ->
 # 56 "xMLLexer.mll"
-                ( let lxm = Lexing.lexeme lexbuf in\r
+                ( let lxm = Lexing.lexeme lexbuf in
                     UNSIGNED_INTEGER lxm )
 # 486 "xMLLexer.ml"
 
   | 3 ->
 # 60 "xMLLexer.mll"
-                ( let lxm = Lexing.lexeme lexbuf in\r
+                ( let lxm = Lexing.lexeme lexbuf in
                     UNSIGNED_NUMBER lxm )
 # 492 "xMLLexer.ml"
 
   | 4 ->
 # 64 "xMLLexer.mll"
-                ( let lxm = Lexing.lexeme lexbuf in\r
+                ( let lxm = Lexing.lexeme lexbuf in
                     IDENT lxm )
 # 498 "xMLLexer.ml"
 
   | 5 ->
 # 68 "xMLLexer.mll"
-                ( let lxm = Lexing.lexeme lexbuf in\r
+                ( let lxm = Lexing.lexeme lexbuf in
                     STRING (String.sub lxm 1 (String.length lxm - 2)) )
 # 504 "xMLLexer.ml"
 
@@ -690,9 +690,9 @@ and __ocaml_lex_element_terminal_comment_value_rec lexbuf __ocaml_lex_state =
   match Lexing.engine __ocaml_lex_tables __ocaml_lex_state lexbuf with
       | 0 ->
 # 113 "xMLLexer.mll"
-                ( let lxm = Lexing.lexeme lexbuf in\r
-                  let i = String.index lxm '\"'\r
-                  and j = String.rindex lxm '\"' in\r
+                ( let lxm = Lexing.lexeme lexbuf in
+                  let i = String.index lxm '\"'
+                  and j = String.rindex lxm '\"' in
                   ELEMENT_TERMINAL_COMMENT_VALUE_TAG (String.sub lxm (i + 1) (j - i - 1)) )
 # 698 "xMLLexer.ml"
 
@@ -714,9 +714,9 @@ and __ocaml_lex_element_terminal_initial_value_value_rec lexbuf __ocaml_lex_stat
   match Lexing.engine __ocaml_lex_tables __ocaml_lex_state lexbuf with
       | 0 ->
 # 124 "xMLLexer.mll"
-                ( let lxm = Lexing.lexeme lexbuf in\r
-                  let i = String.index lxm '\"'\r
-                  and j = String.rindex lxm '\"' in\r
+                ( let lxm = Lexing.lexeme lexbuf in
+                  let i = String.index lxm '\"'
+                  and j = String.rindex lxm '\"' in
                   ELEMENT_TERMINAL_INITIAL_VALUE_VALUE_TAG (String.sub lxm (i + 1) (j - i - 1)) )
 # 722 "xMLLexer.ml"
 
@@ -738,9 +738,9 @@ and __ocaml_lex_element_fixed_value_rec lexbuf __ocaml_lex_state =
   match Lexing.engine __ocaml_lex_tables __ocaml_lex_state lexbuf with
       | 0 ->
 # 135 "xMLLexer.mll"
-                ( let lxm = Lexing.lexeme lexbuf in\r
-                  let i = String.index lxm '\"'\r
-                  and j = String.rindex lxm '\"' in\r
+                ( let lxm = Lexing.lexeme lexbuf in
+                  let i = String.index lxm '\"'
+                  and j = String.rindex lxm '\"' in
                   ELEMENT_TERMINAL_FIXED_VALUE_TAG (String.sub lxm (i + 1) (j - i - 1)) )
 # 746 "xMLLexer.ml"
 
@@ -762,9 +762,9 @@ and __ocaml_lex_element_terminal_nominal_value_value_rec lexbuf __ocaml_lex_stat
   match Lexing.engine __ocaml_lex_tables __ocaml_lex_state lexbuf with
       | 0 ->
 # 146 "xMLLexer.mll"
-                ( let lxm = Lexing.lexeme lexbuf in\r
-                  let i = String.index lxm '\"'\r
-                  and j = String.rindex lxm '\"' in\r
+                ( let lxm = Lexing.lexeme lexbuf in
+                  let i = String.index lxm '\"'
+                  and j = String.rindex lxm '\"' in
                   ELEMENT_TERMINAL_NOMINAL_VALUE_VALUE_TAG (String.sub lxm (i + 1) (j - i - 1)) )
 # 770 "xMLLexer.ml"
 
@@ -786,9 +786,9 @@ and __ocaml_lex_equation_value_rec lexbuf __ocaml_lex_state =
   match Lexing.engine __ocaml_lex_tables __ocaml_lex_state lexbuf with
       | 0 ->
 # 157 "xMLLexer.mll"
-                ( let lxm = Lexing.lexeme lexbuf in\r
-                  let i = String.index lxm '\"'\r
-                  and j = String.rindex lxm '\"' in\r
+                ( let lxm = Lexing.lexeme lexbuf in
+                  let i = String.index lxm '\"'
+                  and j = String.rindex lxm '\"' in
                   EQUATION_VALUE_TAG (String.sub lxm (i + 1) (j - i - 1)) )
 # 794 "xMLLexer.ml"
 
@@ -810,9 +810,9 @@ and __ocaml_lex_when_clause_value_rec lexbuf __ocaml_lex_state =
   match Lexing.engine __ocaml_lex_tables __ocaml_lex_state lexbuf with
       | 0 ->
 # 168 "xMLLexer.mll"
-                ( let lxm = Lexing.lexeme lexbuf in\r
-                  let i = String.index lxm '\"'\r
-                  and j = String.rindex lxm '\"' in\r
+                ( let lxm = Lexing.lexeme lexbuf in
+                  let i = String.index lxm '\"'
+                  and j = String.rindex lxm '\"' in
                   WHEN_CLAUSE_VALUE_TAG (String.sub lxm (i + 1) (j - i - 1)) )
 # 818 "xMLLexer.ml"
 
index 955371b..0b3882f 100644 (file)
@@ -36,10 +36,10 @@ type token =
 
 open Parsing;;
 # 28 "xMLParser.mly"
-\r
-\r
-  open XMLTree\r
-\r
+
+
+  open XMLTree
+
 # 44 "xMLParser.ml"
 let yytransl_const = [|
   261 (* MODEL_TAG *);
@@ -291,14 +291,14 @@ let yyact = [|
     let _9 = (Parsing.peek_val __caml_parser_env 0 : 'select) in
     Obj.repr(
 # 108 "xMLParser.mly"
-                                          ( { terminal_name = _1;\r
-                                              kind = _2;\r
-                                              id = _3; \r
-                                              comment = _7;\r
-                                              initial_value = _5;\r
-                                              nominal = _6;\r
-                                              output = _8;\r
-                                              select = _9;\r
+                                          ( { terminal_name = _1;
+                                              kind = _2;
+                                              id = _3; 
+                                              comment = _7;
+                                              initial_value = _5;
+                                              nominal = _6;
+                                              output = _8;
+                                              select = _9;
                                               fixed = _4 } )
 # 304 "xMLParser.ml"
                : 'terminal_contents))
@@ -306,12 +306,12 @@ let yyact = [|
     let _2 = (Parsing.peek_val __caml_parser_env 1 : string) in
     Obj.repr(
 # 121 "xMLParser.mly"
-                                                                ( match _2 with\r
-                                                                    | "input" -> Input\r
-                                                                    | "fixed_parameter" -> FixedParameter\r
-                                                                    | "parameter" -> Parameter\r
-                                                                    | "variable" -> Variable\r
-                                                                    | "discrete_variable" -> DiscreteVariable\r
+                                                                ( match _2 with
+                                                                    | "input" -> Input
+                                                                    | "fixed_parameter" -> FixedParameter
+                                                                    | "parameter" -> Parameter
+                                                                    | "variable" -> Variable
+                                                                    | "discrete_variable" -> DiscreteVariable
                                                                     | _ -> raise Parsing.Parse_error )
 # 317 "xMLParser.ml"
                : 'kind))
@@ -484,31 +484,31 @@ let xML_definition_eof (lexfun : Lexing.lexbuf -> token) (lexbuf : Lexing.lexbuf
    (Parsing.yyparse yytables 1 lexfun lexbuf : XMLTree.t)
 ;;
 # 192 "xMLParser.mly"
-\r
-\r
-let parse filename token_fun lexbuf =\r
-  try\r
-    xML_definition_eof token_fun lexbuf\r
-  with\r
-    | Parsing.Parse_error ->\r
-        let linenum, linebeg =\r
-          Linenum.for_position filename (Lexing.lexeme_start lexbuf)\r
-        and linenum', linebeg' =\r
-          Linenum.for_position filename (Lexing.lexeme_end lexbuf)\r
-        in\r
-        let first_char = Lexing.lexeme_start lexbuf - linebeg\r
-        and first_char' = Lexing.lexeme_end lexbuf - linebeg'\r
-        in\r
-        Printf.printf\r
-          "Syntax error.\n\\r
-          Start: %d and %d\n\\r
-          Characters %d and %d\n\\r
-          Line %d, character %d.\n\\r
-          Line %d, character %d.\n"\r
-          linebeg\r
-          linebeg'\r
-          (Lexing.lexeme_start lexbuf) (Lexing.lexeme_end lexbuf)\r
-          linenum first_char\r
-          linenum' first_char';\r
-        raise Exit\r
+
+
+let parse filename token_fun lexbuf =
+  try
+    xML_definition_eof token_fun lexbuf
+  with
+    | Parsing.Parse_error ->
+        let linenum, linebeg =
+          Linenum.for_position filename (Lexing.lexeme_start lexbuf)
+        and linenum', linebeg' =
+          Linenum.for_position filename (Lexing.lexeme_end lexbuf)
+        in
+        let first_char = Lexing.lexeme_start lexbuf - linebeg
+        and first_char' = Lexing.lexeme_end lexbuf - linebeg'
+        in
+        Printf.printf
+          "Syntax error.\n\
+          Start: %d and %d\n\
+          Characters %d and %d\n\
+          Line %d, character %d.\n\
+          Line %d, character %d.\n"
+          linebeg
+          linebeg'
+          (Lexing.lexeme_start lexbuf) (Lexing.lexeme_end lexbuf)
+          linenum first_char
+          linenum' first_char';
+        raise Exit
 # 515 "xMLParser.ml"
index 6a6d578..c9aae09 100644 (file)
@@ -1,54 +1,54 @@
-(*\r
- *  XML to Modelica\r
- *\r
- *  Copyright (C) 2005 - 2007 Imagine S.A.\r
- *  For more information or commercial use please contact us at www.amesim.com\r
- *\r
- *  This program is free software; you can redistribute it and/or\r
- *  modify it under the terms of the GNU General Public License\r
- *  as published by the Free Software Foundation; either version 2\r
- *  of the License, or (at your option) any later version.\r
- *\r
- *  This program is distributed in the hope that it will be useful,\r
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of\r
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
- *  GNU General Public License for more details.\r
- *\r
- *  You should have received a copy of the GNU General Public License\r
- *  along with this program; if not, write to the Free Software\r
- *  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.\r
- *\r
- *)\r
-\r
-type t =\r
-  {\r
-    name: string;\r
-    elements: element list;\r
-    equations: string list;\r
-    when_clauses: string list\r
-  }\r
-\r
-and element =\r
-  | Struct of structured_element\r
-  | Terminal of terminal_element\r
-\r
-and structured_element =\r
-  {\r
-    struct_name: string;\r
-    subnodes: element list\r
-  }\r
-\r
-and terminal_element =\r
-  {\r
-    terminal_name: string;\r
-    kind: kind;\r
-    id: string;\r
-    comment: string;\r
-    initial_value: string;\r
-    nominal: string;\r
-    output: bool;\r
-    select: bool;\r
-    fixed: string\r
-  }\r
-\r
-and kind = Input | FixedParameter | Parameter | Variable | DiscreteVariable\r
+(*
+ *  XML to Modelica
+ *
+ *  Copyright (C) 2005 - 2007 Imagine S.A.
+ *  For more information or commercial use please contact us at www.amesim.com
+ *
+ *  This program is free software; you can redistribute it and/or
+ *  modify it under the terms of the GNU General Public License
+ *  as published by the Free Software Foundation; either version 2
+ *  of the License, or (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+ *
+ *)
+
+type t =
+  {
+    name: string;
+    elements: element list;
+    equations: string list;
+    when_clauses: string list
+  }
+
+and element =
+  | Struct of structured_element
+  | Terminal of terminal_element
+
+and structured_element =
+  {
+    struct_name: string;
+    subnodes: element list
+  }
+
+and terminal_element =
+  {
+    terminal_name: string;
+    kind: kind;
+    id: string;
+    comment: string;
+    initial_value: string;
+    nominal: string;
+    output: bool;
+    select: bool;
+    fixed: string
+  }
+
+and kind = Input | FixedParameter | Parameter | Variable | DiscreteVariable