成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Linux Bison更好的語義類型

運維 系統(tǒng)運維
正如UNIX®開發(fā)人員所了解的那樣,F(xiàn)lex和Linux Bison的功能非常強大,非常適合開發(fā)詞法和語法解析器,尤其是語言編譯器和解釋器。

盡管使用Flex和Linux Bison生成程序非常簡單,但是要讓這些程序產(chǎn)生用戶友好的語法和語義錯誤消息卻很困難。本文將介紹Flex和Linux Bison的錯誤處理特性,并展示如何使用它們,然后詳細介紹它們的一些缺陷。

簡介
正如UNIX®開發(fā)人員所了解的那樣,F(xiàn)lex和Linux Bison的功能非常強大,非常適合開發(fā)詞法和語法解析器,尤其是語言編譯器和解釋器。如果我們不熟悉它們所實現(xiàn)的工具——分別是Lex和Yacc——可以參考一下本文參考資料一節(jié)中有關Flex和Bison文檔的鏈接,以及其他介紹這兩個程序的文章。

本文介紹了更高級的一些主題:用來在編譯器和解釋器中更好地實現(xiàn)錯誤處理能力的特性和技術。為了展示這些技術,我使用了一個示例程序ccalc,它基于Bison手冊中的計算機實現(xiàn)了一個增強的計算器。我們可以從本文后面下載一節(jié)下載ccalc和相關文件。

增強包括使用了很多變量。在ccalc中,變量是通過在初始化中***使用時定義的,例如a=3。如果變量是在初始化之前使用的,那就會產(chǎn)生語義錯誤,使用值為0來創(chuàng)建這個變量,并打印一條消息。

示例源文件

示例源代碼中包括7個文件:
ccalc.c:主程序,以及一些進行輸入、輸出和錯誤處理的函數(shù)ccalc.h:包括了對所有模塊的定義cmath.c:數(shù)學函數(shù)parse.y:Bison使用的輸入文法lex.l:Flex的輸入makefile:簡單的makefiledefs.txt:示例輸入文件這個程序接收兩個參數(shù):
-debug:產(chǎn)生調試輸出filename:輸入文件名;默認值為defs.txtBison使用的設置為了處理變量名和實際值,Bison的語義類型必須進行增強:


清單1.更好的Linux Bison語義類型
 

  1. /*generateinclude-filewithsymbolsandtypes*/  
  2. %defines  
  3. /*amoreadvancedsemantictype*/  
  4. %union{  
  5. doublevalue;  
  6. char*string;  
  7. }  

 


有些文法規(guī)則可以產(chǎn)生特定的語義類型,這需要像清單2中一樣對Bison進行聲明。要獲得一個可移植性更好的Bison文法版本,我們需要重新定義+-*/()符號。下面這個例子沒有使用左括號(,而是使用了結束符符號LBRACE,這是由詞法分析提供的。另外,操作符的優(yōu)先順序也必須進行聲明。

對于Flex來說,所生成的代碼通常都依賴于平臺所使用的代碼頁(codepage)。盡管我們可以使用其他代碼頁,但是必須要對輸入進行轉換。因此與Bison代碼不同,F(xiàn)lex代碼尚不能進行移植。

【編輯推薦】

  1. Linux Bash命令關于程序調試詳解 
  2. Linux Bash命令關于快捷鍵應用
  3. Linux Bash Shell系統(tǒng)的應用詳解
  4. Linux Bash具體安裝步驟及使用介紹
  5. Linux Bash命令查詢相關事件詳解
     
責任編輯:chenqingxiang 來源: 中國IT實驗室
相關推薦

2010-06-23 18:01:22

Linux Bison

2022-10-09 07:07:51

Python類型代碼

2023-08-22 13:18:00

Web 開發(fā)CSS

2017-09-08 13:35:48

云優(yōu)先策略互聯(lián)網(wǎng)

2021-02-26 20:40:06

LinuxWindows操作系統(tǒng)

2019-08-14 08:00:00

Arch LinuxUbuntuLinux

2021-12-22 10:25:13

locateLinuxplocate

2021-12-19 13:56:46

機器學習數(shù)據(jù)人工智能

2009-12-09 16:56:58

Linux網(wǎng)銀

2009-06-11 10:14:09

數(shù)據(jù)類型Java

2016-12-09 15:43:49

Liunx

2025-03-21 00:00:00

2010-08-10 09:12:50

DB2驅動類型

2016-08-05 14:23:15

系統(tǒng)

2021-11-23 09:20:25

Wine 6.22LinuxWindows

2012-07-20 09:37:00

Oracle LinuCentOS

2010-02-03 17:51:42

Ubuntu Linu

2021-12-23 12:32:48

LinuxAlder Lake酷睿處理器

2021-10-04 18:53:01

Linux 5.16 USB 音頻驅動補丁

2021-06-08 07:48:26

iOS 15 Linux 操作系統(tǒng)
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 日韩电影a | 欧美日韩18 | 日韩成人一区二区 | 91美女视频 | 国产成人高清视频 | 日韩无 | 81精品国产乱码久久久久久 | 在线视频成人 | 91精品国产综合久久小仙女图片 | 久久亚洲视频 | 成人做爰999| 精品视频在线一区 | 国产精品777一区二区 | 一区二区在线不卡 | 91在线电影 | 国产精品久久久久久一级毛片 | 欧美一级三级 | 91国内视频在线 | 中文字幕成人网 | 超碰最新在线 | 欧美激情久久久久久 | 亚洲精品在线免费看 | 欧美理伦片在线播放 | 国产日韩免费观看 | 亚洲九九| 中文字幕精品视频 | 一区二区免费 | 久久久一区二区 | 久久精品国产亚洲一区二区三区 | 欧美又大粗又爽又黄大片视频 | 盗摄精品av一区二区三区 | 精品国产三级 | 精品一区二区电影 | 日韩欧美精品 | 国产欧美精品区一区二区三区 | 伊人精品在线视频 | 久久只有精品 | 国产精品国产三级国产aⅴ无密码 | 久久男人| www.亚洲免费 | 亚洲欧美精品国产一级在线 |