ast語(yǔ)法分析 編譯原理中的抽象語(yǔ)法樹(shù)(AST)為什么而存在?
編譯原理中的抽象語(yǔ)法樹(shù)(AST)為什么而存在?程序是人類生活的邏輯,程序編制機(jī)器可執(zhí)行指令表。為了確保指令能夠逐一正確運(yùn)行,需要規(guī)范。因此,編譯的過(guò)程就是將程序員編寫(xiě)的代碼轉(zhuǎn)換成機(jī)器能夠識(shí)別的語(yǔ)言。為
編譯原理中的抽象語(yǔ)法樹(shù)(AST)為什么而存在?
程序是人類生活的邏輯,程序編制機(jī)器可執(zhí)行指令表。為了確保指令能夠逐一正確運(yùn)行,需要規(guī)范。因此,編譯的過(guò)程就是將程序員編寫(xiě)的代碼轉(zhuǎn)換成機(jī)器能夠識(shí)別的語(yǔ)言。
為了保證編譯的準(zhǔn)確性,必須保證代碼沒(méi)有問(wèn)題,那么如何保證呢?抽象語(yǔ)法樹(shù)在其中起著重要的作用。它可以檢測(cè)一段代碼是否符合規(guī)范,任何符合規(guī)范的代碼都可以被機(jī)器編譯和執(zhí)行。
這里有一個(gè)c語(yǔ)言的語(yǔ)法分析程序,該怎么使用,我想得到它的語(yǔ)法樹(shù),然后在上面提取循環(huán)語(yǔ)句信息?
在計(jì)算機(jī)科學(xué)中,抽象語(yǔ)法樹(shù)(abstract syntax tree,簡(jiǎn)稱AST)或syntax tree,是源代碼抽象語(yǔ)法結(jié)構(gòu)的樹(shù)表示,這里特指編程語(yǔ)言的源代碼。
樹(shù)中的每個(gè)節(jié)點(diǎn)表示源代碼中的結(jié)構(gòu)。語(yǔ)法之所以“抽象”,是因?yàn)樗荒艽碚嬲Z(yǔ)法中的每一個(gè)細(xì)節(jié)。例如,嵌套括號(hào)隱含在樹(shù)結(jié)構(gòu)中,不作為節(jié)點(diǎn)表示;而條件跳轉(zhuǎn)語(yǔ)句(如if condition then)可以由具有兩個(gè)分支的節(jié)點(diǎn)表示。與抽象語(yǔ)法樹(shù)相比,具體語(yǔ)法樹(shù)通常被稱為解析樹(shù)。通常,在源代碼翻譯和編譯過(guò)程中,解析器會(huì)創(chuàng)建一個(gè)分析樹(shù)。一旦創(chuàng)建了AST,一些信息將被添加到后續(xù)處理中,比如語(yǔ)義分析階段。
AST是什么意思?。?/h2>
抽象語(yǔ)法樹(shù),又稱ast語(yǔ)法樹(shù),是指源代碼語(yǔ)法對(duì)應(yīng)的樹(shù)結(jié)構(gòu)。也就是說(shuō),對(duì)于特定編程語(yǔ)言中的源代碼,源代碼中的語(yǔ)句通過(guò)構(gòu)造語(yǔ)法樹(shù)映射到樹(shù)中的每個(gè)節(jié)點(diǎn)。JavaScript的語(yǔ)法分析與抽象語(yǔ)法樹(shù)