程式設計語法分析之從表示式說起

2022-03-04 17:46:35 字數 1012 閱讀 6317

在c語言中,分號「;」是語句結束的標誌,就相當於中文中的句號。表示一條語句的結束。反過來,「;"是語句的象徵,本身 ";"就表示一條語句,稱為空語句,一般用於佔位。比如while (1)  ; ;

第1個分號表示的是空語句,第2個分號表示的是語句結束符。主要區分表示式和語句的區別,在c語言中帶分號的就是語句,不帶分號的即為表示式。

而在accelerated c++ 一書中說到:「當乙個表示式後面緊跟乙個分號時,就表明系統讓我們丟掉這個返回值 」見第《accelerated c++》0章的第7節。

也就是說,表示式從巨集觀上講具體兩大作用:

1、表示式一定會返回乙個值!(有且只有乙個值)

2、整個表示式在計算時產生的變化。這個作用往往別稱之為表示式的***!

於是我想了到巨集,巨集就沒有分號,如:帶引數的巨集還能像函式一樣返回乙個值!結合表示式的第乙個作用就很好理解了。

還有在if判斷裡也是(沒有分號的)表示式,如if(1+(a = b -1))這個表示式看起來奇葩,但是也是符合語法的。a = b - 1就是乙個表示式,他其實就乙個值!只不過這個表示式的返回值和a的值是一致的。所以很多複雜的表示式如果你將其看成乙個值,就會簡化不少。當然如何看,必須結合「優先順序」以及「結合律」來看了。具體內容請看下節,《程式設計語法分析之「優先順序」和「結合律」》。

再聯想一下函式,函式分為有返回值和沒有返回值的函式。

一、有返回值的函式和「表示式」一樣,有兩大作用:

1、有返回值的函式一定會返回乙個值!(有且只有乙個值)

2、整個函式內容在計算時產生的變化。

二、沒有返回值的函式就好比「語句」不在結果,而在乎過程中發生的變化。

於是乎,有了一點感悟:(題外話)

乙個問題想不通,無外乎兩點:

1、沒有認清本質

2、需要根據條件,分類討論(總有例外)

表示式語法分析

表示式語法分析 遞迴子程式法 time limit 1000 ms memory limit 65536 kib problem description 遞迴子程式法是一種確定的自頂向下語法分析方法,要求文法是ll 1 文法。它的實現思想是對應文法中每個非終結符編寫乙個遞迴過程,每個過程的功能是識別...

語法分析 算術表示式遞迴下降分析程式設計

1 實驗目的 1 掌握自上而下語法分析的要求與特點。2 掌握遞迴下降語法分析的基本原理和方法。3 掌握相應資料結構的設計方法。2 實驗內容 程式設計實現給定算術表示式的遞迴下降分析器。算術表示式文法如下 e e t t t t f f f e i 3 設計說明 首先改寫文法為ll 1 文法 然後為每...

語法分析 算術表示式遞迴下降分析程式設計

1 實驗目的 1 掌握自上而下語法分析的要求與特點。2 掌握遞迴下降語法分析的基本原理和方法。3 掌握相應資料結構的設計方法。2 實驗內容 程式設計實現給定算術表示式的遞迴下降分析器。算術表示式文法如下 e e t t t t f f f e i 3 設計說明 首先改寫文法為ll 1 文法 然後為每...