编译原理上机——函数绘图语言(一)
目錄
- 簡介
- 函數繪圖語言介紹
- 5種語句
- 參數默認值
- 屏幕(窗口)的坐標系
- 語言舉例
- 編譯原理介紹
- 6+2圖
- 正片開始
- 支持庫說明
- 相關篇目
- 小提示
- BUG說明
- 完結
簡介
這是編譯原理的一個上機作業,需要寫一個解釋器,用于運行函數繪圖語言,我會持續更新至該上機結束,希望大家及時指出我程序的bug. 😄
聯系方式
email:FishPotatoChen@163.com
函數繪圖語言介紹
5種語句
- 循環繪圖(FOR-DRAW)
- 比例設置(SCALE)
- 角度旋轉(ROT)
- 坐標平移(ORIGIN)
- 注釋(--或//)
參數默認值
默認值:origin is (0, 0); rot is 0;scale is (1, 1);屏幕(窗口)的坐標系
- 左上角為原點
- x方向從左向右增長
- y方向從上到下增長(與一般的坐標系方向相反)
語言舉例
--------------- 函數f(t)=t的圖形 origin is (100, 300); -- 設置原點的偏移量 rot is 0; -- 設置旋轉角度(不旋轉) scale is (1, 1); -- 設置橫坐標和縱坐標的比例 for T from 0 to 200 step 1 draw (t, 0);-- 橫坐標的軌跡(縱坐標為0) for T from 0 to 150 step 1 draw (0, -t);-- 縱坐標的軌跡(橫坐標為0) for T from 0 to 120 step 1 draw (t, -t);-- 函數f(t)=t的軌跡編譯原理介紹
6+2圖
#mermaid-svg-9ZRGxtqanui1vlyX {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-9ZRGxtqanui1vlyX .error-icon{fill:#552222;}#mermaid-svg-9ZRGxtqanui1vlyX .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-9ZRGxtqanui1vlyX .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-9ZRGxtqanui1vlyX .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-9ZRGxtqanui1vlyX .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-9ZRGxtqanui1vlyX .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-9ZRGxtqanui1vlyX .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-9ZRGxtqanui1vlyX .marker{fill:#333333;stroke:#333333;}#mermaid-svg-9ZRGxtqanui1vlyX .marker.cross{stroke:#333333;}#mermaid-svg-9ZRGxtqanui1vlyX svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-9ZRGxtqanui1vlyX .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-9ZRGxtqanui1vlyX .cluster-label text{fill:#333;}#mermaid-svg-9ZRGxtqanui1vlyX .cluster-label span{color:#333;}#mermaid-svg-9ZRGxtqanui1vlyX .label text,#mermaid-svg-9ZRGxtqanui1vlyX span{fill:#333;color:#333;}#mermaid-svg-9ZRGxtqanui1vlyX .node rect,#mermaid-svg-9ZRGxtqanui1vlyX .node circle,#mermaid-svg-9ZRGxtqanui1vlyX .node ellipse,#mermaid-svg-9ZRGxtqanui1vlyX .node polygon,#mermaid-svg-9ZRGxtqanui1vlyX .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-9ZRGxtqanui1vlyX .node .label{text-align:center;}#mermaid-svg-9ZRGxtqanui1vlyX .node.clickable{cursor:pointer;}#mermaid-svg-9ZRGxtqanui1vlyX .arrowheadPath{fill:#333333;}#mermaid-svg-9ZRGxtqanui1vlyX .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-9ZRGxtqanui1vlyX .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-9ZRGxtqanui1vlyX .edgeLabel{background-color:#e8e8e8;text-align:center;}#mermaid-svg-9ZRGxtqanui1vlyX .edgeLabel rect{opacity:0.5;background-color:#e8e8e8;fill:#e8e8e8;}#mermaid-svg-9ZRGxtqanui1vlyX .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-9ZRGxtqanui1vlyX .cluster text{fill:#333;}#mermaid-svg-9ZRGxtqanui1vlyX .cluster span{color:#333;}#mermaid-svg-9ZRGxtqanui1vlyX div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-9ZRGxtqanui1vlyX :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;}語法分析器詞法分析器語義分析器中間代碼生成器代碼優化器目標代碼生成器符號表管理器源程序目標代碼出錯處理器本次實驗需要編寫詞法分析器、語法分析器、語義分析器.
我還會在此基礎上編寫編譯器,將函數繪圖語言轉換為Python(目標語言).
正片開始
支持庫說明
mathPython數學函數支持庫
re匹配正則表達式,也就是匹配正規式
os系統調用,在此主要用來獲得當前路徑
ast生成Python語法樹庫
astunparse將ast生成的語法樹變得更漂亮
turtlePython海龜庫,用于畫圖
numpyPython科學計算庫,在此主要用于解決range不支持小數問題
ast和astunparse庫在編譯器和解釋器中均未使用,只是在語法分析輸出語法樹的時候作為語法樹的生成器和排版器使用
相關篇目
編譯原理上機——函數繪圖語言(二):詞法分析器
編譯原理上機——函數繪圖語言(三):語法分析器
編譯原理上機——函數繪圖語言(四):語義分析器
編譯原理上機——函數繪圖語言(五):編譯器與解釋器
完整代碼
Gitee開源代碼
小提示
為了方便起見,我將所有代碼一次總結在編譯原理上機——函數繪圖語言(五):編譯器與解釋器的附錄中并且上傳為CSDN付費資源完整代碼,如有需要,直接跳轉 😃
BUG說明
這一部分會持續更新
完結
😃 😄 😃 😄 😃 😄 😃 😄 😃 😄 😃 😄 😃 😄 😃 😄 😃 😄 😃 😄 😃 😄 😃 😄 😃 😄 😃 😄 😃 😄 😃 😄 😃 😄
總結
以上是生活随笔為你收集整理的编译原理上机——函数绘图语言(一)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 设计一个抢红包系统
- 下一篇: dex是什么的缩写,游戏中str是什么的