『壹』 編譯器如何識別字元是關鍵字還是變數名的
編譯過程大概分這么幾步
首先用有限狀態自動機把代碼文本分割成一個一個的token,每個token是一個意義單位,
比如
int main(123);
就被分割成了
int
main
(
123
)
然後對token列表根據該語言的語法建立語法樹,在建立語法樹的過程中就要區分某個單詞是關鍵字還是標識符(也就是變數名),一般來講編譯器一般都有一個保留字列表,開始的時候都當作變數名看待,如果發現某個變數名出現在了保留字列表裡,就對其進行標識處理。
『貳』 vi編輯器下如何查找字元串
1、命令模式下輸入「/字元串」,例如「/wenhui 」。
2、如果查找下一個,按「n」即可。
3、要自當前游標位置向上搜索,請使用以下命令:
/wenhui Enter
其中,wenhui表示要搜索的字元。
4、要自當前游標位置向下搜索,請使用以下命令:
?wenhui Enter
按下 Enter鍵後,vi 將搜索指定wenhui,並將游標定位在wenhui的第一個字元處。
『叄』 c語言中如何判斷輸入的是字元還是數字
1、可以用sacnf或gets函數直接接收輸入的字元串,然後用循環遍歷字元串中每一個字元,判斷其是字母還是數字。
2、可以用循環調用getch()或getchar()函數來一個一個字元的接收輸入,同時判讀輸入的是字母還是數字。
3、假設字元c,滿足 (c>='a'&& c<='z')|| (c>='A' && c<='Z')就是字母,滿足 (c>=0 && c<=9)就是數字。
(3)編譯器怎樣識別字元擴展閱讀:
getch():
所在頭文件:conio.h
函數用途:從控制台讀取一個字元,但不顯示在屏幕上
函數原型:int getch(void)
返回值:讀取的字元
例如:
char ch;或int ch;
getch();或ch=getch();
用getch();會等待你按下任意鍵,再繼續執行下面的語句;
用ch=getch();會等待你按下任意鍵之後,把該鍵字元所對應的ASCII碼賦給ch,再執行下面的語句。
『肆』 在C語言中編譯器是如何讀取字元的
同學,你這個問題只需要加一個getchar();在scanf()後面就可以了
#include<stdio.h>
main()
{
inti,n;
printf(". ");
printf("enternumberofentriesintable:");
scanf("%d",&n);getchar();
for(i=1;i<=n;i++)
{
printf("%10d%10d ",i,i*i);
if(i%24==0)
{
printf("Pressentertocontinue... ");
while(getchar()!=' ')
printf("Pressentertocontinue... ");
}
}
return(0);
}
原因是:你輸入數字然後按回車,這些輸入是存儲到緩存中的,你可以把緩存想像成一個數組,而scanf("%d",&n);只讀取了數字,所以' '還保留在緩存數組中,你只要用getchar();把' ' "吸收"了,就可以了
『伍』 如何讓編譯器將特殊符號(比如)視為字元常量輸出
通常情況下,再特殊符號前邊加字元'\',如果要輸出的是「%d」則要在前面加上字元'%'
『陸』 編譯器怎麼區分標識符和字元
首先要清楚標識符和字元的定義
標識符是程序員自己規定的具有特定含義的單詞,比如類名稱,屬性名稱,變數名等。
舉例子就是 class string
字元是指計算機中使用的字母、數字、字和符號
舉例子就是 1,2,3,abc
然後要強調,編譯器是無法區分標識符和字元的,只有人事先為其規定好規則的情況下,編譯器才會按照標識符的方式去讀取。打個比方,我規定了class為類標識符,那當我程序里 出現了class test時,編譯器就會認為test是類而不是字元。不知道能不能理解,不過是個好問題
『柒』 c/c++ 編譯器如何區分char[] 與 char*
1、本身 char [] 和char * 就是不同的符號 編譯器自然能識別 。
2、你說的是符號表吧。 符號表主要是給鏈接器用的。
3、關鍵你要理解C/C++程序的存儲分布。
一個由c/C++編譯的程序佔用的內存分為以下幾個部分
1、棧區(stack)—由編譯器自動分配釋放,存放函數的參數值,局部變數的值等。其操作方式類似於
數據結構中的棧。
2、堆區(heap)—一般由程序員分配釋放,若程序員不釋放,程序結束時可能由OS回收。注意它與數據
結構中的堆是兩回事,分配方式倒是類似於鏈表,呵呵。
3、全局區(靜態區)(static)—全局變數和靜態變數的存儲是放在一塊的,初始化的全局變數和靜態
變數在一塊區域,未初始化的全局變數和未初始化的靜態變數在相鄰的另一塊區域。程序結束後由系統
釋放。
4、文字常量區—常量字元串就是放在這里的。程序結束後由系統釋放。
5、程序代碼區
這是一個前輩寫的,非常詳細
//main.cpp
int a=0; //全局初始化區
char *p1; //全局未初始化區
main()
{
int b;棧
char s[]="abc"; //棧
char *p2; //棧
char *p3="123456"; //123456\0在常量區,p3在棧上。
static int c=0; //全局(靜態)初始化區
p1 = (char*)malloc(10);
p2 = (char*)malloc(20); //分配得來得10和20位元組的區域就在堆區。
strcpy(p1,"123456"); //123456\0放在常量區,編譯器可能會將它與p3所向"123456"優化成一個地方。
}
stack:
由系統自動分配。例如,聲明在函數中一個局部變數int b;系統自動在棧中為b開辟空間
heap:
需要程序員自己申請,並指明大小,在c中malloc函數
如p1=(char*)malloc(10);
在C++中用new運算符
如p2=(char*)malloc(10);
但是注意p1、p2本身是在棧中的。
『捌』 編譯器識別一行字元是否符合語法,它的文法是什麼
應該有個文法規則表的,或許是用正則吧,但應該不僅僅是正則
『玖』 C語言如何判斷字元串中一個字元是否符合要求!
樓上差不多都說了,簡單的一句話就是變數的作用域。深究就是基本功不扎實。
這種問題你如果真的」確信「就是」D",但是卻return -1;
你為什麼不在函數裡面吧你所謂的「D"列印出來看看?經常所謂的認為,是錯的。
『拾』 C++ 編譯器怎樣對標識符進行解析
它是一個字元一個字元地讀入,之後在讀到認為不再是標識符時,再判斷前面讀進來的所有字元組成的字元串是不是標識符