เป็นไปได้หรือไม่ที่จะออกแบบภาษาที่ไม่มีข้อผิดพลาดทางไวยากรณ์? [ปิด]


14

ในคำอื่น ๆ ภาษาที่ทุกสายที่เป็นไปได้คือไวยากรณ์ที่ถูกต้อง?

แก้ไข : นี่คือคำถามเชิงทฤษฎี
ฉันไม่มีความสนใจในการใช้ภาษาดังกล่าว ฉันแค่ถามว่ามันเป็นไปได้

แก้ไขเพิ่มเติม

ฉันไปข้างหน้าภาษาดังกล่าวที่ออกแบบมา ดูErrorFree


2
ถ้าเราทำได้เราก็สร้าง AI ขึ้นมา
Michael K

5
@Michael: ไม่; ฉันไม่คิดอย่างนั้น
Slaks

7
!!! Perl !!!

8
ฉันไม่เห็นด้วยอย่างยิ่งกับคำถามที่ปิด! มันไม่เป็นส่วนตัวหรือไม่สร้างสรรค์ !!!
Felix Dombek

1
ทำไมไม่ใช้ภาษาแอสเซมบลีด้วย: คำสั่ง exacly 256 คำสั่ง 128 รีจิสเตอร์และไวยากรณ์ทั่วไปของinstruction operand*ที่ซึ่งตัวถูกดำเนินการอาจเป็นรีจิสเตอร์หรือหมายเลขระหว่าง 0-127 (และทุกอย่างข้างต้นที่ถือว่าเป็นรีจิสเตอร์) และถ้าตัวถูกดำเนินการ หายไปสำหรับคำสั่ง multi-arity จะถือว่า '0'
Felix Dombek

คำตอบ:


8

ใช่ถ้าคุณดูสิ่งนี้ในลักษณะที่วิเคราะห์ได้อย่างชัดเจนการสร้างเครื่องทัวริงที่กำหนดขึ้นซึ่งมักจะหยุดอยู่ในสถานะสุดท้ายที่ดีสำหรับทุก ๆ สตริงของภาษาใดภาษาหนึ่ง การสาธิตจะตรงไปตรงมาคุณต้อง TM ปกติด้วยฟังก์ชันการเปลี่ยนที่มีการเปลี่ยนเพียงครั้งเดียวซึ่งมีลักษณะดังนี้:

TF(w,q) -> (w,Qa) 

Considerations:
    L = { w | w is any possible string }
    w e L
    q e Q
    F is a set with all good final states {Qa,Qr}
    Qa e F

มันถูก demostrated ว่า TM มีพลังการคำนวณเช่นเดียวกับคอมพิวเตอร์ในชีวิตจริงเดียวดังนั้นมันจึงเป็นไปได้อย่างแน่นอน


1
สิ่งนี้หมายความว่าอะไรบนโลกเราสำหรับคนธรรมดาสามัญ? 'w' คืออะไร 'e', ​​'L', 'q', 'Q', 'Qa', 'Qr', 'F', 'TF' หากไม่มีสิ่งเหล่านี้ที่กำหนดไว้ฉันไม่มีกรอบอ้างอิง
Berin Loritsch

1
ขออภัยไม่มีวิธีง่าย ๆ ในการอธิบายวิธีการทัวริงเครื่องกับคำตอบนี้ ตรวจสอบลิงค์นี้เพื่อชี้แจงเล็กน้อย: en.wikipedia.org/wiki/Turing_machine
guiman

16

ใช่แน่นอนมันเป็นไปได้มันง่ายมาก ๆ

<programm> ::= char | char <program> |

ฉันไม่เข้าใจว่าใครสามารถพูดว่า "ไม่" ที่กล่าวว่าอาจยากที่จะกำหนด semantic ที่มีความหมายสำหรับภาษาดังกล่าว แต่ก็เป็นไปได้เช่นกัน ดูเพียงแค่ในช่องว่าง


ดังนั้นถ้าภาษาไม่สนใจภาษานั้นมันเป็น systax ที่ถูกต้องเหรอ? และไม่ใช่ "tabtabspace" สตริงที่ถูกต้อง?
Michael K

1
ความหมายของภาษาเป็นปัญหาของฉันกับมัน แต่ไม่สามารถพูดคุยกับมันได้จริง ๆ หากไม่มีการปิดหัวข้อปรัชญา / ภาษาศาสตร์ที่เหมาะสม
StuperUser

2
Michael: แน่นอน ทุกอย่างถูกต้องตามหลักไวยากรณ์ แต่อาจเป็น NOP (ไม่มีความหมายพิเศษ) ไม่มีอะไรผิดปกติกับภาษาที่ไม่สนใจสิ่งต่างๆมากมาย เพียงแค่ดูทุกสิ่งที่ C ไม่สนใจในโปรแกรมตัวอย่างนี้: int main () {3 ;;; / * comment * /}
281377

หลายคนพูดว่า "ไม่" เพราะไม่มีความแตกต่างทางแนวคิดระหว่างไวยากรณ์และความหมาย "มันไม่ได้รวบรวม? จะต้องเป็นข้อผิดพลาดทางไวยากรณ์แล้ว!"
fredoverflow

หลายคนพูดว่า "ไม่" เพราะไม่มีความหมายที่แท้จริงในเรื่องนี้ ทันทีที่คุณเพิ่มโครงสร้าง (เช่นมากกว่ากฎการแยกวิเคราะห์แบบเรียกซ้ำด้วยตนเอง) คุณจะมีแนวคิดของไวยากรณ์ การละเมิดโครงสร้างเป็นข้อผิดพลาดที่เกิดจากไวยากรณ์ ข้อผิดพลาดที่เกิดจากไวยากรณ์เป็นข้อผิดพลาดของไวยากรณ์ไม่ว่าตัวแยกวิเคราะห์จะตั้งค่าสถานะเป็นเช่นนั้นหรือไม่
Berin Loritsch

5

ฉันเดาว่ามันขึ้นอยู่กับสิ่งที่คุณหมายถึงโดยไวยากรณ์ที่ถูกต้อง

คุณสามารถออกแบบภาษาที่ยอมรับสตริงใด ๆ แต่ไม่สนใจสิ่งที่ไม่ได้กำหนดความหมายเฉพาะ โดยพื้นฐานแล้วนี่เทียบเท่ากับการพูดว่า "ฉันจะกำจัดข้อผิดพลาดทางไวยากรณ์ แต่บอกว่าพวกเขาไม่ใช่ข้อผิดพลาด" - ค่อนข้างไร้จุดหมายและไม่เป็นที่ต้องการอย่างมากด้วยเหตุผลหลายประการ

ยิ่งไปกว่านั้นวิธีเดียวที่คุณสามารถมีภาษาที่ไม่มีข้อผิดพลาดทางไวยากรณ์คือการมีสตริงที่เป็นไปได้ทั้งหมดมีคำสั่ง / การใช้งานที่ถูกต้องที่เกี่ยวข้อง วิธีเดียวที่ฉันเห็นได้ว่าจะต้องมีการดำเนินการทั้งหมดเป็นอักขระเดี่ยวและเพื่อให้แน่ใจว่าอักขระทุกตัวมีการดำเนินการที่กำหนดไว้

มีสิ่งผิดปกติหลายล้านอย่าง - เห็นได้ชัดว่าไม่มีคำที่สงวนไว้มันเป็นเรื่องเกี่ยวกับที่ใช้ในบริบทและผลที่ตามมามันจะอ่านไม่ออกโดยทั่วไปและในขณะที่ภูมิคุ้มกันจากข้อผิดพลาดทางไวยากรณ์จะมีแนวโน้มมากกว่า ของข้อผิดพลาด

เป็นไปได้ในทางทฤษฎี (AmmoQ ทำให้มันดูเป็นระเบียบมากกว่าฉัน) แต่ไม่เป็นที่พึงปรารถนา


ฉันได้อ่านว่า TECO เป็นเช่นนั้นตัวละครแต่ละตัวที่ถูกกำหนดความหมาย
David Thornley

3
รหัสเครื่องใช้งานได้ดีมาก การรวมไบต์ที่เป็นไปได้ทุกครั้งสามารถดูได้เป็นโปรแกรมที่ทำบางสิ่งบางอย่างแม้ว่าทั้งหมดจะทำให้เกิดการขัดจังหวะ
281377

เดวิดนั่นคือสิ่งที่ฉันกำลังคิดอย่าง TECO แม้ว่าอินพุต IIRC TECO อาจมีข้อผิดพลาดทางไวยากรณ์ แต่มันแสดงให้เห็นถึงความยากลำบากของภาษาที่มีความหนาแน่นสูง - ยากที่จะอ่านและมีแนวโน้มที่จะเข้าใจข้อผิดพลาดได้ยาก
Omega Centauri

@ user281377: ใน 6502 มีคำแนะนำเล็กน้อยที่ไม่มีความหมายที่กำหนดไว้ บางคนมีพฤติกรรมที่สอดคล้องกันมีประโยชน์และไม่สามารถใช้ได้กับคำสั่งที่มีเอกสารใด ๆ (รายการโปรดของฉันคือชื่อเล่น "DCP" - ลดที่อยู่หน่วยความจำและเปรียบเทียบผลลัพธ์กับตัวสะสมการตั้งค่าสถานะอย่างเหมาะสม) แต่บางอย่างมีพฤติกรรมที่พึ่งพา การตั้งเวลาบัสด้วยวิธีแปลก ๆ และแปลกประหลาดและบางตัวจะล็อคโปรเซสเซอร์อย่างหนักพอที่จะต้องรีเซ็ต (แม้แต่การขัดจังหวะแบบ "ไม่หลอกลวง" จะไม่ช่วย) ฉันคิดว่าคำแนะนำหลังถือเป็น "ข้อผิดพลาดทางไวยากรณ์"
supercat

5

รหัสในภาษาการเขียนโปรแกรมที่ไม่ใช่ข้อความอาจไม่มีข้อผิดพลาดทางไวยากรณ์

ฉันคิดของภาษาภาพเหมือนBYOB คุณไม่สามารถพิมพ์ "โดยไม่ได้ตั้งใจถ้า x สิบอื่น foo" เพราะ "ไวยากรณ์" ถูกกำหนดโดยบล็อกกราฟิก


3

วัตถุประสงค์ของวากยสัมพันธ์คือเพื่อแยกความแตกต่างระหว่างที่ถูกต้องและไม่ถูกต้องในลักษณะที่เร็วขึ้นและมีประสิทธิภาพมากกว่าการใช้รหัส วากยสัมพันธ์เป็นเพียงการทำให้เกิดประโยชน์สูงสุดสิ่งที่เกิดขึ้นในนั้นและสิ่งที่เข้าสู่ความหมายคืออะไรโดยพลการ

โดยปกติแล้วคุณต้องการตรงกันข้าม: เพื่อให้การยืดยาวเท่าที่เป็นไปได้เพื่อประหยัดเวลามากขึ้น แต่แน่นอนว่าคุณสามารถละเว้นไวยากรณ์ทั้งหมดพร้อมกันและประกาศข้อผิดพลาดทุกครั้งที่มีความหมาย: คุณจะสิ้นสุดด้วยล่ามที่ไม่ต้องทำโทเค็น


0

Ahbefiasdlk aslerhsofa; f jwi [asdfasdf] aew / & Q! @ # $} {;-P

ดังนั้นหมายความว่าอย่างไร

ตราบใดที่ภาษามีโครงสร้างและไวยากรณ์ก็จะมีแนวคิดเรื่องข้อผิดพลาดทางไวยากรณ์อยู่เสมอ คำถามคือคุณบังคับใช้หรือไม่ ผู้คนจะทำผิดพลาดและข้อผิดพลาดทางไวยากรณ์เป็นสิ่งที่นักออกแบบภาษาส่วนใหญ่เข้าถึงเพื่อช่วยโปรแกรมเมอร์หลีกเลี่ยงข้อผิดพลาดที่โง่

ข้อผิดพลาดทางไวยากรณ์คือข้อผิดพลาดที่แนะนำโดยโปรแกรมเมอร์เขียนรหัสที่ไม่มีความหมายกับภาษา

มันเป็นไปไม่ได้ที่จะกำจัดข้อผิดพลาดทางไวยากรณ์ตามคำนิยามข้างต้น เรามีตัวระบุที่สะกดผิดทั้งหมดเราทุกคนมีชื่อวิธีการที่สะกดผิด การมีภาษาอย่างเงียบ ๆ ยอมรับการสะกดผิดและทำอะไรอย่างมีความสุขไม่ใช่ความคิดของฉันเกี่ยวกับประสบการณ์ที่สนุกสนาน

เป็นไปได้ที่จะออกแบบภาษาที่สามารถใช้อักขระ Unicode ที่ถูกต้อง (หรือลำดับอักขระ) เป็นตัวระบุ มีความท้าทายเช่นการทำให้ปกติเป็นลำดับตัวละคร / ลำดับตัวละครที่เทียบเท่าเพื่อให้พวกเขาได้รับการยอมรับว่าเป็นสิ่งเดียวกัน - แต่ก็เป็นไปได้ หมายเหตุ: มีสี่มาตรฐานประเภทของการปรับสภาพยูนิโค้ดได้


1
ความต้องการโครงสร้างไม่จำเป็นต้องใช้ไวยากรณ์ พิจารณา Piet โดยที่โครงสร้างอยู่ในตำแหน่งของอักขระ (หรือสี) ในตารางไม่ใช่ความสัมพันธ์กับอักขระอื่น ๆ ในหน่วยคำ
Mike Samuel

1
ละเมิดโครงสร้างและเกิดอะไรขึ้น
Berin Loritsch
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.