นี่คือคำสั่ง comterp ที่สามารถเรียกใช้ในผู้ให้บริการโฮสต์ฟรีของ OnWorks โดยใช้เวิร์กสเตชันออนไลน์ฟรีของเรา เช่น Ubuntu Online, Fedora Online, โปรแกรมจำลองออนไลน์ของ Windows หรือโปรแกรมจำลองออนไลน์ของ MAC OS
โครงการ:
ชื่อ
comterp - ผู้สาธิตคำสั่งล่ามแบบกระจาย
เรื่องย่อ
คอมพ์
คอมพ์ รีโมท
คอมพ์ เซิร์ฟเวอร์ "พอร์ตนัม"
คอมพ์ คนตัดไม้ "portnum"
คอมพ์ ไคลเอนต์ "โฮสต์" "พอร์ตนัม" ["ไฟล์"]
คอมพ์ telcat "โฮสต์" "portnum" ["ไฟล์"]
คอมพ์ เรียกใช้ "ไฟล์"
คอมพ์ "เอ็กซ์พีอาร์"
DESCRIPTION
comterp สาธิตตัวแปลคำสั่งที่รวมอยู่ใน ivtools ผู้ใช้ (หรือลูกค้า
โปรแกรม) สามารถโต้ตอบกับ comterp ผ่าน stdin และ stdout หรือ telnet (เมื่อมี ACE ในตัว)
ไวยากรณ์คำสั่งเป็นรายการคำสั่งที่คั่นด้วยเซมิโคลอนด้วยจำนวน
พารามิเตอร์ที่อยู่ในวงเล็บ พร้อมรองรับพารามิเตอร์ทางเลือกและคีย์เวิร์ด
อาร์กิวเมนต์ เช่น:
command2(arg1 arg2 arg3 :key1 val1 :key2 val2);
command1(arg1 arg2 arg3 :key1 val1 :key2 val2)
นิพจน์ไบนารีที่เหมือน C สามารถฝังไว้ที่ใดก็ได้ในภาษาคำสั่งโดยใช้
ตัวดำเนินการในตารางด้านล่าง สามารถสร้างตัวแปรได้ทันทีด้วยการมอบหมาย
โอเปอเรเตอร์ (เช่น "ball=1" สร้างตัวแปรจำนวนเต็ม "ball" เป็น 1) ไม่สิ้นสุด
นิพจน์ทำให้เกิดส่วนขยายบรรทัดคำสั่งอัตโนมัติ (จนกว่า parser จะกำหนด
การแสดงออกเสร็จสมบูรณ์) "(), "{}" และ "[]" สามารถใช้แทนกันได้
คำสั่ง OPTIONS
คอมพ์
เรียกใช้ตัวแปลคำสั่งเดียวเพื่อโต้ตอบกับผ่าน stdin และ stdout
รีโมทคอมพ์
เรียกใช้ตัวแปลคำสั่งเดียว เช่นเดียวกับค่าเริ่มต้น และรวมคำสั่งระยะไกลสำหรับ
การเข้าถึง comterp อื่น ๆ ในโหมดเซิร์ฟเวอร์
เซิร์ฟเวอร์คอมพ์ "portnum"
รับฟังและยอมรับการเชื่อมต่อบน portnum จากนั้นตั้งค่าตัวแปลคำสั่งให้รอ
สำหรับและประมวลผลคำสั่งจากการเชื่อมต่อนั้น
ตัวบันทึก comterp "portnum"
ฟังและยอมรับการเชื่อมต่อบนพอร์ตนัม จากนั้นเพียงส่งต่อข้อความที่เข้ามา
เพื่อ stdout ในขณะที่กลับขึ้นบรรทัดใหม่ เพื่อจุดประสงค์ในการดีบัก จริงๆ แล้วไม่ใช่การใช้
ล่าม
ไคลเอ็นต์ comterp "host" "portnum" ["file"]
เชื่อมต่อกับพอร์ตบนโฮสต์และส่ง/รับบัฟเฟอร์ข้อความที่สิ้นสุดบรรทัดใหม่ สำหรับ
จุดประสงค์ในการแก้จุดบกพร่อง ไม่ใช่การใช้ล่ามจริงๆ
comterp telcat "โฮสต์" "portnum" ["ไฟล์"]
เชื่อมต่อกับ portnum บนโฮสต์ cat the file จากนั้นปิดการเชื่อมต่อ ไม่ได้ใช้งานจริงๆ
ของล่ามด้วย
comterp เรียกใช้ "ไฟล์"
เรียกใช้เนื้อหาของไฟล์แล้วออก
คอมพ์ "เอ็กซ์พีอาร์"
ประเมินนิพจน์เดียวแล้วออก
ผู้ประกอบการ ตาราง
Operator ชื่อคำสั่ง Priority Order Type
-
. จุด 130 R-to-L ไบนารี
` bquote 125 R-to-L unary-คำนำหน้า
! ปฏิเสธ 110 R-to-L unary-prefix
~ bit_not 110 R-to-L unary-คำนำหน้า
++ เพิ่ม 110 R-to-L unary-prefix
++ incr_after 110 R-to-L unary-postfix
- ลบ 110 R-to-L unary-prefix
-- ธ.ค. 110 R-to-L unary-prefix
-- Decr_after 110 R-to-L unary-postfix
** ทำซ้ำ 90 L-to-R binary
.. วนซ้ำ 80 L-to-R binary
% mod 70 L-to-R ไบนารี
* mpy 70 L-to-R ไบนารี
/ div 70 L-to-R ไบนารี
+ เพิ่ม 60 L-to-R binary
- ไบนารีย่อย 60 L-to-R
<< lshift 55 L-to-R ไบนารี
>> rshift 55 L-to-R ไบนารี
< lt 50 L-to-R ไบนารี่
<= lt_or_eq 50 L-to-R ไบนารี
> gt 50 L-to-R ไบนารี
>= gt_or_eq 50 L-to-R ไบนารี
!= not_eq 45 L-to-R ไบนารี
== เท่ากับ 45 L-to-R binary
& bit_and 44 L-to-R ไบนารี
^ bit_xor 43 L-to-R ไบนารี
| bit_or 42 L-to-R ไบนารี
&& และ 41 L-to-R binary
|| หรือ 40 L-to-R binary
, ทูเพิล 35 L-to-R ไบนารี่
,, สตรีม concat 33 L-to-R binary
$ สตรีม 32 R-to-L unary-prefix
$$ รายการ 32 R-to-L unary-prefix
%= mod_assign 30 R-to-L ไบนารี
*= mpy_assign 30 R-to-L ไบนารี่
+= add_assign 30 R-to-L ไบนารี่
-= sub_assign 30 R-to-L ไบนารี
/= div_assign 30 R-to-L ไบนารี่
= กำหนดไบนารี R-to-L 30 ตัว
; ลำดับที่ 10 L-to-R binary
คณิตศาสตร์ คำสั่ง:
n=min(ab) -- คืนค่าต่ำสุดของ a และ b
n=max(ab) -- คืนค่าสูงสุดของ a และ b
n=abs(a) -- คืนค่าสัมบูรณ์ของ a
dbl=exp(x) -- ส่งคืนค่า e ยกกำลัง x
dbl=log(x) -- คืนค่าลอการิทึมธรรมชาติของ x
dbl=log10(x) -- ส่งกลับค่าลอการิทึมฐาน 10 ของ x
dbl=log2(x) -- ส่งกลับค่าลอการิทึมฐาน 2 ของ x
dbl=pow(xy) -- ส่งคืนค่า x ยกกำลัง y
dbl=acos(x) -- ส่งคืนค่าโคไซน์ส่วนโค้งของ x เป็นเรเดียน
dbl=asin(x) -- คืนค่า arc sine ของ x เป็นเรเดียน
dbl=atan(x) -- ส่งคืนค่าอาร์คแทนเจนต์ของ x เป็นเรเดียน
dbl=atan2(yx) -- ส่งคืนค่าอาร์คแทนเจนต์ของ y ส่วน x
dbl=cos(x) -- ส่งกลับค่าโคไซน์ของ x เรเดียน
dbl=sin(x) -- ส่งคืนค่าไซน์ของ x เรเดียน
dbl=tan(x) -- คืนค่าแทนเจนต์ของ x เรเดียน
dbl=sqrt(x) -- คืนค่ารากที่สองของ x
dbl=pi() -- ส่งคืนค่า pi
dbl=radtodeg(dbl) -- แปลงเรเดียนเป็นองศา
dbl=degtorad(dbl) -- แปลงองศาเป็นเรเดียน
num=floor(num) -- คืนค่าจำนวนเต็มที่ใกล้เคียงที่สุดที่น้อยกว่าหรือเท่ากับอาร์กิวเมนต์
num=ceil(num) -- ส่งคืนค่าจำนวนเต็มที่ใกล้เคียงที่สุดที่มากกว่าหรือเท่ากับอาร์กิวเมนต์
num=round(num) -- คืนค่าจำนวนเต็มที่ใกล้เคียงที่สุด
อัฟฟิน แปลง AND MATRIX คำสั่ง:
point=xform(x,y a00,a01,a10,a11,a20,a21) -- การแปลงความสัมพันธ์ของพิกัด x,y
affine=invert(a00,a01,a10,a11,a20,a21) -- กลับค่า affine transform
เมทริกซ์=เอ็กซ์โพส(เมทริกซ์) -- ย้ายเมทริกซ์ตามอำเภอใจ
matrix=matrix*matrix -- การคูณเมทริกซ์
สถิติ/สุ่ม คำสั่ง:
sum(val1[,val2[,...,valn]]) -- คืนค่าผลรวมของค่า
ค่าเฉลี่ย (val1[,val2[,...,valn]]) -- ส่งคืนค่ากลางของค่า
var(val1[,val2[,...,valn]]) -- คืนค่าความแปรปรวนของค่า
stddev(val1[,val2[,...,valn]]) -- คืนค่าส่วนเบี่ยงเบนมาตรฐานของค่า
rand([minval,maxval]) -- ส่งคืนตัวเลขสุ่มระหว่าง 0 ถึง 1 หรือ minval,maxval
srand(seedval) -- เครื่องกำเนิดตัวเลขสุ่มเมล็ด
รายการ คำสั่ง:
lst=list([olst|strm|val] :strmlst :attr :size n) -- สร้างรายการ คัดลอกรายการ หรือแปลง
กระแส
val=at(list|attrlist|str n :set val :ins val) -- ส่งคืน (หรือตั้งค่าหรือแทรกหลังจาก) รายการที่ n
ในรายการหรือสตริง
num=size(list|attrlist|str) -- ขนาดส่งคืนของรายการ (หรือสตริง)
val=index(list|str val|char|str :last :all :substr) -- คืนค่าดัชนีของค่า (หรือ ถ่าน หรือ
string) ในรายการ (หรือ string) หากไม่มี
กระแส คำสั่ง:
val=next(สตรีม) -- คืนค่าถัดไปจาก stream
strm=stream(ostrm|list|attrlist|val) -- คัดลอกสตรีมหรือแปลงรายการ
cnt=each(strm) -- ย้อนกระแสย้อนความยาว
comp=filter(comps classid) -- กรองสตรีมของ comps สำหรับการจับคู่ classid
ควบคุม คำสั่ง (โดยใช้ เสา การประเมิน):
val=cond(testexpr trueexpr falseexpr) -- ประเมิน testexpr และถ้าเป็นจริง ให้ประเมินและ
คืนค่า trueexpr มิฉะนั้นประเมินและส่งคืน falseexpr
val=if(testexpr :then expr :else expr) -- ประเมิน testexpr และดำเนินการ :then
นิพจน์ถ้าเป็นจริง :else นิพจน์ถ้าเป็นเท็จ
val=for(initexpr whileexpr [nextexpr [bodyexpr]] :body expr) - สำหรับการวนซ้ำ
val=while([testexpr [bodyexpr]] :nilchk :until :body expr ) - ในขณะที่วนซ้ำ
val=switch(val key-body-pairs) -- คำสั่ง switch (:casen สำหรับ pos., :case_n สำหรับ neg.,
มิฉะนั้น :สัญลักษณ์)
ดำเนินการต่อ - ข้ามไปที่การวนซ้ำถัดไปของ for หรือ while loop
break([retval]) - แยกจาก for หรือ while loop
อื่น ๆ คำสั่ง
help(cmdname [cmdname ...] :all :posteval) -- ความช่วยเหลือสำหรับคำสั่ง
val=trace([flag] :get) -- สลับหรือตั้งค่าโหมดการติดตาม
หยุดชั่วคราว ([msgstr]) -- หยุดการทำงานของสคริปต์ชั่วคราวจนถึง C/R
ขั้นตอน () - สลับการดำเนินการสคริปต์แบบเป็นขั้นตอน
fileobj|pipeobj=open([ชื่อไฟล์ [modestr]] :pipe :in :out :err) -- เปิดคำสั่งไฟล์
close(fileobj|pipeobj) -- ปิดคำสั่งไฟล์
[str]=พิมพ์([fmtstr] [val [val1 [... valn]]] :string|:str :out :err :file fileobj|pipeobj
:prefix str) -- พิมพ์ค่าด้วยสตริงรูปแบบทางเลือก
str=gets(fileobj|pipeobj) -- รับสตริงที่สิ้นสุดบรรทัดใหม่จากไฟล์
val=global(symbol)|global(symbol)=val|global(symbol :clear)|global(:cnt) - สร้างสัญลักษณ์
ทั่วโลก
int|lst=symid(symbol [symbol ...] | :max) -- ส่งคืน id จำนวนเต็มที่เกี่ยวข้อง
สัญลักษณ์
sym|lst=symbol(symid [symid ...]) -- ส่งคืนสัญลักษณ์ที่เกี่ยวข้องกับรหัสจำนวนเต็ม
val|lst=symval(สัญลักษณ์ [สัญลักษณ์ ...]) -- ส่งคืนค่าที่เกี่ยวข้องกับสัญลักษณ์
ตัวแปร
sym|lst=symadd(sym|str [sym|str ...]) - สร้างสัญลักษณ์และส่งคืนโดยไม่ต้องค้นหา
sym=symvar(sym) -- ส่งคืนสัญลักษณ์ตามที่เป็นอยู่
str=symstr(sym) -- ส่งคืนเวอร์ชันสตริงของ symbol
n=strref(str|symid) -- ส่งคืนจำนวนการอ้างอิงสตริง
lst=split(สัญลักษณ์|สตริง :tokstr [delim] :tokval [delim] :keep :reverse) -- แยกสัญลักษณ์
หรือสตริงลงในรายการอักขระ (หรือโทเค็น)
str=join(clist :sym) -- รวมรายการอักขระลงใน string
str=substr(str n|str :after :nonil) -- แยกอักขระจากสตริง (:nonil ส่งคืน
สตริงถ้าไม่ตรงกัน)
bool=eq(str1 str2 :n len) -- การเปรียบเทียบสตริงบางส่วน
bool=eq(sym1 sym2 :sym) -- การเปรียบเทียบสัญลักษณ์
postfix(arg1 [arg2 [arg3 ... [argn]]]) - สะท้อนอาร์กิวเมนต์ postfix ที่ไม่ได้ประเมิน (ด้วย
[narg|nkey] หลังคำสั่งที่กำหนด {narg|nkey} หลังคำสั่งที่ไม่ได้กำหนด (narg) หลัง
คีย์ และ * ตามคำสั่งหลังการประเมิน)
parse(fileobj) -- แยกนิพจน์เดียวจาก file
arr=posteval(arg1 [arg2 [arg3 ... [argn]]]) - หลังประเมินทุกอาร์กิวเมนต์คงที่ (จนถึง
ไม่มี) และส่งคืนอาร์เรย์
sym=attrname(attribute) -- ฟิลด์ชื่อส่งคืนของ dotted pair
val=attrval(แอตทริบิวต์) -- ฟิลด์ค่าส่งคืนของ dotted pair
dotlst=dot(name) -- สร้างรายการคู่ประที่ว่างเปล่า
quit() - ออกจากล่าม
exit() - ออกจากแอปพลิเคชันทั้งหมด
ว่างเปล่า () - คำสั่งว่างเปล่า
val=run(ชื่อไฟล์ :str :popen) -- เรียกใช้คำสั่งจากไฟล์ (หรือสตริง)
val=remote(hoststr portnum cmdstr :nowait) - ประเมินสตริงคำสั่งจากระยะไกลจากนั้น
ประเมินสตริงผลลัพธ์ในพื้นที่
val=eval(cmdstr|funcobj [cmdstr|funcobj ...] :symret ) - ประเมินสตริง (หรือ funcobj) เป็น
คำสั่ง เลือกส่งคืนสัญลักษณ์แทน nil
funcobj=func(body :echo) - ห่อหุ้มเนื้อหาของคำสั่งให้เป็นวัตถุที่เรียกใช้งานได้
val=shell(cmdstr) -- ประเมินคำสั่งใน shell
หลับ(มิลลิวินาที) -- ไมโครวินาทีสลีป
mute([flag]) -- ตั้งค่าหรือสลับปิดเสียง flag
nil([...]) -- ยอมรับข้อโต้แย้งและคืนค่า nil
c=char(num :u) -- แปลงตัวเลขใดๆ เป็น char
s=short(num :u) -- แปลงตัวเลขใดๆ ให้สั้น
i=int(num :u) -- แปลงตัวเลขเป็น int
l=long(num :u) -- แปลงตัวเลขใดๆ ให้เป็นค่า long
f=float(num) -- แปลงตัวเลขเป็น float
d=double(num) -- แปลงตัวเลขใดๆ เป็น double
sym|lst=type(val [val ...]) -- ส่งคืนสัญลักษณ์ประเภทสำหรับค่า
sym|lst=class(val [val ...]) -- ส่งคืนสัญลักษณ์คลาสสำหรับค่าของประเภทอ็อบเจ็กต์
int=ctoi(char) -- แปลงอักขระเป็นจำนวนเต็ม
flag=isspace(char) -- คืนค่า true หากอักขระเป็นช่องว่าง
flag=isdigit(char) -- คืนค่า true หากอักขระเป็นตัวเลข
flag=isspace(char) -- คืนค่า true หากตัวอักษรเป็นตัวอักษร
str=arg(n) -- ส่งคืนอาร์กิวเมนต์บรรทัดคำสั่ง
n=narg(n) -- ส่งคืนจำนวนอาร์กิวเมนต์บรรทัดคำสั่ง
num=nand(ab) -- NAND ระดับบิต (ลบล้าง AND)
num=nor(ab) -- NOR ระดับบิต (ลบ OR)
num=xnor(ab) -- XNOR ระดับบิต (XOR ลบล้าง)
เพียง IN SERVER โหมด
str=timeexpr(comstr :sec n) -- สตริงคำสั่งที่จะดำเนินการตามช่วงเวลา
ใช้คอมออนไลน์โดยใช้บริการ onworks.net