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

總結(jié)C++詞法分析設(shè)計(jì)方法

開發(fā) 后端
從C++詞法分析分析的角度看,編程語言是一個(gè)單詞的集合,所以叫為正規(guī)集,單詞是由一個(gè)個(gè)字符組成的線性結(jié)構(gòu)。

下面文章從C++詞法分析的角度出發(fā),其實(shí)語言是一個(gè)句子的集合,而句子是由詞法分析器返回的記號(hào)組成的非線性結(jié)構(gòu),C++語法分析的任務(wù)是在詞法分析基礎(chǔ)上,根據(jù)語言的語法規(guī)則,把詞法符號(hào)分解成各類語法單位。

反映句子結(jié)構(gòu)的***方法是樹,常用的有分析樹和語法樹。分析語法結(jié)構(gòu)的基本方法有兩種:自上而下分析方法和自下而上分析方法。自上而下分析從根到葉子建立分析樹,而自下而上分析恰好相反。在這兩種情況下,分析器都是從左到右地掃描輸入,每次讀進(jìn)一個(gè)記號(hào)。與C++詞法分析類似,語法分析也具有雙重含義:

①規(guī)定句子形成的規(guī)則,也被稱為語法規(guī)則。程序設(shè)計(jì)語言的大部分語法規(guī)則可以用上下文無關(guān)文法(ContextFreeGrammar,簡稱CFG)來描述。

②根據(jù)語法規(guī)則識(shí)別記號(hào)流中的評(píng)議結(jié)構(gòu),也被稱為語法分析。最有效的自上而下和自下而上的分析方法都只能處理上下文無關(guān)文法的子類,如LL文法和LR方法,但是它們已足以應(yīng)付程序設(shè)計(jì)評(píng)議的絕大多數(shù)語法現(xiàn)象。

一、任務(wù)與目的

1、使用C/C++程序設(shè)計(jì)語言和遞歸下降子程序的方法編寫該函數(shù)繪圖語言的C++詞法分析器。并要求設(shè)計(jì)一個(gè)語法分析器的測試小程序來調(diào)用自己編寫的語法分析器測試各種不同的輸入。

2、語法分析的任務(wù)是在C++詞法分析基礎(chǔ)上,根據(jù)語言的語法規(guī)則,把詞法符號(hào)分解成各類語法單位。語法分析所依據(jù)的是語言的語法規(guī)則,語法規(guī)則通常用上下文無關(guān)文法描述。#t#

通過自己動(dòng)手編寫語法分析器,掌握正規(guī)式與正規(guī)文法、上下文無關(guān)文法(CFG)、有推導(dǎo)的基本概念(推導(dǎo)、分析樹與語法樹、二義性及二義性的消除)、自上而下分析(遞歸下降子程序方法、預(yù)測分析表方法、LL(1)文法)、自下而上分析。理解如何理論聯(lián)系實(shí)際以及明白理論與實(shí)際的差別。

二、分析與設(shè)計(jì)

語法分析程序一般具有如下功能:對(duì)單詞符號(hào)串進(jìn)行語法分析(根據(jù)語義規(guī)則進(jìn)行推導(dǎo)和規(guī)約),識(shí)別出程序中的各類語法單位,最終判斷輸入串是否構(gòu)成語法上正確的“程序”。

這里我們采用遞歸下降分析方法:直接以程序的方式模擬產(chǎn)生式產(chǎn)生語言的過程。它的基本設(shè)計(jì)思想是:為每一個(gè)非終結(jié)符構(gòu)造一個(gè)子程序,每一個(gè)子程序的過程體中按該產(chǎn)生式的候選項(xiàng)分情況展開,遇到終結(jié)符直接匹配,而遇到非終結(jié)符就調(diào)用相應(yīng)非終結(jié)符的子程序。

該分析從調(diào)用文法開始符號(hào)的子程序開始,直到所有非終結(jié)符都展開為終結(jié)符并得到匹配為止。若分析過程中達(dá)到這一步則表明分析成功,否則表明輸入中有語法錯(cuò)誤。遞歸下降分析對(duì)文法的限制是不能有公共左因子和左遞歸。由于文法是遞歸定義的,因此子程序也是遞歸的。

對(duì)于規(guī)模比較小的語言,遞歸下降子程序方法是很有效的方法,它簡單靈活,容易構(gòu)造,其缺點(diǎn)是程序與文法直接相關(guān),對(duì)文法的任何改變均需對(duì)程序進(jìn)行相應(yīng)的修改。

這里給出C++詞法分析程序大概的設(shè)計(jì)方法:

1、根據(jù)要求寫出語法分析的上下文無關(guān)文法G;

2、消除上下文無關(guān)文法G的二義性;

3、消除上下文無關(guān)文法G的(直接)左遞歸,并提取左因子;

4、構(gòu)造文法的狀態(tài)轉(zhuǎn)換圖并且簡化;

5、將轉(zhuǎn)換圖轉(zhuǎn)化為EBNF表示;

6、從EBNF構(gòu)造遞歸下降子程序;

以下是較為詳細(xì)的設(shè)計(jì):

總體結(jié)構(gòu)與模塊劃分

語法測試模塊(parsermain.cpp)

語法分析器模塊(parser.h & parser.cpp)

繪圖語言解釋器入口

遞歸子程序集

先序遍歷并打印表達(dá)式的語法樹

出錯(cuò)處理模塊

 

 

詞法分析器模塊(scanner.h & scanner.cpp)

 

初使化詞法分析

識(shí)別出具有獨(dú)立意義的最小語法單位

輔助性模塊

責(zé)任編輯:chenqingxiang 來源: 計(jì)世網(wǎng)
相關(guān)推薦

2013-10-09 14:14:58

C++編譯

2010-02-02 09:32:32

C++ typedef

2010-01-27 15:54:49

C++實(shí)現(xiàn)程序

2010-01-11 14:05:01

C++學(xué)習(xí)方法

2010-02-06 17:27:03

C++ replace

2010-01-25 11:21:01

C++語法

2010-01-26 17:11:13

C++編程

2010-01-22 16:35:41

C++開發(fā)

2010-01-18 10:53:26

2010-01-21 18:00:59

C++語言

2010-01-22 15:53:55

C++轉(zhuǎn)換

2011-04-19 17:36:12

C++

2011-04-19 17:44:02

C++

2012-05-18 10:36:20

CC++編程

2010-01-25 14:31:07

C++類

2010-01-21 15:07:31

C++開發(fā)

2010-01-14 17:02:10

學(xué)習(xí)C++

2011-06-21 10:00:21

預(yù)處理指令

2011-05-31 18:31:13

C++

2010-01-15 19:49:04

C++類庫
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 国产精品无码专区在线观看 | 日韩久久久一区二区 | 狠狠做六月爱婷婷综合aⅴ 国产精品视频网 | 人操人人| 欧美中文在线 | 蜜桃精品在线 | 久久久久国产精品一区 | 亚洲九色| 最新日韩av | 国产传媒在线播放 | 欧美一区在线视频 | 天天摸天天干 | 成人精品网 | 麻豆亚洲 | 成人在线一区二区 | 欧美黄色片在线观看 | 水蜜桃久久夜色精品一区 | 精品丝袜在线 | 婷婷去俺也去 | 91精品国产综合久久国产大片 | 夜夜爽99久久国产综合精品女不卡 | 日韩欧美在线一区 | 久久噜噜噜精品国产亚洲综合 | 欧美成人自拍视频 | 91精品国产色综合久久不卡蜜臀 | 精品久久久久久中文字幕 | 精品亚洲国产成av人片传媒 | 久久精品中文字幕 | 亚洲成人日韩 | 美女爽到呻吟久久久久 | 久久国产精品视频 | 玖玖色在线视频 | 久久久精彩视频 | 超碰在线国产 | 中文字幕在线观看视频网站 | 亚洲精品免费视频 | 天天草狠狠干 | 成人影院在线视频 | 高清国产午夜精品久久久久久 | 在线免费观看一区二区 | 久久综合一区二区 |