
ทุ่มเทให้กับพ่อของฉัน Mikhail Tereshkov ผู้ปลูกฝังรสชาติสำหรับวิศวกรรมในตัวฉัน
XD Pascal เป็นคอมไพเลอร์ตัวเองที่ฝังตัวเล็ก ๆ สำหรับภาษา Pascal ภาษา ความคิดเห็นคำแนะนำหรือรายงานข้อผิดพลาดใด ๆ จะได้รับการชื่นชม อย่าลังเลที่จะติดต่อผู้เขียนใน GitHub หรือทางอีเมล [email protected] สนุก.

พิมพ์ในพรอมต์คำสั่ง:
xdpw <file.pas>
ควรระบุไฟล์ต้นฉบับด้วยส่วนขยาย (.pas)
XD Pascal คล้ายกับ Delphi 6/7 และ Pascal ฟรีพร้อมการเปลี่ยนแปลงต่อไปนี้:
Text เทียบเท่ากับ file สามารถใช้สำหรับทั้งข้อความและไฟล์ที่ไม่ได้พิมพ์Extended เทียบเท่ากับ DoubleHigh และ Low สำหรับอาร์เรย์เปิด ความยาวอาร์เรย์เปิดควรส่งผ่านไปยังรูทีนย่อยอย่างชัดเจน ProgramOrUnit = [("program" | "unit") Ident ";"]
["interface"] [UsesClause] Block "." .
UsesClause = "uses" Ident {"," Ident} ";" .
Block = { Declarations } (CompoundStatement | "end") .
Declarations = DeclarationSection ["implementation" DeclarationSection] .
DeclarationSection = LabelDeclarations |
ConstDeclarations |
TypeDeclarations |
VarDeclarations |
ProcFuncDeclarations .
Initializer = ConstExpression |
StringLiteral |
"(" Initializer {"," Initializer} ")" |
"(" Ident ":" Initializer {";" Ident ":" Initializer} ")" |
SetConstructor .
LabelDeclarations = "label" Ident {"," Ident} ";"
ConstDeclarations = (UntypedConstDeclaration | TypedConstDeclaration)
{";" (UntypedConstDeclaration | TypedConstDeclaration)} .
UntypedConstDeclaration = "const" Ident "=" ConstExpression .
TypedConstDeclaration = "const" Ident ":" Type "=" Initializer .
TypeDeclarations = "type" Ident "=" Type ";" {Ident "=" Type ";"} .
VarDeclarations = "var" IdentList ":" Type ["=" Initializer] ";"
{IdentList ":" Type ["=" Initializer] ";"} .
ProcFuncDeclarations = ("procedure" | "function") Ident
[Receiver] [FormalParams] [":" TypeIdent]
[CallModifier] ";" [(Directive | Block) ";"] .
Receiver = "for" Ident ":" TypeIdent .
CallModifier = "stdcall" | "cdecl" .
Directive = "forward" | "external" ConstExpression .
ActualParams = "(" [ (Expression | Designator) |
{"," (Expression | Designator)} ] ")" .
FormalParams = "(" FormalParamList {";" FormalParamList} ")" .
FormalParamList = ["const" | "var"] IdentList [":" ["array" "of"] TypeIdent]
["=" ConstExpression] .
IdentList = Ident {"," Ident} .
Type = "(" Ident {"," Ident} ")" |
"^" TypeIdent |
["packed"] "array" "[" Type {"," Type} "]" "of" Type |
["packed"] "record" Fields "end" |
["packed"] "interface" FixedFields "end" |
["packed"] "set" "of" Type |
["packed"] "string" [ "[" ConstExpression "]" ] |
["packed"] "file" ["of" Type] |
ConstExpression ".." ConstExpression |
("procedure" | "function") [FormalParams] [":" TypeIdent] [CallModifier] |
Ident .
Fields = FixedFields
["case" [Ident ":"] Type "of"
ConstExpression {"," ConstExpression} ":" "(" Fields ")"
{";" ConstExpression {"," ConstExpression} ":" "(" Fields ")"}] [";"] .
FixedFields = IdentList ":" Type {";" IdentList ":" Type} .
TypeIdent = "string" | "file" | Ident .
Designator = BasicDesignator {Selector} .
BasicDesignator = Ident |
Ident [ActualParams] |
Ident "(" Expression ")" .
Selector = "^" |
"[" Expression {"," Expression} "]" |
"." Ident |
"(" ActualParams ")".
Statement = [Label ":"] [ (Designator | Ident) ":=" Expression |
(Designator | Ident) [ActualParams] {Selector} |
CompoundStatement |
IfStatement |
CaseStatement |
WhileStatement |
RepeatStatement |
ForStatement |
GotoStatement |
WithStatement ] .
Label = Ident .
StatementList = Statement {";" Statement} .
CompoundStatement = "begin" StatementList "end" .
IfStatement = "if" Expression "then" Statement ["else" Statement] .
CaseStatement = "case" Expression "of" CaseElement {";" CaseElement}
[";"] ["else" StatementList] [";"] "end" .
WhileStatement = "while" Expression "do" Statement .
RepeatStatement = "repeat" StatementList "until" Expression .
ForStatement = "for" Ident ":=" Expression ("to" | "downto") Expression "do" Statement.
GotoStatement = "goto" Label .
WithStatement = "with" Designator {"," Designator} "do" Statement .
CaseElement = CaseLabel {"," CaseLabel} ":" Statement .
CaseLabel = ConstExpression [".." ConstExpression] .
ConstExpression = Expression .
Expression = SimpleExpression [("="|"<>"|"<"|"<="|">"|">="|"in") SimpleExpression] .
SimpleExpression = ["+"|"-"] Term {("+"|"-"|"or"|"xor") Term}.
Term = Factor {("*"|"/"|"div"|"mod"|"shl"|"shr"|"and") Factor}.
Factor = (Designator | Ident) [ActualParams] {Selector} |
Designator |
"@" Designator |
Number |
CharLiteral |
StringLiteral |
"(" Expression ")" |
"not" Factor |
SetConstructor |
"nil" |
Ident "(" Expression ")" {Selector} .
SetConstructor = "[" [Expression [".." Expression]
{"," Expression [".." Expression]}] "]" .
Ident = (Letter | "_") {Letter | "_" | Digit}.
Number = "$" HexDigit {HexDigit} |
Digit {Digit} ["." {Digit}] ["e" ["+" | "-"] Digit {Digit}] .
CharLiteral = "'" (Character | "'" "'") "'" |
"#" Number .
StringLiteral = "'" {Character | "'" "'"} "'".
คอมไพเลอร์ขึ้นอยู่กับตัวแยกวิเคราะห์โคตรแบบเรียกซ้ำ มันสร้างการทำงานของ Windows PE โดยตรงโดยไม่ต้องใช้แอสเซมเบลอร์ภายนอกหรือ linker
$APPTYPE - ตั้งค่าประเภทแอปพลิเคชัน ตัวอย่าง: {$APPTYPE GUI} , {$APPTYPE CONSOLE}$UNITPATH - ตั้งค่าเส้นทางการค้นหาหน่วยเพิ่มเติม ตัวอย่าง: {$UNITPATH ..units} มีการเพิ่มประสิทธิภาพ Peephole อย่างง่าย ๆ :
ตัวระบุต่อไปนี้ถูกนำไปใช้เป็นส่วนหนึ่งของคอมไพเลอร์ ชื่อของพวกเขาไม่ได้สงวนไว้และสามารถนิยามใหม่โดยผู้ใช้
procedure Inc ( var x: Integer);
procedure Dec ( var x: Integer);
procedure Read ([ var F: file ;] var x1 { ; var xi } );
procedure Write ([ var F: file ;] x1[:w[:d]] { ; xi[:w[:d]] } );
procedure ReadLn ([ var F: file ;] var x1 { ; var xi } );
procedure WriteLn ([ var F: file ;] x1[:w[:d]] { ; xi[:w[:d]] } );
procedure New ( var P: Pointer);
procedure Dispose ( var P: Pointer);
procedure Break ;
procedure Continue ;
procedure Exit ;
procedure Halt [( const error: Integer)];
function SizeOf ( var x | T): Integer;
function Ord (x: T): Integer;
function Chr (x: Integer): Char;
function Low ( var x: T | T): T;
function High ( var x: T | T): T;
function Pred (x: T): T;
function Succ (x: T): T;
function Round (x: Real): Integer;
function Abs (x: T): T;
function Sqr (x: T): T;
function Sin (x: Real): Real;
function Cos (x: Real): Real;
function Arctan (x: Real): Real;
function Exp (x: Real): Real;
function Ln (x: Real): Real;
function SqRt (x: Real): Real; function Timer : Integer;
procedure GetMem ( var P: Pointer; Size: Integer);
procedure FreeMem ( var P: Pointer);
procedure Randomize ;
function Random : Real;
procedure Assign ( var F: file ; const Name : string);
procedure Rewrite ( var F: file [; BlockSize: Integer]);
procedure Reset ( var F: file [; BlockSize: Integer]);
procedure Close ( var F: file );
procedure BlockRead ( var F: file ; var Buf; Len: Integer; var LenRead: Integer);
procedure BlockWrite ( var F: file ; var Buf; Len: Integer);
procedure Seek ( var F: file ; Pos: Integer);
function FileSize ( var F: file ): Integer;
function FilePos ( var F: file ): Integer;
function EOF ( var F: file ): Boolean;
function IOResult : Integer;
function Length ( const s: string): Integer;
procedure Move ( var Source; var Dest; Count: Integer);
function Copy ( const S: string; Index, Count: Integer): string;
procedure FillChar ( var Data; Count: Integer; Value : Char);
function ParamCount : Integer;
function ParamStr (Index: Integer): string;
procedure Val ( const s: string; var Number: Real; var Code: Integer);
procedure Str (Number: Real; var s: string[; DecPlaces: Integer]);
procedure IVal ( const s: string; var Number: Integer; var Code: Integer);
procedure IStr (Number: Integer; var s: string);
function UpCase (ch: Char): Char; function IntToStr (n: Integer): string;
function StrToInt ( const s: string): Integer;
function FloatToStr (x: Real): string;
function FloatToStrF (x: Real; Format: TFloatFormat; Precision, Digits: Integer): string;
function StrToFloat ( const s: string): Real;
function StrToPChar ( const s: string): PChar;
function PCharToStr (p: PChar): string;
function StrToPWideChar ( const s: string): PWideChar;
function PWideCharToStr (p: PWideChar): string;factor.pas - การสาธิตการแยกตัวประกอบจำนวนเต็มlineq.pas - ตัวแก้สมการเชิงเส้น ใช้หน่วย gauss.pas ต้องการ eq.txt , eqerr.txt หรือไฟล์ข้อมูลที่คล้ายกันlife.pas - เกมแห่งชีวิตsort.pas - การสาธิตการเรียงลำดับอาร์เรย์fft.pas - การสาธิตการแปลงฟูริเยร์เร็วinserr.pas - การสาธิตการประมาณข้อผิดพลาดของระบบการนำทางแบบเฉื่อย ใช้ kalman.pas unitlist.pas - การสาธิตการดำเนินการรายการที่เชื่อมโยงmap.pas - การดำเนินการรายการที่แตกต่างกันและการสาธิตฟังก์ชั่นแผนที่ แสดงวิธีการและอินเทอร์เฟซ XD Pascalgui.pas - การสาธิตแอปพลิเคชัน GUI ใช้ windows.pas unitraytracer.pas - Raytracer Demo แสดงวิธีการ XD Pascal และอินเทอร์เฟซ เทียบเท่ากับ raytracer.go 
Windows Defender Antivirus เป็นที่รู้จักกันว่าให้ผลลัพธ์ที่เป็นบวกในบางโปรแกรมที่รวบรวมด้วย XD Pascal