Component Pascal
Il Component Pascal è un linguaggio di programmazione che segue la tradizione dei linguaggi sviluppati da Niklaus Wirth (Pascal, Modula-2, Oberon and Oberon-2). Sebbene porti il nome del linguaggio di programmazione Pascal, è incompatibile con esso ed è invece una variante minore e un raffinamento di Oberon-2. Component Pascal è stato progettato da una piccola spin off dell'ETH Zürich chiamata Oberon microsystems.
Component Pascal linguaggio di programmazione | |
---|---|
Data di origine | 1997 |
Paradigmi | programmazione imperativa, programmazione strutturata, programmazione modulare e programmazione orientata agli oggetti |
Influenzato da | Oberon-2 |
Implementazione di riferimento | |
Sito web | www.oberon.ch/ |
Esiste un'implementazione open source del linguaggio per le piattaforme .NET e Java Virtual Machine, fornita dal team Gardens Point guidato da John Gough presso la Queensland University of Technology in Australia.
Sintassi
modificaLa sintassi completa per il linguaggio Component Pascal è mostrata sotto. Essa consiste in 34 produzioni in forma Backus-Naur estesa, solo una in più del linguaggio Oberon-2, sebbene Component Pascal sia notevolmente più avanzato.
Module = MODULE ident ";" [ImportList] DeclSeq [BEGIN StatementSeq] [CLOSE 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] MethAttributes [";" DeclSeq [BEGIN StatementSeq] END ident]. MethAttributes = ["," NEW] ["," (ABSTRACT | EMPTY | EXTENSIBLE)]. ForwardDecl = PROCEDURE "^" [Receiver] IdentDef [FormalPars] MethAttributes. FormalPars = "(" [FPSection {";" FPSection}] ")" [":" Type]. FPSection = [VAR | IN | OUT] ident {"," ident} ":" Type. Receiver = "(" [VAR | IN] ident ":" ident ")". Type = Qualident | ARRAY [ConstExpr {"," ConstExpr}] OF Type | [ABSTRACT | EXTENSIBLE | LIMITED] 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 | 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] ")"} [ "$" ]. ExprList = Expr {"," Expr}. IdentList = IdentDef {"," IdentDef}. Qualident = [ident "."] ident. IdentDef = ident ["*" | "-"].
Collegamenti esterni
modifica- Sito ufficiale, su oberon.ch.
- (EN) Report sul linguaggio Component Pascal (PDF), su oberon.ch. URL consultato il 29 agosto 2010 (archiviato dall'url originale il 16 agosto 2012).
- (EN) Cosa c'è di nuovo nel Component Pascal? (PDF), su oberon.ch. URL consultato il 29 agosto 2010 (archiviato dall'url originale il 15 maggio 2011).