ओबेरोन -2: Difference between revisions

From Vigyanwiki
No edit summary
No edit summary
 
(9 intermediate revisions by 3 users not shown)
Line 1: Line 1:
{{multiple issues|
{{Primary sources|date=April 2011}}
{{More footnotes needed|date=April 2011}}
}}
{{Infobox programming language
{{Infobox programming language
| name = Oberon-2
| name = Oberon-2
Line 28: Line 23:
| influenced = [[Oberon (programming language)#Oberon-07|Oberon-07]], [[Zonnon]], [[Active Oberon]], [[Component Pascal]], [[Go (programming language)|Go]], [[Nim (programming language)|Nim]]
| influenced = [[Oberon (programming language)#Oberon-07|Oberon-07]], [[Zonnon]], [[Active Oberon]], [[Component Pascal]], [[Go (programming language)|Go]], [[Nim (programming language)|Nim]]
}}
}}
ओबेरॉन -2 मूल ओबेरॉन (प्रोग्रामिंग लैंग्वेज) [[प्रोग्रामिंग भाषा]] का एक विस्तार है जो सीमित [[प्रतिबिंब (कंप्यूटर विज्ञान)]] और [[ऑब्जेक्ट ओरिएंटेड प्रोग्रामिंग]] सुविधाओं को जोड़ता है, पॉइंटर बेस प्रकार के रूप में ऐरे डेटा संरचना को खोलता है, केवल-पढ़ने के लिए फ़ील्ड निर्यात करता है,और  [[मॉड्यूल-2]] से फॉर लूप को पुन: प्रस्तुत करता है।
ओबेरॉन -2 मूल ओबेरॉन (प्रोग्रामिंग लैंग्वेज) [[प्रोग्रामिंग भाषा]] का ऐसा विस्तार है जो सीमित [[प्रतिबिंब (कंप्यूटर विज्ञान)]] और [[ऑब्जेक्ट ओरिएंटेड प्रोग्रामिंग]] सुविधाओं को जोड़ता है, पॉइंटर बेस प्रकार के रूप में ऐरे डेटा संरचना को खोलता है, केवल-पढ़ने के लिए फ़ील्ड निर्यात करता है,और  [[मॉड्यूल-2]] से फॉर लूप को पुन: प्रस्तुत करता है।


इसे 1991 में ETH ज्यूरिख में [[Niklaus Wirth]] और Hanspeter Mössenbock द्वारा विकसित किया गया था, जो अब ऑस्ट्रिया के [[लिंज़ विश्वविद्यालय]] के Institut für Systemsoftware (SSW) में हैं। ओबेरॉन -2 ओबेरॉन का सुपरसेट है,इसके साथ पूरी तरह से संगत है,और [[ऑब्जेक्ट ओबेरॉन]] का एक नया स्वरूप था।
इसे 1991 में ईटीएच (ETH) ज्यूरिख में [[Niklaus Wirth|निक्लौस विर्थ]] और हैन्सपीटर मौसेनबाॅक द्वारा विकसित किया गया था, जो अब ऑस्ट्रिया के [[लिंज़ विश्वविद्यालय]] के इंस्टीट्यूट फाॅर सिस्टम साॅफ्टवेयर (SSW) में हैं। ओबेरॉन -2 ओबेरॉन का सुपरसेट है, इसके साथ पूर्ण रूप से संयोजित है,और [[ऑब्जेक्ट ओबेरॉन]] का नवीन स्वरूप था।


ओबेरॉन -2 को ओबेरॉन से इंटरफेस या [[मिश्रण|mixin]] के बिना सीमित प्रतिबिंब और एकल [[वंशानुक्रम (वस्तु-उन्मुख प्रोग्रामिंग)]] से ("टाइप एक्सटेंशन") विरासत में मिला है, किन्तु कुशल आभासी विधियों  (कंप्यूटर प्रोग्रामिंग) को ("टाइप बाउंड प्रोसीजर") से जोड़ा गया है। [[सी ++]] - शैली आभासी विधियों  के टेबल का उपयोग करके [[रनटाइम (कार्यक्रम जीवनचक्र चरण)]] पर विधि कॉल्स को हल किया गया था।
ओबेरॉन -2 को ओबेरॉन से इंटरफेस या [[मिश्रण|mixin]] के बिना सीमित प्रतिबिंब और एकल [[वंशानुक्रम (वस्तु-उन्मुख प्रोग्रामिंग)]] से ("टाइप एक्सटेंशन") विरासत में मिला है, किन्तु कुशल आभासी विधियों  (कंप्यूटर प्रोग्रामिंग) को ("टाइप बाउंड प्रोसीजर") से जोड़ा गया है। [[सी ++]] - शैली आभासी विधियों  के टेबल का उपयोग करके [[रनटाइम (कार्यक्रम जीवनचक्र चरण)]] पर विधिवत कॉल करके हल किया गया था।


स्मॉलटाक जैसी पूरी तरह से वस्तु-उन्मुख भाषाओं की तुलना में, ओबेरॉन -2 में, मौलिक [[डेटा प्रकार]] और कक्षाएं ऑब्जेक्ट (कंप्यूटर विज्ञान) में नहीं होते हैं,कई ऑपरेशन विधि नहीं होते हैं,और ना कोई संदेश पासिंग होते है (इसे प्रतिबिंब द्वारा और संदेश विस्तार के माध्यम से कुछ हद तक अनुकरण किया जा सकता है) , जैसा कि ETH ओबेरॉन में प्रदर्शित किया गया है,और [[बहुरूपता (कंप्यूटर विज्ञान)]] एक सामान्य वर्ग के उप-वर्गों तक सीमित होते है ([[पायथन (प्रोग्रामिंग भाषा)]] में कोई [[बतख टाइपिंग]] नहीं होती है),<ref>{{Cite web |url=http://www.drdobbs.com/templates-and-duck-typing/184401971 |title=Related Reading |website=Dr. Dobb's}}</ref> और [[जावा (प्रोग्रामिंग भाषा)]] के रूप में इंटरफेस को परिभाषित करना संभव नहीं होता है)।ओबेरॉन -2 वस्तु या वर्ग स्तर पर एनकैप्सुलेशन (कंप्यूटर प्रोग्रामिंग) का समर्थन नहीं करता है, किन्तु इस उद्देश्य के लिए मॉड्यूल का उपयोग किया जा सकता है।
स्मॉलटाक जैसी पूरी तरह से वस्तु-उन्मुख भाषाओं की तुलना में, ओबेरॉन -2 में, मौलिक [[डेटा प्रकार]] और कक्षाएं ऑब्जेक्ट (कंप्यूटर विज्ञान) में नहीं होते हैं,कई ऑपरेशन विधि नहीं होते हैं,और ना कोई संदेश पासिंग होते है (इसे प्रतिबिंब द्वारा और संदेश विस्तार के माध्यम से कुछ हद तक अनुकरण किया जा सकता है) , जैसा कि ईटीएच ओबेरॉन में प्रदर्शित किया गया है,और [[बहुरूपता (कंप्यूटर विज्ञान)]] एक सामान्य वर्ग के उप-वर्गों तक सीमित होते है ([[पायथन (प्रोग्रामिंग भाषा)]] में कोई [[बतख टाइपिंग]] नहीं होती है),<ref>{{Cite web |url=http://www.drdobbs.com/templates-and-duck-typing/184401971 |title=Related Reading |website=Dr. Dobb's}}</ref> और [[जावा (प्रोग्रामिंग भाषा)]] के रूप में इंटरफेस को परिभाषित करना संभव नहीं होता है)।ओबेरॉन -2 वस्तु या वर्ग स्तर पर एनकैप्सुलेशन (कंप्यूटर प्रोग्रामिंग) का समर्थन नहीं करता है, किन्तु इस उद्देश्य के लिए मॉड्यूल का उपयोग किया जा सकता है।


ओबेरॉन -2 में प्रतिबिंब [[metaobject]] का उपयोग नहीं करता है, किन्तु केवल टाइप डिस्क्रिप्टर [[संकलक]] से निष्पादन योग्य बायनेरिज़ में पढ़ता है, और मॉड्यूल में उजागर होता है जो प्रकार और / या प्रक्रियाओं को परिभाषित करता है। यदि इन संरचनाओं का प्रारूप भाषा स्तर पर उजागर किया जाता है (उदाहरण के लिए ईटीएच ओबेरॉन के स्थितियोंमें), पुस्तकालय (कंप्यूटिंग) स्तर पर प्रतिबिंब लागू किया जा सकता है। इस प्रकार भाषा कोड को बदले बिना इसे लगभग पूरी तरह से पुस्तकालय स्तर पर लागू किया जा सकता है। दरअसल, ETH ओबेरॉन भाषा-स्तर और पुस्तकालय-स्तर की प्रतिबिंब क्षमताओं का बड़े पैमाने पर उपयोग करता है।
ओबेरॉन -2 में प्रतिबिंब [[metaobject|मेटाओब्जेक्ट]] का उपयोग नहीं करता है, किन्तु केवल टाइप डिस्क्रिप्टर [[संकलक]] से निष्पादन योग्य बायनेरिज़ में पढ़ता है,और मॉड्यूल में उजागर होता है जो प्रकार और प्रक्रियाओं को परिभाषित करता है। यदि इन संरचनाओं का प्रारूप भाषा स्तर पर उजागर किया जाता है (उदाहरण के लिए ईटीएच ओबेरॉन के स्थितियों में), पुस्तकालय (कंप्यूटिंग) स्तर पर प्रतिबिंब लागू किया जा सकता है। इस प्रकार भाषा कोड को बदले बिना इसे लगभग पूरी तरह से पुस्तकालय स्तर पर लागू किया जा सकता है। यह मुख्य रूप से, ईटीएच ओबेरॉन भाषा-स्तर और पुस्तकालय-स्तर की प्रतिबिंब क्षमताओं का बड़े पैमाने पर उपयोग करता है।


ओबेरॉन -2 जावा के समान [[कचरा संग्रह (कंप्यूटर विज्ञान)]] के लिए अंतर्निहित रनटाइम समर्थन प्रदान करता है और सी (प्रोग्रामिंग) में निहित संभावित स्टैक और सरणी सीमा ओवरराइटिंग समस्याओं और मैनुअल मेमोरी प्रबंधन मुद्दों को खत्म करने वाले बाउंड और एरे इंडेक्स चेक आदि करता है। भाषा) और सी ++मॉड्यूल आर्किटेक्चर के माध्यम से प्रतीक फ़ाइलों और नामस्थानों का उपयोग करके अलग संकलन तेजी से पुनर्निर्माण सुनिश्चित करता है क्योंकि बदले हुए इंटरफेस वाले मॉड्यूल को फिर से कंपाइल करने की आवश्यकता होती है।
ओबेरॉन -2 जावा के समान [[कचरा संग्रह (कंप्यूटर विज्ञान)]] के लिए अंतर्निहित रनटाइम समर्थन प्रदान करता है सीमा और सरणी सूचकांक जांच आदि करता है, जो संभावित स्टैक और सरणी सीमा ओवरराइटिंग समस्याओं और मैनुअल मेमोरी प्रबंधन विवादों को भाषा सी और सी ++ में निहित करता है। मॉड्यूल आर्किटेक्चर के माध्यम से प्रतीक फ़ाइलों और एड्रेस का उपयोग करके अलग तरह से कंपाइल करके इसका तेजी से पुनर्निर्माण सुनिश्चित करता है क्योंकि परिवर्तन करने के पश्चात इंटरफेस वाले मॉड्यूल को फिर से कंपाइल करने की आवश्यकता होती है।


भाषा [[घटक पास्कल]]<ref>{{Cite web |last=Pfister |first=Cuno |date=2001 |url=http://www.oberon.ch/pdf/CP-New.pdf |title=What's New in Component Pascal (changes from Oberon-2 to CP) |website=Oberon microsystems |access-date=10 January 2007 |url-status=dead |archive-url=https://web.archive.org/web/20110515111149/http://www.oberon.ch/pdf/CP-New.pdf |archive-date=2011-05-15}}</ref> ओबेरॉन-2 का परिशोधन (एक सुपरसेट) है।
भाषा [[घटक पास्कल]]<ref>{{Cite web |last=Pfister |first=Cuno |date=2001 |url=http://www.oberon.ch/pdf/CP-New.pdf |title=What's New in Component Pascal (changes from Oberon-2 to CP) |website=Oberon microsystems |access-date=10 January 2007 |url-status=dead |archive-url=https://web.archive.org/web/20110515111149/http://www.oberon.ch/pdf/CP-New.pdf |archive-date=2011-05-15}}</ref> ओबेरॉन-2 का परिशोधन (सुपरसेट) है।


== उदाहरण कोड ==
== उदाहरण कोड ==
निम्नलिखित ओबेरॉन -2 कोड एक साधारण बाइनरी ट्री को लागू करता है:
निम्नलिखित ओबेरॉन -2 कोड एक साधारण बाइनरी ट्री को लागू करता है:
 
MODULE Trees;
<वाक्यविन्यास प्रकाश लैंग = सीपी शैली = फ़ॉन्ट-आकार: 10pt>
मॉड्यूल पेड़;
TYPE
 
    Tree* = POINTER TO Node;
प्रकार
    Node* = RECORD
    ट्री * = पॉइंटर टू नोड;
        name-: POINTER TO ARRAY OF CHAR;
    नोड* = रिकॉर्ड
        left, right: Tree
        नाम-: चार की सरणी के लिए सूचक;
    END;
        बाएँ, दाएँ: पेड़
    अंत;
PROCEDURE (t: Tree) Insert* (name: ARRAY OF CHAR);
 
    VAR p, father: Tree;
प्रक्रिया (टी: ट्री) डालें* (नाम: चार की सरणी);
BEGIN p := t;
    वार पी, पिता: वृक्ष;
    REPEAT father := p;
BEGIN p := t;
        IF name = p.name^ THEN RETURN END;
    रिपीट फादर := p;
        IF name < p.name^ THEN p := p.left ELSE p := p.right END
        IF नाम = p.name ^ फिर वापसी अंत;
    UNTIL p = NIL;
        IF नाम <p.name^ THEN p := p.left ELSE p := p.right END
    NEW(p); p.left := NIL; p.right := NIL; NEW(p.name, LEN(name)+1); COPY(name, p.name^);
    जब तक पी = शून्य;
    IF name < father.name^ THEN father.left := p ELSE father.right := p END
    नया पी); p.बाएँ:= शून्य; p.right := शून्य; नया (पी.नाम, एलईएन (नाम) +1); कॉपी (नाम, पी। नाम ^);
END Insert;
    IF नाम <Father.name^ THEN father.left := p ELSE father.right:= p END
अंत डालें;
PROCEDURE (t: Tree) Search* (name: ARRAY OF CHAR): Tree;
 
    VAR p: Tree;
प्रक्रिया (टी: पेड़) खोज* (नाम: चार की सरणी): पेड़;
BEGIN p := t;
    वार पी: ट्री;
    WHILE (p # NIL) & (name # p.name^) DO
BEGIN p := t;
        IF name < p.name^ THEN p := p.left ELSE p := p.right END
    जबकि (पी # एनआईएल) और (नाम # पी.नाम ^) डीओ
    END;
        IF नाम <p.name^ THEN p := p.left ELSE p := p.right END
    RETURN p
    अंत;
END Search;
    रिटर्न पी
अंत खोज;
PROCEDURE NewTree* (): Tree;
 
    VAR t: Tree;
प्रक्रिया NewTree* (): ट्री;
BEGIN NEW(t); NEW(t.name, 1); t.name[0] := 0X; t.left := NIL; t.right := NIL; RETURN t
    वर टी: ट्री;
END NewTree;
नया प्रारंभ करें (टी); नया (टी.नाम, 1); टी नाम [0] := 0X; t.बाएँ:= शून्य; टी.राइट := शून्य; वापसी टी
न्यूट्री समाप्त करें;
END Trees.
 
अंत पेड़।
</वाक्यविन्यास हाइलाइट>


== ओबेरॉन -2 एक्सटेंशन ओबेरॉन के लिए<ref>[http://members.home.nl/jmr272/Oberon/Oberon2.Differences.pdf Differences between Oberon and Oberon-2, Mössenböck and Wirth (1993)]</ref> ==
== ओबेरॉन -2 एक्सटेंशन ओबेरॉन के लिए<ref>[http://members.home.nl/jmr272/Oberon/Oberon2.Differences.pdf Differences between Oberon and Oberon-2, Mössenböck and Wirth (1993)]</ref> ==


=== टाइप-बाउंड प्रक्रियाएं ===
=== टाइप-बाउंड प्रक्रियाएं ===
प्रक्रियाओं को एक रिकॉर्ड (या सूचक) प्रकार के लिए बाध्य किया जा सकता है। वे वस्तु-उन्मुख शब्दावली में उदाहरण के विधियों  के बराबर हैं।
प्रक्रियाओं को एक रिकॉर्ड (या सूचक) प्रकार के लिए बाध्य किया जा सकता है। वे वस्तु-उन्मुख शब्दावली में उदाहरण के विधियों  के बराबर होते हैं।


=== केवल-पढ़ने के लिए निर्यात ===
=== केवल-पढ़ने के लिए निर्यात ===
Line 92: Line 84:


=== खुली सरणी ===
=== खुली सरणी ===
सरणी में जिसे पहले केवल औपचारिक पैरामीटर प्रकार के रूप में घोषित किया जा सकता था, अब सूचक आधार प्रकार के रूप में घोषित किया जा सकता है।
सरणी में जिसे पहले केवल औपचारिक पैरामीटर प्रकार के रूप में घोषित किया जा सकता था,उन्हें अब सूचक आधार प्रकार के रूप में घोषित किया जा सकता है।


=== कथन के लिए === <code>FOR</code> ई> पास्कल और मोडुला-2 का बयान ओबेरॉन में लागू नहीं किया गया था। इसे ओबेरॉन-2 में फिर से सम्मलित किया गया है।
=== '''कथन के लिए''' ===
ओबेरॉन में पास्कल और मोडुला-2 का फॉर स्टेटमेंट में लागू नहीं किया गया था। इसे ओबेरॉन-2 में फिर से सम्मलित किया गया है।


=== रनटाइम प्रकार की जाँच ===
=== रनटाइम प्रकार की जाँच ===
ओबेरॉन -2 किसी वस्तु के गतिशील प्रकार की जाँच के लिए कई तंत्र प्रदान करता है। उदाहरण के लिए, जहां एक बर्ड ऑब्जेक्ट को डक या कोयल के रूप में तत्काल किया जा सकता है, ओबेरॉन -2 प्रोग्रामर को रनटाइम पर ऑब्जेक्ट के वास्तविक प्रकार का उत्तर देने की अनुमति देता है।
पहला, सबसे पारंपरिक, दृष्टिकोण प्रकार बाध्यकारी प्रणाली पर भरोसा करना है। दूसरा दृष्टिकोण विथ स्टेटमेंट का उपयोग करना है, जो इसके वैरिएबल के लिए गतिशील उपप्रकार को सीधे जांचने की अनुमति देता है। दोनों ही स्थितियों में, इस प्रकार की पहचान हो जाने के पश्चात प्रोग्रामर इसके प्रकार के लिए उपयुक्त किसी भी प्रकार की बाध्य प्रक्रियाओं या चर का उपयोग करता है। इन दृष्टिकोणों के उदाहरण नीचे दिखाए गए हैं।


पहला, सबसे पारंपरिक, दृष्टिकोण प्रकार बाध्यकारी प्रणाली पर भरोसा करना है। दूसरा विधिउपयोग करना है<code>WITH</code> बयान, जो एक चर के गतिशील उपप्रकार को सीधे जांचने की अनुमति देता है। दोनों ही स्थितियों में, एक बार उपप्रकार की पहचान हो जाने के बाद, प्रोग्रामर उपप्रकार के लिए उपयुक्त किसी भी प्रकार की बाध्य प्रक्रियाओं या चर का उपयोग कर सकता है। इन दृष्टिकोणों के उदाहरण नीचे दिखाए गए हैं।
ध्यान दें कि ओबेरॉन-2 में प्रयुक्त विथ स्टेटमेंट का फॉर्म पास्कल और मोडुला-2 विथ स्टेटमेंट से संबंधित नहीं है। रिकॉर्ड फ़ील्ड तक पहुंच को संक्षिप्त करने की यह विधि ओबेरॉन या ओबेरॉन -2 में लागू नहीं किया गया है।


ध्यान दें कि का रूप <code>WITH</code> ओबेरॉन-2 में प्रयुक्त बयान पास्कल और मोडुला-2 के साथ बयान से संबंधित नहीं है। रिकॉर्ड फ़ील्ड तक पहुंच को संक्षिप्त करने का यह विधिओबेरॉन या ओबेरॉन -2 में लागू नहीं किया गया है।
==== बाइंडिंग टाइप करें ====
  MODULE Birds;
      TYPE
          Bird* = RECORD
              sound* : ARRAY 10 OF CHAR;
          END;
  END Birds.
 
  MODULE Ducks;
      IMPORT Birds;
 
      TYPE
          Duck* = RECORD (Birds.Bird) END;
 
      PROCEDURE SetSound* (VAR bird : Duck);
      BEGIN
          bird.sound := "Quack!"
      END SetSound;
  END Ducks.
 
  MODULE Cuckoos;
      IMPORT Birds;
 
      TYPE
          Cuckoo* = RECORD (Birds.Bird) END;
 
      PROCEDURE SetSound* (VAR bird : Cuckoo);
      BEGIN
          bird.sound := "Cuckoo!"
      END SetSound;
END Cuckoos.
==== <code>WITH</code> कथन ====


==== बाइंडिंग टाइप करें ====
MODULE Test;
<वाक्यविन्यास प्रकाश लैंग = घटकपास्कल>
      IMPORT Out, Birds, Cuckoos, Ducks;
मॉड्यूल पक्षी;
 
    प्रकार
      TYPE
        पक्षी* = रिकॉर्ड
          SomeBird* = RECORD (Birds.Bird) END;
            ध्वनि*�: सरणी 10 चार;
 
        अंत;
      VAR
अंत पक्षी।
          sb : SomeBird;
          c  : Cuckoos.Cuckoo;
मॉड्यूल बतख;
          d : Ducks.Duck;
    आयात पक्षी;
 
   
      PROCEDURE SetSound* (VAR bird : Birds.Bird);
    प्रकार
      BEGIN
        बतख * = रिकॉर्ड (पक्षी। पक्षी) अंत;
          WITH bird : Cuckoos.Cuckoo DO
              bird.sound := "Cuckoo!"
    प्रक्रिया सेटसाउंड * (वार पक्षी: बतख);
            | bird : Ducks.Duck DO
    प्रारंभ
              bird.sound := "Quack!"
        चिड़िया। ध्वनि: = नीम हकीम!
          ELSE
    अंत सेटसाउंड;
              bird.sound := "Tweet!"
अंत बतख।
          END
      END SetSound;
मॉड्यूल कोयल;
 
    आयात पक्षी;
      PROCEDURE MakeSound* (VAR b : Birds.Bird);
      BEGIN
    प्रकार
          Out.Ln;
        कोयल* = रिकॉर्ड (पक्षी। पक्षी) अंत;
          Out.String(b.sound);
          Out.Ln
    प्रक्रिया सेटसाउंड * (वार पक्षी: कोयल);
      END MakeSound;
    प्रारंभ
 
        चिड़िया की आवाज�:= कोयल�!
  BEGIN
    अंत सेटसाउंड;
      SetSound(c);
अंत कोयल।
      SetSound(d);
</वाक्यविन्यास हाइलाइट>
      SetSound(sb);
 
      MakeSound(c);
      MakeSound(d);
      MakeSound(sb)
  END Test.
==== <code>POINTER</code> ====


==== <code>WITH</code> बयान ====
MODULE PointerBirds;
<वाक्यविन्यास प्रकाश लैंग = घटकपास्कल>
      IMPORT Out;
मॉड्यूल टेस्ट;
 
    आयात बाहर, पक्षी, कोयल, बत्तख;
      TYPE
          BirdRec*  = RECORD
    प्रकार
              sound* : ARRAY 10 OF CHAR;
        समबर्ड* = रिकॉर्ड (पक्षी.पक्षी) END;
          END;
          DuckRec*  = RECORD (BirdRec) END;
     वीएआर
          CuckooRec* = RECORD (BirdRec) END;
         एसबी: समबर्ड;
 
         c : कोयल। कोयल;
          Bird  = POINTER TO BirdRec;
         डी: बत्तख। बत्तख;
          Cuckoo = POINTER TO CuckooRec;
          Duck  = POINTER TO DuckRec;
    प्रक्रिया सेटसाउंड * (वार पक्षी: पक्षी। पक्षी);
 
    प्रारंभ
     VAR
        पक्षी के साथ: कोयल। कोयल DO
         pb : Bird;
              चिड़िया की आवाज�:= कोयल=!
         pc : Cuckoo;
            | चिड़िया�: बत्तख। बत्तख डीओ
         pd : Duck;
              चिड़िया। ध्वनि: = नीम हकीम!
 
        अन्य
      PROCEDURE SetDuckSound* (bird : Duck);
              बर्ड.साउंड�:= कलरव!
      BEGIN
        अंत
          bird.sound := "Quack!"
    अंत सेटसाउंड;
      END SetDuckSound;
 
    प्रक्रिया MakeSound* (VAR b�: Birds.Bird);
      PROCEDURE SetCuckooSound* (bird : Cuckoo);
    प्रारंभ
      BEGIN
        आउट.लन;
          bird.sound := "Cuckoo!"
        आउट.स्ट्रिंग (बी.साउंड);
      END SetCuckooSound;
        आउट..
 
    अंत बनाओ ध्वनि;
      PROCEDURE SetSound* (bird : Bird);
      BEGIN
प्रारंभ
          WITH bird : Cuckoo DO
    सेटसाउंड (सी);
              SetCuckooSound(bird)
    सेटसाउंड (डी);
            | bird : Duck DO
    सेटसाउंड (एसबी);
              SetDuckSound(bird)
          ELSE
    मेकसाउंड (सी);
              bird.sound := "Tweet!"
    मेकसाउंड (डी);
          END
    मेकसाउंड (एसबी)
      END SetSound;
अंत परीक्षण।
 
</वाक्यविन्यास हाइलाइट>
  BEGIN
      NEW(pc);
      NEW(pd);
 
      SetCuckooSound(pc);
      SetDuckSound(pd);
 
      Out.Ln; Out.String(pc^.sound); Out.Ln;
      Out.Ln; Out.String(pd^.sound); Out.Ln;
 
      SetSound(pc);
      SetSound(pd);
 
      Out.Ln; Out.String(pc^.sound); Out.Ln;
      Out.Ln; Out.String(pd^.sound); Out.Ln;
 
  (* -------------------------------------- *)
  (* Pass dynamic type to procedure        *)
 
      pb := pd;
 
      SetDuckSound(pb(Duck));
      Out.Ln; Out.String(pb^.sound); Out.Ln;
 
      pb := pc;
 
      SetCuckooSound(pb(Cuckoo));
      Out.Ln; Out.String(pb^.sound); Out.Ln;
 
  (* -------------------------------------- *)
 
      SetSound(pb);
      Out.Ln; Out.String(pb^.sound); Out.Ln;
 
      pb := pd;
 
      SetSound(pb);
      Out.Ln; Out.String(pb^.sound); Out.Ln;
 
  (* -------------------------------------- *)
 
      NEW(pb);
 
      SetSound(pb);
      Out.Ln; Out.String(pb^.sound); Out.Ln


==== <code>POINTER</code> ====
  END PointerBirds.
<वाक्यविन्यास प्रकाश लैंग = घटकपास्कल>
मॉड्यूल सूचक पक्षी;
    बाहर आयात करें;
    प्रकार
        बर्डरेक* = रिकॉर्ड
            ध्वनि*�: सरणी 10 चार;
        अंत;
        DuckRec* = रिकॉर्ड (बर्डरैक) END;
        CuckooRec* = रिकॉर्ड (बर्डरैक) END;
        बर्ड = बर्डरेक के लिए सूचक;
        कोयल = कोयल के लिए सूचक;
        डक = पॉइंटर टू डक आरईसी;
    वीएआर
        पीबी: पक्षी;
        पीसी : कोयल;
        पीडी: बतख;
    प्रक्रिया सेट डक साउंड * (पक्षी: बतख);
    प्रारंभ
        चिड़िया। ध्वनि: = नीम हकीम!
    अंत सेट डक साउंड;
    प्रक्रिया सेटकोयलसाउंड* (पक्षी: कोयल);
    प्रारंभ
        चिड़िया की आवाज�:= कोयल�!
    END सेटCuckooSound;
    प्रक्रिया सेटसाउंड * (पक्षी: पक्षी);
    प्रारंभ
        पक्षी के साथ�: कोयल DO
              कुक्कूसाउंड (पक्षी) सेट करें
            | पक्षी�: बतख DO
              सेट डक साउंड (पक्षी)
        अन्य
              बर्ड.साउंड := कलरव!
        अंत
    अंत सेटसाउंड;
प्रारंभ
    नया (पीसी);
    नया (पीडी);
    सेट कुकूसाउंड (पीसी);
    सेट डक साउंड (पीडी);
    आउट.लन; आउट.स्ट्रिंग (पीसी ^ ध्वनि); आउट.लन;
    आउट.लन; आउट.स्ट्रिंग (पीडी ^ ध्वनि); आउट.लन;
    सेटसाउंड (पीसी);
    सेटसाउंड (पीडी);
    आउट.लन; आउट.स्ट्रिंग (पीसी ^ ध्वनि); आउट.लन;
    आउट.लन; आउट.स्ट्रिंग (पीडी ^ ध्वनि); आउट.लन;
(* ----------------------------------------------------- *)
(* प्रक्रिया के लिए गतिशील प्रकार पास करें *)
    पीबी: = पीडी;
    सेटडकसाउंड (पंजाब (बतख));
    आउट.लन; आउट.स्ट्रिंग (पीबी ^ ध्वनि); आउट.लन;
    पंजाब�:= पीसी;
    सेट कुकूसाउंड (पंजाब (कोयल));
    आउट.लन; आउट.स्ट्रिंग (पीबी ^ ध्वनि); आउट.लन;
(* ----------------------------------------------------- *)
    सेटसाउंड (पंजाब);
    आउट.लन; आउट.स्ट्रिंग (पीबी ^ ध्वनि); आउट.लन;
    पीबी: = पीडी;
    सेटसाउंड (पंजाब);
    आउट.लन; आउट.स्ट्रिंग (पीबी ^ ध्वनि); आउट.लन;
(* ----------------------------------------------------- *)
    नया (पंजाब);
    सेटसाउंड (पंजाब);
    आउट.लन; आउट.स्ट्रिंग (पीबी ^ ध्वनि); आउट.ल.
अंत सूचक पक्षी।
</वाक्यविन्यास हाइलाइट>


==== <code>IS</code> संचालिका ====
==== <code>IS</code> संचालिका ====
का उपयोग कर एक तीसरा दृष्टिकोण संभव है<code>IS</code> ऑपरेटर। यह एक रिलेशन ऑपरेटर है जिसकी समान प्राथमिकता बराबर (<code>=</code>), बड़ा (<code>></code>), आदि किन्तु जो गतिशील प्रकार का परीक्षण करता है। दो अन्य दृष्टिकोणों के विपरीत, चूंकि, यह प्रोग्रामर को उस उपप्रकार तक पहुंचने की अनुमति नहीं देता है जिसका पता लगाया गया है।
आईएस ऑपरेटर का उपयोग करके तीसरा दृष्टिकोण संभव है। यह एक रिलेशन ऑपरेटर है जिसकी समान प्राथमिकता यह बराबर (<code>=</code>), बड़ा (<code>></code>), आदि किन्तु जो गतिशील प्रकार का परीक्षण करता है। दो अन्य दृष्टिकोणों के विपरीत, चूंकि, यह प्रोग्रामर को उस उपप्रकार तक पहुंचने की अनुमति नहीं देता है जिसका पता लगाया गया है।


== सिंटेक्स ==
== सिंटेक्स ==
[[ALGOL]] → [[पास्कल (प्रोग्रामिंग भाषा)]] → मोडुला-2 → ओबेरॉन → घटक पास्कल भाषा परिवार का विकास सिंटैक्स (प्रोग्रामिंग भाषाओं) की जटिलता में कमी से चिह्नित है। संपूर्ण ओबेरॉन -2 भाषा का वर्णन किया गया है (मोसेनबॉक एंड विर्थ, मार्च 1995) विस्तारित बैकस-नौर रूप में केवल 33 व्याकरणिक प्रस्तुतियों का उपयोग करते हुए, जैसा कि नीचे दिखाया गया है।
[[ALGOL]] → [[पास्कल (प्रोग्रामिंग भाषा)]] → मोडुला-2 → ओबेरॉन → घटक पास्कल भाषा परिवार का विकास सिंटैक्स (प्रोग्रामिंग भाषाओं) की जटिलता में कमी से चिह्नित है। संपूर्ण ओबेरॉन -2 भाषा का वर्णन किया गया है (मोसेनबॉक एंड विर्थ, मार्च 1995) विस्तारित बैकस-नौर रूप में केवल 33 व्याकरणिक प्रस्तुतियों का उपयोग करते हुए, जैसा कि नीचे दिखाया गया है।
Module        = MODULE ident ";" [ImportList] DeclSeq [BEGIN StatementSeq] END ident ".".
ImportList    = IMPORT [ident ":="] ident {"," [ident ":="] ident} ";".
DeclSeq      = { CONST {ConstDecl ";" } | TYPE {TypeDecl ";"} | VAR {VarDecl ";"}} {ProcDecl ";" | ForwardDecl ";"}.
ConstDecl    = IdentDef "=" ConstExpr.
TypeDecl      = IdentDef "=" Type.
VarDecl      = IdentList ":" Type.
ProcDecl      = PROCEDURE [Receiver] IdentDef [FormalPars] ";" DeclSeq [BEGIN StatementSeq] END ident.
ForwardDecl  = PROCEDURE "^" [Receiver] IdentDef [FormalPars].
FormalPars    = "(" [FPSection {";" FPSection}] ")" [":" Qualident].
FPSection    = [VAR] ident {"," ident} ":" Type.
Receiver      = "(" [VAR] ident ":" ident ")".
Type          = Qualident
<nowiki> </nowiki>            <nowiki>|</nowiki> ARRAY [ConstExpr {"," ConstExpr}] OF Type
<nowiki> </nowiki>            <nowiki>|</nowiki> RECORD ["("Qualident")"] FieldList {";" FieldList} END
<nowiki> </nowiki>            <nowiki>|</nowiki> POINTER TO Type
<nowiki> </nowiki>            <nowiki>|</nowiki> PROCEDURE [FormalPars].
FieldList    = [IdentList ":" Type].
StatementSeq  = Statement {";" Statement}.
Statement    = [ Designator ":=" Expr
<nowiki> </nowiki>            <nowiki>|</nowiki> Designator ["(" [ExprList] ")"]
<nowiki> </nowiki>            <nowiki>|</nowiki> IF Expr THEN StatementSeq {ELSIF Expr THEN StatementSeq} [ELSE StatementSeq] END
<nowiki> </nowiki>            <nowiki>| CASE Expr OF Case {"|</nowiki>" Case} [ELSE StatementSeq] END
<nowiki> </nowiki>            <nowiki>|</nowiki> WHILE Expr DO StatementSeq END
<nowiki> </nowiki>            <nowiki>|</nowiki> REPEAT StatementSeq UNTIL Expr
<nowiki> </nowiki>            <nowiki>|</nowiki> FOR ident ":=" Expr TO Expr [BY ConstExpr] DO StatementSeq END
<nowiki> </nowiki>            <nowiki>|</nowiki> LOOP StatementSeq END
<nowiki> </nowiki>            <nowiki>| WITH Guard DO StatementSeq {"|</nowiki>" Guard DO StatementSeq} [ELSE StatementSeq] END
<nowiki> </nowiki>            <nowiki>|</nowiki> EXIT
<nowiki> </nowiki>            <nowiki>|</nowiki> RETURN [Expr]
<nowiki> </nowiki>    ].
Case          = [CaseLabels {"," CaseLabels} ":" StatementSeq].
CaseLabels    = ConstExpr [".." ConstExpr].
Guard        = Qualident ":" Qualident.
ConstExpr    = Expr.
Expr          = SimpleExpr [Relation SimpleExpr].
SimpleExpr    = ["+" | "-"] Term {AddOp Term}.
Term          = Factor {MulOp Factor}.
Factor        = Designator ["(" [ExprList] ")"] | number | character | string | NIL | Set | "(" Expr ")" | "~" Factor.
Set          = "{" [Element {"," Element}] "}".
Element      = Expr [".." Expr].
Relation      = "=" | "#" | "<" | "<=" | ">" | ">=" | IN | IS.
AddOp        = "+" | "-" | OR.
MulOp        = "*" | "/" | DIV | MOD | "&".
Designator    = Qualident {"." ident | "[" ExprList "]" | "^" | "(" Qualident ")"}.
ExprList      = Expr {"," Expr}.
IdentList    = IdentDef {"," IdentDef}.
Qualident    = [ident "."] ident.


<वाक्यविन्यास लैंग = ईबीएनएफ>
IdentDef     = ident ["*" | "-"].
मॉड्यूल = मॉड्यूल पहचान; [ImportList] DeclSeq [BEGIN StatementSeq] END पहचान। .
आयात सूची = आयात [पहचान: =] पहचान {, [पहचान: =] पहचान}; .
DeclSeq = { CONST {ConstDecl; } | प्रकार {टाइपडीसीएल; } | वार {VarDecl ; }} {ProcDecl; | आगेDecl ; }.
ConstDecl = IdentDef = ConstExpr.
TypeDecl = IdentDef = Type.
VarDecl = पहचान सूची: प्रकार।
ProcDecl = प्रक्रिया [रिसीवर] IdentDef [FormalPars]; DeclSeq [BEGIN StatementSeq] END पहचान।
ForwardDecl = PROCEDURE ^ [रिसीवर] IdentDef [FormalPars]।
FormalPars = ([FPSection { ; FPSection}] ) [ : योग्य]।
FPSection = [VAR] पहचान {, पहचान} : प्रकार।
रिसीवर = ([VAR] पहचान: पहचान)।
प्रकार = योग्य
              | ARRAY [ConstExpr { , ConstExpr}] प्रकार का
              | रिकॉर्ड [( योग्य ) ] फील्डलिस्ट { ; फील्डलिस्ट} अंत
              | टाइप करने के लिए सूचक
              | प्रक्रिया [औपचारिक पार]।
फील्डलिस्ट = [पहचान सूची: प्रकार]।
स्टेटमेंटसेक = स्टेटमेंट {; कथन}।
कथन = [Designator := Expr
              | डिज़ाइनर [( [ExprList] ) ]
              | IF Expr THEN StatementSeq {ELSIF Expr THEN StatementSeq} [ELSE StatementSeq] END
              | केस एक्सप्रेशन ऑफ केस { | Case} [ELSE StatementSeq] END
              | जबकि Expr DO StatementSeq END
              | रिपीट स्टेटमेंटSeq Expr तक
              | पहचान के लिए:= Expr से Expr [BY ConstExpr] DO StatementSeq END
              | पाश StatementSeq अंत
              | विद गार्ड डीओ स्टेटमेंटसेक { | गार्ड DO StatementSeq} [ELSE StatementSeq] END
              | बाहर निकलना
              | रिटर्न [एक्सप्र]
      ]।
केस = [केस लेबल { , केस लेबल} : स्टेटमेंटसेक]।
CaseLabels = ConstExpr [.. ConstExpr]।
पहरेदार = योग्य : योग्य।
कॉन्स्टएक्सपीआर = एक्सप्रेशन।
Expr = SimpleExpr [रिलेशन SimpleExpr]।
सिंपलएक्सप्र = [+ | - ] अवधि {AddOp अवधि}।
टर्म = फैक्टर {MulOp फैक्टर}।
कारक = डिज़ाइनर [([ExprList])] | संख्या | चरित्र | स्ट्रिंग | शून्य | सेट | (एक्सपीआर) | ~ कारक।
सेट = { [तत्व {, तत्व}]}।
तत्व = एक्सप्रेशन [.. एक्सप्र]।
संबंध = = | # | < | <= | > | >= | में | है।
एडऑप = + | - | या।
मुलोप = * | / | डीआईवी | एमओडी | और।
डिज़ाइनर = क्वालिडेंट {। पहचान | [एक्सप्रलिस्ट] | ^ | (योग्यता)}।
एक्सप्रलिस्ट = एक्सप्र {, एक्सप्र}।
IdentList = IdentDef {, IdentDef}।
पात्रा = [पहचान । ] पहचान।
पहचान डीफ = पहचान [* | - ]।
</वाक्यविन्यास हाइलाइट>


== कार्यान्वयन ==
== कार्यान्वयन ==
[[ईटीएच]] द्वारा अनुरक्षित ओबेरॉन-2 कंपाइलर्स में [[खिड़कियाँ]], [[लिनक्स]], [[सोलारिस (ऑपरेटिंग सिस्टम)]], मैकओएस के संस्करण सम्मलित हैं।
[[ईटीएच]] द्वारा बनाए गए अनुरक्षित ओबेरॉन-2 कंपाइलर्स में [[खिड़कियाँ|विंडोज]], [[लिनक्स]], [[सोलारिस (ऑपरेटिंग सिस्टम)]], मैकओएस के संस्करण में सम्मलित होते हैं।


[http://spivey.oriel.ox.ac.uk/corner/Oxford_Oberon-2_compiler ऑक्सफोर्ड ओबेरॉन-2 कंपाइलर] देशी मशीन कोड के लिए संकलित करता है और विंडोज, लिनक्स और [[मैक ओएस]] एक्स पर एक जेआईटी का उपयोग कर सकता है। इसे बनाया गया है/ [[माइकल स्पाइवी]] द्वारा अनुरक्षित और कीको वर्चुअल मशीन का उपयोग करता है।<ref name="keiko_spec">डॉ. माइकल स्पाइवी।
[http://spivey.oriel.ox.ac.uk/corner/Oxford_Oberon-2_compiler ऑक्सफोर्ड ओबेरॉन-2 कंपाइलर] देशी मशीन कोड के लिए संकलित करता है और विंडोज, लिनक्स और [[मैक ओएस]] एक्स पर एक जेआईटी का उपयोग कर सकता है। इसे [[माइकल स्पाइवी]] द्वारा बनाया जाता है  अनुरक्षित और कीको वर्चुअल मशीन का उपयोग करता है।<ref name="keiko_spec">डॉ. माइकल स्पाइवी।
[https://web.archive.org/web/20160304070606/https://spivey.oriel.ox.ac.uk/corner/Specification_of_Keiko_(संकलक) कीको की विशिष्टता]।
[https://web.archive.org/web/20160304070606/https://spivey.oriel.ox.ac.uk/corner/Specification_of_Keiko_(संकलक) कीको की विशिष्टता]।
</रेफरी><ref name="keiko machine" >
</ref><ref name="keiko machine" >
Dr. Michael Spivey.
Dr. Michael Spivey.
[https://spivey.oriel.ox.ac.uk/corner/Design_overview_for_OBC "Design overview for OBC: The Keiko Abstract Machine"].
[https://spivey.oriel.ox.ac.uk/corner/Design_overview_for_OBC "Design overview for OBC: The Keiko Abstract Machine"].
Line 337: Line 321:
"The Oxford Oberon--2 compiler translates source programs into code for a stack-based abstract machine... the Keiko machine"
"The Oxford Oberon--2 compiler translates source programs into code for a stack-based abstract machine... the Keiko machine"
</ref>
</ref>
मोसेनबॉक और विर्थ संदर्भ में एक के आधार पर, मैनचेस्टर विश्वविद्यालय, यूके के स्टीफन जे बेवन द्वारा ओबेरॉन -2 [[लेक्स (सॉफ्टवेयर)]] स्कैनर और वाईएसीसी [[पार्सर]] है। यह संस्करण 1.4 पर है।


[[देशी ओबेरॉन]] नामक एक रिलीज़ है जिसमें एक ऑपरेटिंग सिस्टम सम्मलित है, और सीधे पीसी क्लास हार्डवेयर पर बूट हो सकता है।
मोसेनबॉक और विर्थ संदर्भ में एक के आधार पर, मैनचेस्टर विश्वविद्यालय, यूके के स्टीफन जे बेवन द्वारा ओबेरॉन -2 [[लेक्स (सॉफ्टवेयर)]] स्कैनर और वाईएसीसी [[पार्सर]] है। यह संस्करण 1.4 पर होते है।
 
[[देशी ओबेरॉन]] नामक एक रिलीज़ है जिसमें एक ऑपरेटिंग सिस्टम सम्मलित होते है, और सीधे पीसी क्लास हार्डवेयर पर बूट हो सकता है।


ETHZ में कुछ मामूली .NET-संबंधित एक्सटेंशन के साथ ओबेरॉन का .NET फ्रेमवर्क|.NET कार्यान्वयन भी विकसित किया गया है।
ETHZ में कुछ साधारणतयः  .NET-संबंधित एक्सटेंशन के साथ ओबेरॉन का .NET फ्रेमवर्क या .NET का कार्यान्वयन भी विकसित किया गया है।


[http://www.fim.uni-linz.ac.at/pow/Pow.htm प्रोग्रामर का खुला कार्यक्षेत्र] (पाउ!)<ref>{{Cite magazine |last=Collingbourne |first=H. |date=February 2000 |title=What Pascal's inventor did next |magazine=[[PC Plus]] |issue=160}}</ref> एक बहुत ही सरल एकीकृत विकास वातावरण है, जो संपादक, लिंकर और ओबेरॉन -2 संकलक के साथ प्रदान किया जाता है। यह Microsoft Windows निष्पादनयोग्य के लिए संकलित है। पूर्ण स्रोत कोड प्रदान किया गया है; कंपाइलर ओबेरॉन -2 में लिखा गया है।
[http://www.fim.uni-linz.ac.at/pow/Pow.htm प्रोग्रामर का खुला कार्यक्षेत्र] (पाउ!)<ref>{{Cite magazine |last=Collingbourne |first=H. |date=February 2000 |title=What Pascal's inventor did next |magazine=[[PC Plus]] |issue=160}}</ref> एक बहुत ही सरल एकीकृत विकास वातावरण है, जो संपादक, लिंकर और ओबेरॉन -2 संकलक के साथ प्रदान किया जाता है। यह माइक्रोसाॅफ्ट विंडोज निष्पादनयोग्य के लिए संकलित है। पूर्ण स्रोत कोड प्रदान किया गया है, जिसे मुख्य रूप से कंपाइलर ओबेरॉन -2 में लिखा गया है।


[https://web.archive.org/web/20110720112830/http://www.uni-vologda.ac.ru/JOB/ Java to Oberon Compiler] (JOB) रूस के वोलोग्दा विश्वविद्यालय में लिखा गया था। यह जावा क्लास फाइल्स ([[बाईटकोड]]) के रूप में ऑब्जेक्ट कोड तैयार करता है। कुछ जॉब-विशिष्ट वर्ग प्रदान किए जाते हैं जो जावा संगत हैं, किन्तु जो अधिक ओबेरॉन-जैसे घटक पदानुक्रम का उपयोग करते हैं।
[https://web.archive.org/web/20110720112830/http://www.uni-vologda.ac.ru/JOB/ जावा से ओबेराॅन के कंपाइलरr] (JOB) को रूस के वोलोग्दा विश्वविद्यालय में लिखा गया था। यह जावा क्लास फाइल्स ([[बाईटकोड]]) के रूप में ऑब्जेक्ट कोड तैयार करता है। कुछ जॉब-विशिष्ट वर्ग प्रदान किए जाते हैं जो जावा संगत हैं, किन्तु जो अधिक ओबेरॉन-जैसे घटक पदानुक्रम का उपयोग करते हैं।


[http://sourceforge.net/projects/ooc ऑप्टिमाइज़िंग ओबेरॉन-2 कंपाइलर] कार्यक्रम बनाने के लिए [[जीएनयू संकलक संग्रह]] (GCC) टूलचेन का उपयोग करके C में संकलित करता है।
[http://sourceforge.net/projects/ooc ऑप्टिमाइज़िंग ओबेरॉन-2 कंपाइलर] कार्यक्रम जनरेशन बनाने के लिए [[जीएनयू संकलक संग्रह]] (GCC) टूलचेन का उपयोग करके C में संकलित करता है।


[http://www.ralphsommerer.com/obn.htm ओबेरॉन स्क्रिप्ट] एक कंपाइलर है जो संपूर्ण ओबेरॉन भाषा का [[जावास्क्रिप्ट]] में अनुवाद करता है। कंपाइलर जावास्क्रिप्ट में लिखा गया है और इस प्रकार ओबेरॉन में लिखी गई स्क्रिप्ट को प्रोसेस करने के लिए वेब पेजों से बुलाया जा सकता है।
[http://www.ralphsommerer.com/obn.htm ओबेरॉन स्क्रिप्ट] एक कंपाइलर है जो संपूर्ण ओबेरॉन भाषा का [[जावास्क्रिप्ट]] में अनुवाद करता है। इसका कंपाइलर जावास्क्रिप्ट में लिखा गया है और इस प्रकार ओबेरॉन में लिखी गई स्क्रिप्ट को प्रोसेस करने के लिए वेब पेजों से काॅल किया जा सकता है।


[https://web.archive.org/web/20110820112230/http://www.excelsior-usa.com/xds.html XDS Modula2/Oberon2] एक्सेलसियर एलएलसी, नोवोसिबिर्स्क, रूस द्वारा एक विकास प्रणाली है। इसमें इंटेल पेंटियम के लिए एक ऑप्टिमाइज़िंग कंपाइलर या [[क्रॉस-प्लेटफ़ॉर्म सॉफ़्टवेयर]] डेवलपमेंट के लिए वाया-सी ट्रांसलेटर सम्मलित है। विंडोज और लिनक्स के लिए उपलब्ध है। कंपाइलर ओबेरॉन -2 में लिखा गया है और खुद को कंपाइल करता है।
[https://web.archive.org/web/20110820112230/http://www.excelsior-usa.com/xds.html XDS मोडुला2/ओबेरान2] एक्सेलसियर एलएलसी, नोवोसिबिर्स्क, रूस द्वारा एक विकास प्रणाली होती है। इसमें इंटेल पेंटियम के लिए एक ऑप्टिमाइज़िंग कंपाइलर या [[क्रॉस-प्लेटफ़ॉर्म सॉफ़्टवेयर]] डेवलपमेंट के लिए वाया-सी ट्रांसलेटर सम्मलित है। विंडोज और लिनक्स के लिए उपलब्ध होते है। कंपाइलर ओबेरॉन -2 में लिखा गया है और खुद को कंपाइल करता है।


[http://sourceforge.net/projects/oberonrevival/files/ ओबेरॉन रिवाइवल] ओबेरॉन 2 और कंपोनेंट पास्कल ([[ब्लैकबॉक्स घटक बिल्डर]]) को लिनक्स और विन32 में लाने की एक परियोजना है। ब्लैकबॉक्स का लिनक्स पोर्ट पहले अनुपलब्ध था और यह मूल रूप से केवल [[माइक्रोसॉफ़्ट विंडोज़]] पर चलता था।
[http://sourceforge.net/projects/oberonrevival/files/ ओबेरॉन रिवाइवल] ओबेरॉन 2 और कंपोनेंट पास्कल ([[ब्लैकबॉक्स घटक बिल्डर]]) को लिनक्स और विन32 में लाने की एक परियोजना होती है। ब्लैकबॉक्स का लिनक्स पोर्ट पहले अनुपलब्ध किया जाता था और यह मूल रूप से केवल [[माइक्रोसॉफ़्ट विंडोज़]] पर चलता था।


XOberon [[PowerPC]] के लिए एक [[रीयल-टाइम ऑपरेटिंग सिस्टम]] है, जिसे ओबेरॉन-2 में लिखा गया है।
Xओबेरान [[PowerPC|पावर पीसी]] के लिए एक [[रीयल-टाइम ऑपरेटिंग सिस्टम]] है, जिसे ओबेरॉन-2 में लिखा गया है।


पोर्टेबल ओबेरॉन-2 कंपाइलर (ओपी2) को [[ओबेरॉन सिस्टम]] को व्यावसायिक रूप से उपलब्ध प्लेटफॉर्म पर पोर्ट करने के लिए विकसित किया गया था।<ref name="OP2">{{cite thesis |url=https://www.research-collection.ethz.ch/handle/20.500.11850/141604 |title=Separate Compilation and Module Extension |last=Crelier |first=Régis |year=1994 |publisher=ETH Zurich |doi=10.3929/ethz-a-000945227 |hdl=20.500.11850/141604 |access-date=18 November 2018|type=Doctoral Thesis }}</ref>
पोर्टेबल ओबेरॉन-2 कंपाइलर (ओपी2) को [[ओबेरॉन सिस्टम]] को व्यावसायिक रूप से उपलब्ध प्लेटफॉर्म पर पोर्ट करने के लिए विकसित किया गया था।<ref name="OP2">{{cite thesis |url=https://www.research-collection.ethz.ch/handle/20.500.11850/141604 |title=Separate Compilation and Module Extension |last=Crelier |first=Régis |year=1994 |publisher=ETH Zurich |doi=10.3929/ethz-a-000945227 |hdl=20.500.11850/141604 |access-date=18 November 2018|type=Doctoral Thesis }}</ref>
== कीको बायटेकोड ==
== कीको बायटेकोड ==


ओबेरॉन-2 कीको वर्चुअल मशीन को निशाना बना सकता है।<ref name="keiko_spec" /><ref name="keiko machine" />उदाहरण के लिए, कुछ अन्य भाषा संकलकों की तरह ([[ओ-कोड]], [[पी-कोड]], आदि देखें),
ओबेरॉन-2 कीको वर्चुअल मशीन को निशाना बना सकता है।<ref name="keiko_spec" /><ref name="keiko machine" /> उदाहरण के लिए, कुछ अन्य भाषा संकलकों की तरह उपयोग में लाया जाता हैं इसके लिए [[ओ-कोड]], [[पी-कोड]], आदि देखें।
[http://spivey.oriel.ox.ac.uk/corner/Oxford_Oberon-2_compiler ऑक्सफोर्ड ओबेरॉन-2 कंपाइलर] पहले एक मध्यवर्ती बाइटकोड (केइको बाइटकोड) में संकलित करता है जिसे बाइट-कोड दुभाषिया के साथ व्याख्या किया जा सकता है या केवल उपयोग किया जा सकता है -इन-टाइम संकलन।
 
[http://spivey.oriel.ox.ac.uk/corner/Oxford_Oberon-2_compiler ऑक्सफोर्ड ओबेरॉन-2 कंपाइलर] पहले मध्यवर्ती बाइटकोड (केइको बाइटकोड) में संकलित करता है जिसे बाइट-कोड दुभाषिया के साथ व्याख्या किया जा सके या केवल -इन-टाइम कंपाइल के लिए उपयोग किया जा सके।


== यह भी देखें ==
== यह भी देखें ==
Line 371: Line 369:
{{Reflist}}
{{Reflist}}


 
=== ओबेरॉन और ओबेरॉन -2 का विकास ===
=== ओबेरॉन और ओबेरॉन -2 === का विकास
* [https://web.archive.org/web/20130529020132/http://www.ethoberon.ethz.ch/genealogy.html ओबेराॅन Language Genealogy Tree] [[ETHZ]] में अनुरक्षित
* [https://web.archive.org/web/20130529020132/http://www.ethoberon.ethz.ch/genealogy.html Oberon Language Genealogy Tree] [[ETHZ]] में अनुरक्षित
* दूसरा अंतर्राष्ट्रीय मोडुला-2 सम्मेलन, सितंबर 1991।
* दूसरा अंतर्राष्ट्रीय मोडुला-2 सम्मेलन, सितंबर 1991।


Line 392: Line 389:


== बाहरी संबंध ==
== बाहरी संबंध ==
* {{Official website|www.ethoberon.ethz.ch}}, ETH Zürich
* {{Official website|www.ethoberon.ethz.ch}}, ईटीएच Zürich
* [https://web.archive.org/web/20050221100629/http://www.oberon.ethz.ch/ Oberon Reference page at ETH Zürich]
* [https://web.archive.org/web/20050221100629/http://www.oberon.ethz.ch/ ओबेराॅन Reference page at ईटीएच Zürich]
* [http://www.ssw.uni-linz.ac.at/Research/Projects/Oberon.html Oberon at SSW, Linz]
* [http://www.ssw.uni-linz.ac.at/Research/Projects/Oberon.html ओबेराॅन at SSW, Linz]
* [http://www.zinnamturm.eu/downloadsOS.htm#Pow Pow Tutorial (in Romanian language), by Dan Popa]
* [http://www.zinnamturm.eu/downloadsOS.htm#Pow Pow Tutorial (in Romanian language), by Dan Popa]
* ftp://ftp.inf.ethz.ch/pub/Oberon/
* [ftp://ftp.inf.ethz.ch/pub/Oberon/ ftp://ftp.inf.ethz.ch/pub/ओबेराॅन/]
* [http://www.ssw.uni-linz.ac.at/Research/Projects/Reflection/Reflection99/paper.ps The Oberon-2 Reflection Model and its Applications]
* [http://www.ssw.uni-linz.ac.at/Research/Projects/Reflection/Reflection99/paper.ps The ओबेराॅन-2 Reflection Model and its Applications]


{{Modula, Oberon}}
{{Modula, Oberon}}
{{Wirth}}
{{Wirth}}
[[Category: मॉड्यूला प्रोग्रामिंग भाषा परिवार]] [[Category: वस्तु-उन्मुख प्रोग्रामिंग भाषाएँ]] [[Category: ओबेरॉन प्रोग्रामिंग भाषा परिवार]] [[Category: 1991 में बनाई गई प्रोग्रामिंग लैंग्वेज]]


[[Category: Machine Translated Page]]
[[Category:1991 में बनाई गई प्रोग्रामिंग लैंग्वेज]]
[[Category:Citation Style 1 templates|M]]
[[Category:Collapse templates]]
[[Category:Created On 18/02/2023]]
[[Category:Created On 18/02/2023]]
[[Category:Machine Translated Page]]
[[Category:Navigational boxes| ]]
[[Category:Navigational boxes without horizontal lists]]
[[Category:Official website not in Wikidata]]
[[Category:Pages with reference errors]]
[[Category:Pages with script errors]]
[[Category:Sidebars with styles needing conversion]]
[[Category:Template documentation pages|Documentation/doc]]
[[Category:Templates Vigyan Ready]]
[[Category:Templates based on the Citation/CS1 Lua module]]
[[Category:Templates generating COinS|Cite magazine]]
[[Category:Templates generating microformats]]
[[Category:Templates that are not mobile friendly]]
[[Category:Templates using TemplateData]]
[[Category:Wikipedia fully protected templates|Cite magazine]]
[[Category:Wikipedia metatemplates]]
[[Category:ओबेरॉन प्रोग्रामिंग भाषा परिवार]]
[[Category:मॉड्यूला प्रोग्रामिंग भाषा परिवार]]
[[Category:वस्तु-उन्मुख प्रोग्रामिंग भाषाएँ]]

Latest revision as of 16:19, 28 February 2023

Oberon-2
Oberon programming language logo.svg
ParadigmsImperative, structured, modular, object-oriented
परिवारWirth Oberon
द्वारा डिज़ाइन किया गयाNiklaus Wirth
Hanspeter Mössenböck
DeveloperETH Zurich
पहली प्रस्तुति1991; 33 years ago (1991)
टाइपिंग अनुशासनStrong, hybrid (static and dynamic)
स्कोपLexical
प्लेटफॉर्मCeres (NS32032), IA-32, x86-64
ओएसWindows, Linux, Solaris, macOS
वेबसाइटwww.ethoberon.ethz.ch
Influenced by
Oberon, Modula-2, Object Oberon
Influenced
Oberon-07, Zonnon, Active Oberon, Component Pascal, Go, Nim

ओबेरॉन -2 मूल ओबेरॉन (प्रोग्रामिंग लैंग्वेज) प्रोग्रामिंग भाषा का ऐसा विस्तार है जो सीमित प्रतिबिंब (कंप्यूटर विज्ञान) और ऑब्जेक्ट ओरिएंटेड प्रोग्रामिंग सुविधाओं को जोड़ता है, पॉइंटर बेस प्रकार के रूप में ऐरे डेटा संरचना को खोलता है, केवल-पढ़ने के लिए फ़ील्ड निर्यात करता है,और मॉड्यूल-2 से फॉर लूप को पुन: प्रस्तुत करता है।

इसे 1991 में ईटीएच (ETH) ज्यूरिख में निक्लौस विर्थ और हैन्सपीटर मौसेनबाॅक द्वारा विकसित किया गया था, जो अब ऑस्ट्रिया के लिंज़ विश्वविद्यालय के इंस्टीट्यूट फाॅर सिस्टम साॅफ्टवेयर (SSW) में हैं। ओबेरॉन -2 ओबेरॉन का सुपरसेट है, इसके साथ पूर्ण रूप से संयोजित है,और ऑब्जेक्ट ओबेरॉन का नवीन स्वरूप था।

ओबेरॉन -2 को ओबेरॉन से इंटरफेस या mixin के बिना सीमित प्रतिबिंब और एकल वंशानुक्रम (वस्तु-उन्मुख प्रोग्रामिंग) से ("टाइप एक्सटेंशन") विरासत में मिला है, किन्तु कुशल आभासी विधियों (कंप्यूटर प्रोग्रामिंग) को ("टाइप बाउंड प्रोसीजर") से जोड़ा गया है। सी ++ - शैली आभासी विधियों के टेबल का उपयोग करके रनटाइम (कार्यक्रम जीवनचक्र चरण) पर विधिवत कॉल करके हल किया गया था।

स्मॉलटाक जैसी पूरी तरह से वस्तु-उन्मुख भाषाओं की तुलना में, ओबेरॉन -2 में, मौलिक डेटा प्रकार और कक्षाएं ऑब्जेक्ट (कंप्यूटर विज्ञान) में नहीं होते हैं,कई ऑपरेशन विधि नहीं होते हैं,और ना कोई संदेश पासिंग होते है (इसे प्रतिबिंब द्वारा और संदेश विस्तार के माध्यम से कुछ हद तक अनुकरण किया जा सकता है) , जैसा कि ईटीएच ओबेरॉन में प्रदर्शित किया गया है,और बहुरूपता (कंप्यूटर विज्ञान) एक सामान्य वर्ग के उप-वर्गों तक सीमित होते है (पायथन (प्रोग्रामिंग भाषा) में कोई बतख टाइपिंग नहीं होती है),[1] और जावा (प्रोग्रामिंग भाषा) के रूप में इंटरफेस को परिभाषित करना संभव नहीं होता है)।ओबेरॉन -2 वस्तु या वर्ग स्तर पर एनकैप्सुलेशन (कंप्यूटर प्रोग्रामिंग) का समर्थन नहीं करता है, किन्तु इस उद्देश्य के लिए मॉड्यूल का उपयोग किया जा सकता है।

ओबेरॉन -2 में प्रतिबिंब मेटाओब्जेक्ट का उपयोग नहीं करता है, किन्तु केवल टाइप डिस्क्रिप्टर संकलक से निष्पादन योग्य बायनेरिज़ में पढ़ता है,और मॉड्यूल में उजागर होता है जो प्रकार और प्रक्रियाओं को परिभाषित करता है। यदि इन संरचनाओं का प्रारूप भाषा स्तर पर उजागर किया जाता है (उदाहरण के लिए ईटीएच ओबेरॉन के स्थितियों में), पुस्तकालय (कंप्यूटिंग) स्तर पर प्रतिबिंब लागू किया जा सकता है। इस प्रकार भाषा कोड को बदले बिना इसे लगभग पूरी तरह से पुस्तकालय स्तर पर लागू किया जा सकता है। यह मुख्य रूप से, ईटीएच ओबेरॉन भाषा-स्तर और पुस्तकालय-स्तर की प्रतिबिंब क्षमताओं का बड़े पैमाने पर उपयोग करता है।

ओबेरॉन -2 जावा के समान कचरा संग्रह (कंप्यूटर विज्ञान) के लिए अंतर्निहित रनटाइम समर्थन प्रदान करता है सीमा और सरणी सूचकांक जांच आदि करता है, जो संभावित स्टैक और सरणी सीमा ओवरराइटिंग समस्याओं और मैनुअल मेमोरी प्रबंधन विवादों को भाषा सी और सी ++ में निहित करता है। मॉड्यूल आर्किटेक्चर के माध्यम से प्रतीक फ़ाइलों और एड्रेस का उपयोग करके अलग तरह से कंपाइल करके इसका तेजी से पुनर्निर्माण सुनिश्चित करता है क्योंकि परिवर्तन करने के पश्चात इंटरफेस वाले मॉड्यूल को फिर से कंपाइल करने की आवश्यकता होती है।

भाषा घटक पास्कल[2] ओबेरॉन-2 का परिशोधन (सुपरसेट) है।

उदाहरण कोड

निम्नलिखित ओबेरॉन -2 कोड एक साधारण बाइनरी ट्री को लागू करता है:

MODULE Trees;

TYPE
    Tree* = POINTER TO Node;
    Node* = RECORD
        name-: POINTER TO ARRAY OF CHAR;
        left, right: Tree
    END;

PROCEDURE (t: Tree) Insert* (name: ARRAY OF CHAR);
    VAR p, father: Tree;
BEGIN p := t;
    REPEAT father := p;
        IF name = p.name^ THEN RETURN END;
        IF name < p.name^ THEN p := p.left ELSE p := p.right END
    UNTIL p = NIL;
    NEW(p); p.left := NIL; p.right := NIL; NEW(p.name, LEN(name)+1); COPY(name, p.name^);
    IF name < father.name^ THEN father.left := p ELSE father.right := p END
END Insert;

PROCEDURE (t: Tree) Search* (name: ARRAY OF CHAR): Tree;
    VAR p: Tree;
BEGIN p := t;
    WHILE (p # NIL) & (name # p.name^) DO
        IF name < p.name^ THEN p := p.left ELSE p := p.right END
    END;
    RETURN p
END Search;

PROCEDURE NewTree* (): Tree;
    VAR t: Tree;
BEGIN NEW(t); NEW(t.name, 1); t.name[0] := 0X; t.left := NIL; t.right := NIL; RETURN t
END NewTree;

END Trees.

ओबेरॉन -2 एक्सटेंशन ओबेरॉन के लिए[3]

टाइप-बाउंड प्रक्रियाएं

प्रक्रियाओं को एक रिकॉर्ड (या सूचक) प्रकार के लिए बाध्य किया जा सकता है। वे वस्तु-उन्मुख शब्दावली में उदाहरण के विधियों के बराबर होते हैं।

केवल-पढ़ने के लिए निर्यात

निर्यात किए गए चर और रिकॉर्ड फ़ील्ड का उपयोग केवल-पढ़ने के लिए उपयोग तक सीमित किया जा सकता है। यह - दृश्यता ध्वज के साथ दिखाया गया है।

खुली सरणी

सरणी में जिसे पहले केवल औपचारिक पैरामीटर प्रकार के रूप में घोषित किया जा सकता था,उन्हें अब सूचक आधार प्रकार के रूप में घोषित किया जा सकता है।

कथन के लिए

ओबेरॉन में पास्कल और मोडुला-2 का फॉर स्टेटमेंट में लागू नहीं किया गया था। इसे ओबेरॉन-2 में फिर से सम्मलित किया गया है।

रनटाइम प्रकार की जाँच

पहला, सबसे पारंपरिक, दृष्टिकोण प्रकार बाध्यकारी प्रणाली पर भरोसा करना है। दूसरा दृष्टिकोण विथ स्टेटमेंट का उपयोग करना है, जो इसके वैरिएबल के लिए गतिशील उपप्रकार को सीधे जांचने की अनुमति देता है। दोनों ही स्थितियों में, इस प्रकार की पहचान हो जाने के पश्चात प्रोग्रामर इसके प्रकार के लिए उपयुक्त किसी भी प्रकार की बाध्य प्रक्रियाओं या चर का उपयोग करता है। इन दृष्टिकोणों के उदाहरण नीचे दिखाए गए हैं।

ध्यान दें कि ओबेरॉन-2 में प्रयुक्त विथ स्टेटमेंट का फॉर्म पास्कल और मोडुला-2 विथ स्टेटमेंट से संबंधित नहीं है। रिकॉर्ड फ़ील्ड तक पहुंच को संक्षिप्त करने की यह विधि ओबेरॉन या ओबेरॉन -2 में लागू नहीं किया गया है।

बाइंडिंग टाइप करें

 MODULE Birds;
     TYPE
         Bird* = RECORD
             sound* : ARRAY 10 OF CHAR;
         END;
 END Birds.
 
 MODULE Ducks;
     IMPORT Birds;
 
     TYPE
         Duck* = RECORD (Birds.Bird) END;
 
     PROCEDURE SetSound* (VAR bird : Duck);
     BEGIN
         bird.sound := "Quack!" 
     END SetSound;
 END Ducks.
 
 MODULE Cuckoos;
     IMPORT Birds;
 
     TYPE
         Cuckoo* = RECORD (Birds.Bird) END;
 
     PROCEDURE SetSound* (VAR bird : Cuckoo);
     BEGIN
         bird.sound := "Cuckoo!"
     END SetSound;
END Cuckoos.

WITH कथन

MODULE Test;
     IMPORT Out, Birds, Cuckoos, Ducks;
 
     TYPE
         SomeBird* = RECORD (Birds.Bird) END;
 
     VAR
         sb : SomeBird;
         c  : Cuckoos.Cuckoo;
         d  : Ducks.Duck;
 
     PROCEDURE SetSound* (VAR bird : Birds.Bird);
     BEGIN
         WITH bird : Cuckoos.Cuckoo DO
              bird.sound := "Cuckoo!"
            | bird : Ducks.Duck DO
              bird.sound := "Quack!"
         ELSE
              bird.sound := "Tweet!"
         END
     END SetSound;
 
     PROCEDURE MakeSound* (VAR b : Birds.Bird);
     BEGIN
         Out.Ln;
         Out.String(b.sound);
         Out.Ln
     END MakeSound;
 
 BEGIN
     SetSound(c);
     SetSound(d);
     SetSound(sb);
 
     MakeSound(c);
     MakeSound(d);
     MakeSound(sb)
 END Test.

POINTER

MODULE PointerBirds;
     IMPORT Out;
 
     TYPE
         BirdRec*   = RECORD
             sound* : ARRAY 10 OF CHAR;
         END;
         DuckRec*   = RECORD (BirdRec) END;
         CuckooRec* = RECORD (BirdRec) END;
 
         Bird   = POINTER TO BirdRec;
         Cuckoo = POINTER TO CuckooRec;
         Duck   = POINTER TO DuckRec;
 
    VAR
        pb : Bird;
        pc : Cuckoo;
        pd : Duck;
 
     PROCEDURE SetDuckSound* (bird : Duck);
     BEGIN
         bird.sound := "Quack!"
     END SetDuckSound;
 
     PROCEDURE SetCuckooSound* (bird : Cuckoo);
     BEGIN
         bird.sound := "Cuckoo!"
     END SetCuckooSound;
 
     PROCEDURE SetSound* (bird : Bird);
     BEGIN
         WITH bird : Cuckoo DO
              SetCuckooSound(bird)
            | bird : Duck DO
              SetDuckSound(bird)
         ELSE
              bird.sound := "Tweet!"
         END
     END SetSound;
 
 BEGIN
     NEW(pc);
     NEW(pd);
 
     SetCuckooSound(pc);
     SetDuckSound(pd);
 
     Out.Ln; Out.String(pc^.sound); Out.Ln;
     Out.Ln; Out.String(pd^.sound); Out.Ln;
 
     SetSound(pc);
     SetSound(pd);
 
     Out.Ln; Out.String(pc^.sound); Out.Ln;
     Out.Ln; Out.String(pd^.sound); Out.Ln;
 
 (* -------------------------------------- *)
 (* Pass dynamic type to procedure         *)
 
     pb := pd;
 
     SetDuckSound(pb(Duck));
     Out.Ln; Out.String(pb^.sound); Out.Ln;
 
     pb := pc;
 
     SetCuckooSound(pb(Cuckoo));
     Out.Ln; Out.String(pb^.sound); Out.Ln;
 
 (* -------------------------------------- *)
 
     SetSound(pb);
     Out.Ln; Out.String(pb^.sound); Out.Ln;
 
     pb := pd;
 
     SetSound(pb);
     Out.Ln; Out.String(pb^.sound); Out.Ln;
 
 (* -------------------------------------- *)
 
     NEW(pb);
 
     SetSound(pb);
     Out.Ln; Out.String(pb^.sound); Out.Ln
 END PointerBirds.

IS संचालिका

आईएस ऑपरेटर का उपयोग करके तीसरा दृष्टिकोण संभव है। यह एक रिलेशन ऑपरेटर है जिसकी समान प्राथमिकता यह बराबर (=), बड़ा (>), आदि किन्तु जो गतिशील प्रकार का परीक्षण करता है। दो अन्य दृष्टिकोणों के विपरीत, चूंकि, यह प्रोग्रामर को उस उपप्रकार तक पहुंचने की अनुमति नहीं देता है जिसका पता लगाया गया है।

सिंटेक्स

ALGOLपास्कल (प्रोग्रामिंग भाषा) → मोडुला-2 → ओबेरॉन → घटक पास्कल भाषा परिवार का विकास सिंटैक्स (प्रोग्रामिंग भाषाओं) की जटिलता में कमी से चिह्नित है। संपूर्ण ओबेरॉन -2 भाषा का वर्णन किया गया है (मोसेनबॉक एंड विर्थ, मार्च 1995) विस्तारित बैकस-नौर रूप में केवल 33 व्याकरणिक प्रस्तुतियों का उपयोग करते हुए, जैसा कि नीचे दिखाया गया है।

Module        = MODULE ident ";" [ImportList] DeclSeq [BEGIN StatementSeq] END ident ".".
ImportList    = IMPORT [ident ":="] ident {"," [ident ":="] ident} ";".
DeclSeq       = { CONST {ConstDecl ";" } | TYPE {TypeDecl ";"} | VAR {VarDecl ";"}} {ProcDecl ";" | ForwardDecl ";"}.
ConstDecl     = IdentDef "=" ConstExpr.
TypeDecl      = IdentDef "=" Type.
VarDecl       = IdentList ":" Type.
ProcDecl      = PROCEDURE [Receiver] IdentDef [FormalPars] ";" DeclSeq [BEGIN StatementSeq] END ident.
ForwardDecl   = PROCEDURE "^" [Receiver] IdentDef [FormalPars].
FormalPars    = "(" [FPSection {";" FPSection}] ")" [":" Qualident].
FPSection     = [VAR] ident {"," ident} ":" Type.
Receiver      = "(" [VAR] ident ":" ident ")".
Type          = Qualident
              | ARRAY [ConstExpr {"," ConstExpr}] OF Type
              | RECORD ["("Qualident")"] FieldList {";" FieldList} END
              | POINTER TO Type
              | PROCEDURE [FormalPars].
FieldList     = [IdentList ":" Type].
StatementSeq  = Statement {";" Statement}.
Statement     = [ Designator ":=" Expr
              | Designator ["(" [ExprList] ")"]
              | IF Expr THEN StatementSeq {ELSIF Expr THEN StatementSeq} [ELSE StatementSeq] END
              | CASE Expr OF Case {"|" Case} [ELSE StatementSeq] END
              | WHILE Expr DO StatementSeq END
              | REPEAT StatementSeq UNTIL Expr
              | FOR ident ":=" Expr TO Expr [BY ConstExpr] DO StatementSeq END
              | LOOP StatementSeq END
              | WITH Guard DO StatementSeq {"|" Guard DO StatementSeq} [ELSE StatementSeq] END
              | EXIT
              | RETURN [Expr]
      ].	
Case          = [CaseLabels {"," CaseLabels} ":" StatementSeq].
CaseLabels    = ConstExpr [".." ConstExpr].
Guard         = Qualident ":" Qualident.
ConstExpr     = Expr.
Expr          = SimpleExpr [Relation SimpleExpr].
SimpleExpr    = ["+" | "-"] Term {AddOp Term}.
Term          = Factor {MulOp Factor}.
Factor        = Designator ["(" [ExprList] ")"] | number | character | string | NIL | Set | "(" Expr ")" | "~" Factor.
Set           = "{" [Element {"," Element}] "}".
Element       = Expr [".." Expr].
Relation      = "=" | "#" | "<" | "<=" | ">" | ">=" | IN | IS.
AddOp         = "+" | "-" | OR.
MulOp         = "*" | "/" | DIV | MOD | "&".
Designator    = Qualident {"." ident | "[" ExprList "]" | "^" | "(" Qualident ")"}.
ExprList      = Expr {"," Expr}.
IdentList     = IdentDef {"," IdentDef}.
Qualident     = [ident "."] ident.
IdentDef      = ident ["*" | "-"].

कार्यान्वयन

ईटीएच द्वारा बनाए गए अनुरक्षित ओबेरॉन-2 कंपाइलर्स में विंडोज, लिनक्स, सोलारिस (ऑपरेटिंग सिस्टम), मैकओएस के संस्करण में सम्मलित होते हैं।

ऑक्सफोर्ड ओबेरॉन-2 कंपाइलर देशी मशीन कोड के लिए संकलित करता है और विंडोज, लिनक्स और मैक ओएस एक्स पर एक जेआईटी का उपयोग कर सकता है। इसे माइकल स्पाइवी द्वारा बनाया जाता है अनुरक्षित और कीको वर्चुअल मशीन का उपयोग करता है।[4][5]

मोसेनबॉक और विर्थ संदर्भ में एक के आधार पर, मैनचेस्टर विश्वविद्यालय, यूके के स्टीफन जे बेवन द्वारा ओबेरॉन -2 लेक्स (सॉफ्टवेयर) स्कैनर और वाईएसीसी पार्सर है। यह संस्करण 1.4 पर होते है।

देशी ओबेरॉन नामक एक रिलीज़ है जिसमें एक ऑपरेटिंग सिस्टम सम्मलित होते है, और सीधे पीसी क्लास हार्डवेयर पर बूट हो सकता है।

ETHZ में कुछ साधारणतयः .NET-संबंधित एक्सटेंशन के साथ ओबेरॉन का .NET फ्रेमवर्क या .NET का कार्यान्वयन भी विकसित किया गया है।

प्रोग्रामर का खुला कार्यक्षेत्र (पाउ!)[6] एक बहुत ही सरल एकीकृत विकास वातावरण है, जो संपादक, लिंकर और ओबेरॉन -2 संकलक के साथ प्रदान किया जाता है। यह माइक्रोसाॅफ्ट विंडोज निष्पादनयोग्य के लिए संकलित है। पूर्ण स्रोत कोड प्रदान किया गया है, जिसे मुख्य रूप से कंपाइलर ओबेरॉन -2 में लिखा गया है।

जावा से ओबेराॅन के कंपाइलरr (JOB) को रूस के वोलोग्दा विश्वविद्यालय में लिखा गया था। यह जावा क्लास फाइल्स (बाईटकोड) के रूप में ऑब्जेक्ट कोड तैयार करता है। कुछ जॉब-विशिष्ट वर्ग प्रदान किए जाते हैं जो जावा संगत हैं, किन्तु जो अधिक ओबेरॉन-जैसे घटक पदानुक्रम का उपयोग करते हैं।

ऑप्टिमाइज़िंग ओबेरॉन-2 कंपाइलर कार्यक्रम जनरेशन बनाने के लिए जीएनयू संकलक संग्रह (GCC) टूलचेन का उपयोग करके C में संकलित करता है।

ओबेरॉन स्क्रिप्ट एक कंपाइलर है जो संपूर्ण ओबेरॉन भाषा का जावास्क्रिप्ट में अनुवाद करता है। इसका कंपाइलर जावास्क्रिप्ट में लिखा गया है और इस प्रकार ओबेरॉन में लिखी गई स्क्रिप्ट को प्रोसेस करने के लिए वेब पेजों से काॅल किया जा सकता है।

XDS मोडुला2/ओबेरान2 एक्सेलसियर एलएलसी, नोवोसिबिर्स्क, रूस द्वारा एक विकास प्रणाली होती है। इसमें इंटेल पेंटियम के लिए एक ऑप्टिमाइज़िंग कंपाइलर या क्रॉस-प्लेटफ़ॉर्म सॉफ़्टवेयर डेवलपमेंट के लिए वाया-सी ट्रांसलेटर सम्मलित है। विंडोज और लिनक्स के लिए उपलब्ध होते है। कंपाइलर ओबेरॉन -2 में लिखा गया है और खुद को कंपाइल करता है।

ओबेरॉन रिवाइवल ओबेरॉन 2 और कंपोनेंट पास्कल (ब्लैकबॉक्स घटक बिल्डर) को लिनक्स और विन32 में लाने की एक परियोजना होती है। ब्लैकबॉक्स का लिनक्स पोर्ट पहले अनुपलब्ध किया जाता था और यह मूल रूप से केवल माइक्रोसॉफ़्ट विंडोज़ पर चलता था।

Xओबेरान पावर पीसी के लिए एक रीयल-टाइम ऑपरेटिंग सिस्टम है, जिसे ओबेरॉन-2 में लिखा गया है।

पोर्टेबल ओबेरॉन-2 कंपाइलर (ओपी2) को ओबेरॉन सिस्टम को व्यावसायिक रूप से उपलब्ध प्लेटफॉर्म पर पोर्ट करने के लिए विकसित किया गया था।[7]







कीको बायटेकोड

ओबेरॉन-2 कीको वर्चुअल मशीन को निशाना बना सकता है।[4][5] उदाहरण के लिए, कुछ अन्य भाषा संकलकों की तरह उपयोग में लाया जाता हैं इसके लिए ओ-कोड, पी-कोड, आदि देखें।

ऑक्सफोर्ड ओबेरॉन-2 कंपाइलर पहले मध्यवर्ती बाइटकोड (केइको बाइटकोड) में संकलित करता है जिसे बाइट-कोड दुभाषिया के साथ व्याख्या किया जा सके या केवल -इन-टाइम कंपाइल के लिए उपयोग किया जा सके।

यह भी देखें

संदर्भ

  1. "Related Reading". Dr. Dobb's.
  2. Pfister, Cuno (2001). "What's New in Component Pascal (changes from Oberon-2 to CP)" (PDF). Oberon microsystems. Archived from the original (PDF) on 2011-05-15. Retrieved 10 January 2007.
  3. Differences between Oberon and Oberon-2, Mössenböck and Wirth (1993)
  4. 4.0 4.1 डॉ. माइकल स्पाइवी। कीको की विशिष्टता
  5. 5.0 5.1 Dr. Michael Spivey. "Design overview for OBC: The Keiko Abstract Machine". quote: "The Oxford Oberon--2 compiler translates source programs into code for a stack-based abstract machine... the Keiko machine"
  6. Collingbourne, H. (February 2000). "What Pascal's inventor did next". PC Plus. No. 160.
  7. Crelier, Régis (1994). Separate Compilation and Module Extension (Doctoral Thesis). ETH Zurich. doi:10.3929/ethz-a-000945227. hdl:20.500.11850/141604. Retrieved 18 November 2018.

ओबेरॉन और ओबेरॉन -2 का विकास

विस्तृत कागजात

किताबें

बाहरी संबंध