คำถามติดแท็ก abstract-syntax-tree

6
ใช้ eval python () กับ ast.literal_eval () หรือไม่
ฉันมีสถานการณ์ที่มีรหัสบางอย่างที่eval()เกิดขึ้นเป็นวิธีแก้ปัญหาที่เป็นไปได้ ตอนนี้ฉันไม่เคยใช้eval()มาก่อน แต่ฉันได้เจอข้อมูลมากมายเกี่ยวกับอันตรายที่อาจเกิดขึ้นได้ ที่กล่าวว่าฉันระมัดระวังมากเกี่ยวกับการใช้มัน สถานการณ์ของฉันคือฉันมีอินพุตที่ได้รับจากผู้ใช้: datamap = raw_input('Provide some data here: ') ในกรณีที่datamapความต้องการที่จะเป็นพจนานุกรม ฉันค้นหาไปรอบ ๆ และพบว่าeval()สามารถแก้ไขปัญหานี้ได้ ฉันคิดว่าฉันอาจสามารถตรวจสอบชนิดของอินพุตก่อนที่จะพยายามใช้ข้อมูลและนั่นจะเป็นการป้องกันความปลอดภัยที่ทำงานได้ datamap = eval(raw_input('Provide some data here: ') if not isinstance(datamap, dict): return ฉันอ่านเอกสารและฉันยังไม่ชัดเจนว่าจะปลอดภัยหรือไม่ Eval ประเมินข้อมูลทันทีที่ป้อนหรือหลังจากdatamapเรียกตัวแปรหรือไม่ เป็นastโมดูล.literal_eval()ตัวเลือกที่ปลอดภัยเท่านั้น?

11
แยกไฟล์. py อ่าน AST ปรับเปลี่ยนแล้วเขียนรหัสต้นฉบับที่แก้ไขแล้ว
ฉันต้องการแก้ไขรหัสต้นฉบับของโปรแกรมแบบหลาม โดยทั่วไปฉันต้องการอ่าน.pyไฟล์สร้างASTแล้วเขียนกลับรหัสต้นฉบับของ Python ที่แก้ไขแล้ว (เช่น.pyไฟล์อื่น) มีวิธีการที่จะแยก / รหัสที่มาหลามรวบรวมโดยใช้โมดูลหลามมาตรฐานเช่นมีหรือast compilerอย่างไรก็ตามฉันไม่คิดว่าพวกเขาจะสนับสนุนวิธีการแก้ไขซอร์สโค้ด (เช่นลบการประกาศฟังก์ชั่นนี้) แล้วเขียนกลับรหัสต้นฉบับไพ ธ อน UPDATE: เหตุผลที่ฉันต้องการจะทำคือผมอยากจะเขียนห้องสมุดทดสอบการกลายพันธุ์สำหรับหลามส่วนใหญ่โดยการลบงบ / สำนวน rerunning การทดสอบและเห็นสิ่งที่แบ่ง

6
ฉันสามารถบังคับใช้รูปแบบประเภทใดกับโค้ดเพื่อให้แปลเป็นภาษาโปรแกรมอื่นได้ง่ายขึ้น [ปิด]
ปิด . คำถามนี้จะต้องมีมากขึ้นมุ่งเน้น ขณะนี้ยังไม่ยอมรับคำตอบ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้เน้นไปที่ปัญหาเดียวโดยแก้ไขโพสต์นี้เท่านั้น ปิดให้บริการใน5 ปีที่ผ่านมา ปรับปรุงคำถามนี้ ฉันกำลังวางแผนที่จะทำโครงการด้านข้างที่มีเป้าหมายในการแปลรหัสจากภาษาโปรแกรมหนึ่งไปยังอีกภาษาหนึ่ง ภาษาที่ฉันเริ่มต้นคือ PHP และ Python (Python เป็น PHP ควรจะเริ่มต้นได้ง่ายกว่า) แต่ฉันควรจะเพิ่มภาษาอื่น ๆ ได้อย่างง่ายดาย (สัมพัทธ์) แผนคือ: สิ่งนี้มุ่งสู่การพัฒนาเว็บ รหัสเดิมและรหัสเป้าหมายจะอยู่บนเฟรมเวิร์ก (ซึ่งฉันจะต้องเขียนด้วย) กรอบงานเหล่านี้จะใช้รูปแบบการออกแบบ MVC และปฏิบัติตามข้อกำหนดการเข้ารหัสที่เข้มงวด สิ่งนี้น่าจะทำให้การแปลง่ายขึ้น ฉันกำลังดู IOC และการฉีดแบบพึ่งพาเนื่องจากอาจทำให้กระบวนการแปลง่ายขึ้นและมีข้อผิดพลาดน้อยลง ฉันจะใช้โมดูลแยกวิเคราะห์ของ Python ซึ่งช่วยให้ฉันสามารถเล่นกับ Abstract Syntax Tree ได้ เห็นได้ชัดว่าสิ่งที่ใกล้เคียงที่สุดที่ฉันจะได้รับจาก PHP คือtoken_get_all ()ซึ่งเป็นการเริ่มต้น จากนั้นฉันสามารถสร้าง AST ตารางสัญลักษณ์และโฟลว์ควบคุม จากนั้นฉันเชื่อว่าฉันสามารถเริ่มการส่งออกโค้ดได้ ผมไม่จำเป็นต้องมีการแปลที่สมบูรณ์แบบ ฉันยังคงต้องตรวจสอบโค้ดที่สร้างขึ้นและแก้ไขปัญหา …

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