let handleSemanticError = function
    (0,_,r,_,_,_) -> 
      prerr_endline
              ("%% Semantic error");
      prerr_endline
        ("%%   Sem.Err(0): undefined role "^r)
 
  | (1,f,r,_,_,c) -> 
      prerr_endline
              ("%% Semantic error: Role "^r^", Call "^c);
      prerr_endline
        ("%%   Sem.Err(1): "^f^" is not a function")

  | (2,s,r,_,_,c) ->
      (match s with
              "-1" -> 
          prerr_endline
            ("%% Semantic error: Role "^r^", Call "^c);
          prerr_endline
            ("%%   Sem.Err(2a): invalid number of arguments")
      | _ -> 
          prerr_endline
            ("%% Semantic error: Role "^r^", Call "^c^", Arg "^s);
          prerr_endline
            ("%%   Sem.Err(2b): type mismatch"))

  | (4,_,r,tr,_,_) -> 
      prerr_endline
              ("%% Semantic error: Role "^r^", Transition "^tr);
      prerr_endline
        ("%%   Sem.Err(4): missing event")

  | (5,n,r,tr,_,c) ->
      (match n with

        "1i" ->
          prerr_endline
            ("%% Semantic error: Role "^r^", Init state");
          prerr_endline
            ("%%   Sem.Err(5.1i): type mismatch in assignment")
      | "1c" ->
          prerr_endline
            ("%% Semantic error: Role "^r^", Call "^c);
          prerr_endline
            ("%%   Sem.Err(5.1c): type mismatch in cons() arguments")
      | "1t" ->
          prerr_endline
            ("%% Semantic error: Role "^r^", Transition "^tr);
          prerr_endline
            ("%%   Sem.Err(5.1t): type mismatch in cons() arguments")
      | "1" ->
          prerr_endline
            ("%% Semantic error: Role "^r);
          prerr_endline
            ("%%   Sem.Err(5.1): type mismatch in cons() arguments")

      | "2i" ->
          prerr_endline
            ("%% Semantic error: Role "^r^", Init state");
          prerr_endline
            ("%%   Sem.Err(5.2i): invalid number of parameters for function, list or set")
      | "2c" ->
          prerr_endline
            ("%% Semantic error: Role "^r^", Call "^c);
          prerr_endline
            ("%%   Sem.Err(5.2c): invalid number of parameters for function, list or set")
      | "2t" ->
          prerr_endline
            ("%% Semantic error: Role "^r^", Transition "^tr);
          prerr_endline
            ("%%   Sem.Err(5.2t): invalid number of parameters for function, list or set")
      | "2" ->
          prerr_endline
            ("%% Semantic error: Role "^r);
          prerr_endline
            ("%%   Sem.Err(5.2): invalid number of parameters for function, list or set")

      | "3c" ->
          prerr_endline
            ("%% Semantic error: Role "^r^", Call "^c);
          prerr_endline
            ("%%   Sem.Err(5.3c): second argument in cons() should be of type list or set")
      | "3t" ->
          prerr_endline
            ("%% Semantic error: Role "^r^", Transition "^tr);
          prerr_endline
            ("%%   Sem.Err(5.3t): second argument in cons() should be of type list or set")
      | "3" ->
          prerr_endline
            ("%% Semantic error: Role "^r);
          prerr_endline
            ("%%   Sem.Err(5.3): second argument in cons() should be of type list or set")
             
      | "4i" ->
          prerr_endline
            ("%% Semantic error: Role "^r^", Init state");
          prerr_endline
            ("%%   Sem.Err(5.4i): impossible to check compatibility of types")
      | "4c" ->
          prerr_endline
            ("%% Semantic error: Role "^r^", Call "^c);
          prerr_endline
            ("%%   Sem.Err(5.4c): impossible to check compatibility of types")
      | "4t" ->
          prerr_endline
            ("%% Semantic error: Role "^r^", Transition "^tr);
          prerr_endline
            ("%%   Sem.Err(5.4t): impossible to check compatibility of types")
      | "4" ->
          prerr_endline
            ("%% Semantic error: Role "^r);
          prerr_endline
            ("%%   Sem.Err(5.4): impossible to check compatibility of types in cons()")

      | "5c" ->
          prerr_endline
            ("%% Semantic error: Role "^r^", Call "^c);
          prerr_endline
            ("%%   Sem.Err(5.5c): type mismatch in cons()")
      | "5t" ->
          prerr_endline
            ("%% Semantic error: Role "^r^", Transition "^tr);
          prerr_endline
            ("%%   Sem.Err(5.5t): type mismatch in cons()")
      | "5" ->
          prerr_endline
            ("%% Semantic error: Role "^r);
          prerr_endline
            ("%%   Sem.Err(5.5): type mismatch in cons()")

      | x -> 
          prerr_endline
            ("%% Semantic error: Role "^r);
          prerr_endline
            ("%%   Sem.Err("^x^"): unknown error"))
      
  | (10,_,r,tr,_,_) -> 
      prerr_endline
              ("%% Semantic error: Role "^r^", Transition "^tr);
      prerr_endline
        ("%%   Sem.Err(10): \"start\" is not used with a channel")

  | (11,v,"","","",""->
      prerr_endline
        ("%% Semantic error: LTL goal");
      prerr_endline
        ("%%   Sem.Err(11g): undeclared variable "^v)
  | (11,v,r,"","",""->
      prerr_endline
        ("%% Semantic error: Role "^r);
      prerr_endline
        ("%%   Sem.Err(11a): undeclared variable "^v)
  | (11,v,r,"","",c) ->
      prerr_endline
        ("%% Semantic error: Role "^r^", Call "^c^
         ": Sem.Err(11b): undeclared variable "^v)
  | (11,v,r,"",st,""->
      prerr_endline
        ("%% Semantic error: Role "^r);
      prerr_endline
        ("%%   Sem.Err(11c): undeclared symbol "^v^" in "^st)
  | (11,v,r,"",st,c) ->
      prerr_endline
        ("%% Semantic error: Role "^r^", Call "^c);
      prerr_endline
        ("%%   Sem.Err(11d): undeclared symbol "^v^" in "^st)
  | (11,v,r,tr,_,""->
      prerr_endline
        ("%% Semantic error: Role "^r);
      prerr_endline
        ("%%   Sem.Err(11e): undeclared variable "^v)
  | (11,v,r,tr,_,c) ->
      prerr_endline
        ("%% Semantic error: Role "^r^", Call "^c);
      prerr_endline
        ("%%   Sem.Err(11f): undeclared variable "^v)

  | (12,_,r,_,st,_) -> 
      prerr_endline
              ("%% Semantic error: Role "^r^", Call "^st);
      prerr_endline
        ("%%   Sem.Err(12): LHS of assignment is not a variable")

  | (13,var,r,_,_,st) -> 
      prerr_endline
              ("%% Semantic error: Role "^r^", Call "^st);
      prerr_endline
        ("%%   Sem.Err(13): redeclared variable "^var)

  | (14,f,r,_,_,st) -> 
      prerr_endline
              ("%% Semantic error: Role "^r^", Call "^st);
      prerr_endline
        ("%%   Sem.Err(14): invalid argument used with "^f)

  | (15,_,r,_,_,_) -> 
      prerr_endline
              ("%% Semantic error: Role "^r);
      prerr_endline
        ("%%   Sem.Err(15): invalid number of parameters in composition section")

  | (16,msg,line,_,_,_) ->
      prerr_endline
        ("%% Semantic error: Line "^line);
      prerr_endline
        ("%%   Sem.Err(16): "^msg)

  | (17,_,r,_,_,_) ->
      prerr_endline
         ("%% Semantic error: Role "^r);
      prerr_endline
        ("%%   Sem.Err(17): player should be declared as agent in parameters")

  | (18,v,r1,r2,_,_) ->
      if r2 <> "" then
        if r1 <> "" then
          (prerr_endline
             ("%% Semantic error: Role "^r2);
           prerr_endline
             ("%%   Sem.Err(18a): type mismatch with declaration of "^v^" in role "^r1))
        else
          (prerr_endline
             ("%% Semantic error: Role "^r2);
           prerr_endline
             ("%%   Sem.Err(18b): type mismatch with global declaration of "^v))
      else
        if r1 <> "" then
          (prerr_endline
             ("%% Semantic error: Role "^r1);
           prerr_endline
             ("%%   Sem.Err(18c): type mismatch with global declaration of "^v))
        else
          (prerr_endline
             ("%% Semantic error");
           prerr_endline
             ("%%    Sem.Err(18d): type mismatch between global declarations of "^v))

  | (19,v,line,r,_,_) ->
      prerr_endline
        ("%% Semantic error: Role "^r);
      prerr_endline
        ("%%   Sem.Err(19): Line "^line^": undeclared variable "^v^" in owns section")

  | (20,msg,_,_,_,_) ->
      prerr_endline
        ("%% Semantic error");
      prerr_endline
        ("%%   Sem.Err(20): "^msg)

  | _ -> ()