java实现语法分析器_语法分析 | 语法分析的任务
在之前,我們有對編譯器做過一定的介紹,我們認為編譯器是具有一定流水線結構的軟件系統。它可以分為前端,中端和后端這樣的不同的階段。
編譯器前端對于我們正在研究的前端,我們已經通過詞法分析的學習掌握了從將源程序轉化為記號流的過程。
對于之后的語法分析器階段,我們在編譯器設計的早期,只實現了分析源程序是否合法,如果不合法就返回程序的出錯信息給程序員,退出源程序的編譯過程。程序員對代碼進行修改后就重啟該編譯過程,重新進行詞法分析和語法分析...。在后期的編譯器設計過程中,我們的語法分析過程就通常需要生成一個抽象語法樹的中間表示。該語法書輸出到后續階段,用于語義分析器或者代碼生成器進行進一步的處理。這樣的新設計使語法分析器能夠更加專注于自己的任務,將語義檢測和代碼生成的任務交給后續階段再來進行處理。
語法分析器是前端比較核心的模塊,負責處理程序員輸入的程序,產生編譯器后端需要使用的第一個非常核心的數據結構——抽象語法樹。
單獨提出語法分析器的模塊如下,輸入是記號流,輸出是語法書。
語法分析器是以語言的語法規則為準則對從記號流輸入的語法進行分析的。
舉個語法錯誤處理的例子:
對于上面的程序,如果進行語法分析,可以得到如下的語法錯誤:
- 第一行缺少右圓括號,
- 第二行缺少分號
- 第四行,得到了一個逗號而不是期待得到的分號
在舉一個語法書的構建的例子
如果程序員根據上面得到的反饋信息對源代碼進行修改,使其能夠得到一個可以通過語法分析器的代碼,該代碼顯示如下:
語法分析會接著對語法分析通過的代碼存入內存,由于對如此顯示的字符串的存儲后續的處理會過于麻煩,所以我們需要對其構造一定的數據結構,我們通常選用語法樹的數據結構。語法樹顯示如下:
對這樣的一個代碼分析完成后,我們返回的是該樹的根節點的指針。
語法分析是編譯器中第一個做切分的階段,將程序員所寫的字符串變化到相應的樹狀結構上。
語法分析的路線圖
- 數學理論:上下文無關文法(CFG)
- 描述語言語法規則的數學工具
- 自頂向下分析
- 遞歸下降分析算法(預測分析算法)
- LL 分析算法
- 自底向上分析
- LR 分析算法
原文鏈接:
- 編譯原理 - 網易云課堂
總結
以上是生活随笔為你收集整理的java实现语法分析器_语法分析 | 语法分析的任务的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python实验报告二_分组级运算和转换
- 下一篇: 多边形之间相交求交点的算法_路径规划算法