日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

编译原理上机——函数绘图语言(一)

發布時間:2023/12/8 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 编译原理上机——函数绘图语言(一) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

目錄

  • 簡介
  • 函數繪圖語言介紹
    • 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說明

這一部分會持續更新

  • 符號表中0~9都是不需要的;
  • 注釋中E->E;是錯的,應該改為E->T;E|ε,其中T為一個表達式,如:5?ln?(10)5*\ln(10)5?ln(10)
  • 這個詞法分析器不能算表型詞法分析器;
  • 完結

    😃 😄 😃 😄 😃 😄 😃 😄 😃 😄 😃 😄 😃 😄 😃 😄 😃 😄 😃 😄 😃 😄 😃 😄 😃 😄 😃 😄 😃 😄 😃 😄 😃 😄

    總結

    以上是生活随笔為你收集整理的编译原理上机——函数绘图语言(一)的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。