erreur.pir .namespace .sub "Programme en erreur." :main .local pmc nom nom = new "String" .end espace.pir .namespace [] .sub "Recuperation de l'espace de nom" :main .local pmc nom nom = new "String" nom = get_namespace print "Nous sommes dans l'espace de nom : " say nom .end espace1.pir .namespace [ "Mon_espace" ] .sub "Recuperation de l'espace de nom" :main .local pmc nom nom = new "String" nom = get_namespace print "Nous sommes dans l'espace de nom : " say nom .end coruscant chris$ parrot espace.pir Nous sommes dans l'espace de nom : Mon_espace espace2.pir .sub main .local pmc espace, nom espace = get_global "MonEspace" nom = espace["ma_fonction"] say nom nom() .end .namespace ["MonEspace"] .sub ma_fonction say "Dans ma_fonction de l'espace de nom." .end espace3.pir .sub main .local pmc espace1, espace2 espace1 = get_global "ma_fonction" say espace1 set_global ["MonEspace"], "nouveau", espace1 espace2 = get_global ["MonEspace"], "nouveau" say espace2 espace2() .end .sub ma_fonction say "On est dans la fonction." .end methode.pir .sub main .local pmc classe .local pmc objet # On crée une nouvelle classe a partir de l'espace de nom Mon_Espace. newclass classe, "Mon_Espace" # Instantiation d'un objet de la classe Mon_Espace new objet, "Mon_Espace" # Test de l'existence d'une methode. $I0 = can objet, "Dire_Bonjour" print "Test de la methode Dire_Bonjour : " say $I0 $I0 = can objet, "Dire_Adieu" print "Test de la methode Dire_Adieu : " say $I0 # Appel de la methode Dire_Bonjour dans l'espace de nom Mon_Espace. objet."Dire_Bonjour"() say "Fin du programme." end .end # Initialisation de l'espace de nom Mon_Espace .namespace [ "Mon_Espace" ] # Définition de la methode globale Mon_Espace::Dire_Bonjour .sub Dire_Bonjour :method say "Bonjour." # Invoquation de Mon_Espace::Dire_Aurevoir self."Dire_Aurevoir"() # Positionnement du nom de la methode dans un registre. $S0 = "Dire_Aurevoir" self.$S0() .end # Définition de la methode globale Mon_Espace::Dire_Au_Revoir .sub Dire_Aurevoir :method say "Au Revoir." .end vtable.pir .sub main :main .local pmc classe classe = newclass "MaClasse" print "Nom de la classe : " say classe $P1 = new classe $P2 = $P1 print "Premier appel. Contenu du registre : " say $P2 $P2 = $P1."Chaine"() print "Second appel. Contenu du registre : " say $P2 .end .namespace ["MaClasse"] .sub "Chaine" :vtable("get_string") :method $P0 = new "String" $P0 = "Bonjour !" .return($P0) .end classes.pir .sub main :main $P0 = new "String" $P0.'visualise'("Appel direct de la classe 'String'.") # Creation d'une sous classe de la classe "String". $P2 = get_class "String" $P1 = subclass $P2, "MaChaine" # Creation d'une sous classe par reference. $P3 = new $P1 $P3.'visualise'("Appel 1 de la sous classe 'MaChaine'" ) # Creation d'une sous classe par nom. $P4 = new "MaChaine" $P4.'visualise'("Appel 2 de la sous classe 'MaChaine'") .local pmc nomclasse # Creation d'une sous classe a partir de la sous classe "MaChaine" $P2 = get_class "MaChaine" $P5 = subclass $P2, "MaSousChaine" nomclasse = new $P5 nomclasse.'visualise'("Appel de la sous classe 'MaSousChaine'") .end .namespace [ "String" ] .sub "visualise" :method .param string x print "Message : " say x .end objets.pir .sub "main" :main .local pmc Personne .local pmc Processus .local pmc Ref_Personne, Ref_Processus Ref_Personne = newclass "Personne" Ref_Processus = newclass "Processus" .end .namespace [ "Personne" ] .sub individu .end .namespace [ "Processus" ] .sub programme .end etrehumain.pir .sub _ :main $P0 = newclass "EtreHumain" $P1 = get_class "EtreHumain" $P10 = subclass $P1, "Homme" $P11 = subclass $P1, "Femme" $P12 = subclass $P1, "Enfant" .local pmc Jean Jean = new $P10 .local pmc Julie Julie = new $P11 .local pmc Olivier Olivier = new $P12 .local pmc Claude Claude = new $P12 .local pmc Marie Marie = new $P12 Jean.'identite'("Jean", "homme") Julie.'identite'("Julie", "femme") Marie.'identite'("Marie", "enfant") Olivier.'identite'("Olivier", "enfant") Claude.'identite'("Claude", "enfant") .end .namespace ["EtreHumain"] .sub identite :method .param string nom .param string sexe print "Je suis un(e) " print sexe print " et je m'appelle " say nom .end methode.pir .namespace [ "Message" ] .sub Bonjour :method say "Bonjour a tous." .end .sub Aurevoir :method say "Au Revoir." .end .namespace [] .sub "Appel de Methodes" :main .local pmc MaClasse MaClasse = newclass "Message" .local pmc Annonce Annonce = new "Message" .local string methode methode = "Bonjour" Annonce.methode() methode = "Aurevoir" Annonce.methode() .end etrehumain.pir .sub _ :main $P0 = newclass "EtreHumain" # Attributs de l'etre humain, nom et sexe. addattribute $P0, "Sexe" addattribute $P0, "Nom" .local pmc etre_humain etre_humain = get_class "EtreHumain" .local pmc homme .local pmc femme homme = subclass etre_humain, "Homme" femme = subclass etre_humain, "Femme" .local pmc Jean # Creation de l'objet "Jean" Jean = new homme .local pmc sexe sexe = new "String" sexe = "Masculin" .local pmc nom nom = new "String" nom = "Jean" # Sexe : "Masculin" setattribute Jean, "Sexe", sexe # Nom : "Jean" setattribute Jean, "Nom", nom .local pmc Julie # Creation de l'objet "Julie" Julie = new femme .local pmc sexe sexe = new "String" sexe = "Feminin" .local pmc nom nom = new "String" nom = "Julie" # Sexe : "Feminin" setattribute Julie, "Sexe", sexe # Nom : "Julie" setattribute Julie, "Nom", nom .local pmc Christian # Creation de l'objet "Christian" Christian = new homme .local pmc sexe sexe = new "String" sexe = "Masculin" .local pmc nom nom = new "String" nom = "Christian" # Sexe : "Masculin" setattribute Christian, "Sexe", sexe # Nom : "Christian" setattribute Christian, "Nom", nom # Appel des methodes attachees aux objets. Jean.'identite'("Bonjour") Christian.'identite'("Salut") Julie.'identite'("Hello") .end .namespace ["EtreHumain"] .sub identite :method .param string message .local pmc sexe sexe = new "String" sexe = getattribute self, "Sexe" .local pmc nom nom = new "String" nom = getattribute self, "Nom" print message print " je m'appelle " print nom print " et je suis de sexe " say sexe .end initialisation.pir .sub main :main .local pmc perroquet, ara, parrot perroquet = newclass 'Conure' addattribute perroquet, "Nom" ara = new ["Conure"] $P2 = getattribute ara, "Nom" say $P2 parrot = new ["Conure"] $P2 = getattribute parrot, "Nom" say $P2 .end .namespace ["Conure"] .sub __init :method $S0 = typeof self $P0 = new ["String"] .local pmc STDIN STDIN = getstdin print "Vous creez un nouveau " print $S0 print ". Quel est son nom ? " $S0 = readline STDIN chopn $S0, 1 $P0 = $S0 setattribute self, "Nom", $P0 .end jungle.pir .macro CreerEntree (Ref, Famille, Espece, Nom, Sexe, Naissance) .local pmc .Ref .Ref = new .Famille $P0 = new "String" $P0 = .Espece setattribute .Ref, "Espece", $P0 $P0 = new "String" $P0 = .Nom setattribute .Ref, "Nom", $P0 $P0 = new "String" $P0 = .Sexe setattribute .Ref, "Sexe", $P0 $P0 = new "Integer" $P0 = .Naissance setattribute .Ref, "Naiss", $P0 .endm .macro Edite (Ref) $S1 = .Ref.'Espece'() print " Je suis un(e) " say $S1 $S1 = .Ref.'Nom'() print " Je m'appelle " say $S1 $S1 = .Ref.'Sexe'() print " Je suis de sexe " say $S1 $I1 = .Ref.'Age'() print " Je suis ne(e) en " print $I1 $I0 = time $S0 = localtime $I0 $S0 = substr $S0, -5, 4 $I0 = $S0 $I0 -= $I1 print " et j'ai " print $I0 say " ans.\n" .endm .namespace [ "Jungle" ] .sub Espece :method $P0 = new "String" $P0 = getattribute self, "Espece" .return ($P0) .end .sub Nom :method $P0 = new "String" $P0 = getattribute self, "Nom" .return ($P0) .end .sub Sexe :method $P0 = new "String" $P0 = getattribute self, "Sexe" .return ($P0) .end .sub Age :method $P0 = new "Integer" $P0 = getattribute self, "Naiss" .return ($P0) $I0 = time .end .namespace [] .sub _ :main $P0 = newclass "Jungle" addattribute $P0, "Espece" addattribute $P0, "Nom" addattribute $P0, "Sexe" addattribute $P0, "Naiss" $P0 = subclass "Jungle", "Fauve" $P1 = subclass "Jungle", "Conure" $P2 = subclass "Jungle", "Reptile" .local pmc bag .CreerEntree (bag, "Fauve", "Panthere Noire", "Bagheera", "Femelle", 1967) .local pmc parrot .CreerEntree (parrot, "Conure", "Perroquet", "Half Moon", "Male", 2008) .local pmc kaa .CreerEntree (kaa, "Reptile", "Boa", "Kaa", "Male", 2000) .local pmc shere .CreerEntree (shere, "Fauve", "Tigre", "Shere Khan", "Male", 1998) say "Edition des fauves." .Edite (bag) .Edite (shere) say "Edition des conures." .Edite (parrot) say "Edition des reptiles." .Edite (kaa) .end repertoire.pir .macro Enregistre (Ref, Ag, Nom, Prof, Nais, Mail) .Ref = new "Identite" .Ref.'Remplis'(.Prof, .Nais, .Mail) .Ag[.Nom] = .Ref .endm .namespace [ "Identite" ] .sub Remplis :method .param string prof .param int nais .param string mail $P0 = new 'String' $P0 = prof setattribute self, "Profession", $P0 $P0 = new 'Integer' $P0 = nais setattribute self, "Naissance", $P0 $P0 = new 'String' $P0 = mail setattribute self, "Mail", $P0 .end .sub Edite :method .param string nom print "Nom : " say nom $P0 = getattribute self, "Profession" print "Profession : " say $P0 $P0 = getattribute self, "Naissance" print "Date de naissance : " say $P0 $P0 = getattribute self, "Mail" print "Mail : " say $P0 .end .namespace [] .sub _ :main .local pmc Repertoire Repertoire = newclass "Identite" addattribute Repertoire, "Profession" addattribute Repertoire, "Naissance" addattribute Repertoire, "Mail" .local pmc Agenda Agenda = new "Hash" .local pmc chris $S0 = "Christian Aperghis" $S1 = "Enseignant" $I0 = 1947 $S2 = "chris@aperghis.fr" .Enregistre(chris, Agenda, $S0, $S1, $I0, $S2) .local pmc seb $S0 = "Sebastien Aperghis" $S1 = "Ingenieur" $I0 = 1977 $S2 = "sebastien@aperghis.fr" .Enregistre(seb, Agenda, $S0, $S1, $I0, $S2) .local pmc cles cles = new 'Iterator', Agenda EXPLORE: unless cles goto FIN $S0 = shift cles $P0 = Agenda[$S0] $P0.'Edite'($S0) print "\n" goto EXPLORE FIN: .end exception1.pir .sub _ :main # Gestionnaire de l'exception. $P0 = new "Exception" $P1 = new "String" $P1 = "Ceci est le message d'erreur de l'exception." $P0["message"] = $P1 say "Avant exception" # Declenchement de l'exception. throw $P0 say "Apres exception" .end .sub _ :main # Gestionnaire de l'exception. $P0 = new "Exception" $P1 = new "String" $P2 = new "Integer" $P2 = 100 $P1 = "Traitement de l'exception." $P0["message"] = $P1 $P0 ["severity"] = 100 $P0 ["type"] = 5 push_eh GESTIONNAIRE say "Avant exception" # Declenchement de l'exception. throw $P0 say "Apres exception" GESTIONNAIRE: .get_results($P0) pop_eh print "Type de l'exception : " $I1 = $P0["type"] say $I1 print "Message de l'exception : " $S1 = $P0["message"] say $S1 print "Severite de l'exception : " $I1 = $P0["severity"] say $I1 .end exception2.pir .sub main :main say "Debut du programme." push_eh GESTIONNAIRE $P1 = new ['Exception'] $P2 = new ['String'] set $P2, "Grosse faute." setattribute $P1, 'message', $P2 throw $P1 say "Cette ligne ne sera jamais affichee." end GESTIONNAIRE: .local pmc mess .get_results (mess) say "Gestion de l'exception." typeof $S1, mess print "Le parametre transmis est de type : " say $S1 print "Le parametre transmis contient : " say mess pop_eh .end zerodiv.pir .sub main :main say "Debut du programme." push_eh GESTIONNAIRE $P1 = new ['Exception'] $P2 = new ['String'] setattribute $P1, 'message', $P2 $I1 = 10 / 0 end GESTIONNAIRE: .local pmc mess .get_results (mess) say "Gestion de l'exception." print "Le parametre transmis contient : " say mess pop_eh .end