當前位置:首頁 » 編程軟體 » 標識符屬性編譯原理

標識符屬性編譯原理

發布時間: 2023-07-27 09:33:51

編譯原理:c語言標識符的正則表達式

C語言中的標識符:
標識符由字母、數字、下劃線「_」組成,並且首字母不能是數字.
java語言中的標識符:
標識符由字母、數字、下劃線「_」、美元符號「$」組成,並且首字母不能是數字。
一般標識符由字母、數字、下劃線「_」組成
如果只能以下劃線、英文字母開頭,後跟單詞字元的話:
^[A-Za-z_][A-Za-z0-9_]*$

② 編譯原理:構造表示「標識符」的正則表達式標識符定義:以字母開頭的字母數字串,標識符可以有後綴,

^([A-Za-z]\w*)([.]([A-Za-z]\w*))*$

不知理解得對不對
比如
(java).(util).(Locale)
java util Locale三組都是以字母開頭,後接單詞字元(即[A-Za-z0-9_]的縮寫\w)的表達式

③ c語言中標識符是什麼

  • c語言中標識符是由字母(A-Z,a-z)、數字(0-9)、下劃線「_」組成,並且首字元不能是數字,但可以是字母或者下劃線。例如,正確的標識符:abc,a1,prog_to。C語言中把標識符分為三類:關鍵字,預定義標識符,用戶自定義標識符。

    • 標示符(IDentifier)是指用來標識某個實體的一個符號。在不同的應用環境下有不同的含義。在編程語言中,標識符就是程序員自己規定的具有特定含義的詞,比如類名稱,屬性名稱,變數名等。標識符可能是字、編號、字母、符號,也可能是由上述元素所組成。

    ④ 編譯原理實驗「C語言」檢查某段C源程序中,標識符的使用是否正確,即是否先聲明後使用,或

    #include "stdio.h" /*定義I/O庫所用的某些宏和變數*/
    #include "string.h" /*定義字元串庫函數*/
    #include "conio.h" /*提供有關屏幕窗口操作函數*/
    #include "ctype.h" /*分類函數*/
    char prog[80]=,
    token[8]; /*存放構成單詞符號的字元串*/
    char ch;
    int syn, /*存放單詞字元的種別碼*/
    n,
    sum, /*存放整數型單詞*/
    m,p; /*p是緩沖區prog的指針,m是token的指針*/
    char *rwtab[6]=;
    void scaner(){
    m=0;
    sum=0;
    for(n=0;n<8;n++)
    token[n]='\0';
    ch=prog[p++];
    while(ch==' ')
    ch=prog[p++];
    if(isalpha(ch)) /*ch為字母字元*/{
    while(isalpha(ch)||isdigit(ch)) /*ch 為字母字元或者數字字元*/{
    token[m++]=ch;
    ch=prog[p++];}
    token[m++]='\0';
    ch=prog[p--];
    syn=10;
    for(n=0;n<6;n++)
    if(strcmp(token,rwtab[n])==0) /*字元串的比較*/{
    syn=n+1;
    break;}}
    else
    if(isdigit(ch)) /*ch是數字字元*/{
    while(isdigit(ch)) /*ch是數字字元*/{
    sum=sum*10+ch-'0';
    ch=prog[p++];}
    ch=prog[p--];
    syn=11;}
    else
    switch(ch){
    case'<':m=0;token[m++]=ch;ch=prog[p++];
    if(ch=='>'){
    syn=21;
    token[m++]=ch;}
    else if(ch=='='){
    syn=22;
    token[m++]=ch;}
    else{
    syn=20;
    ch=prog[p--];}
    break;
    case'>':m=0;token[m++]=ch;ch=prog[p++];
    if(ch=='='){
    syn=24;
    token[m++]=ch;}
    else{
    syn=23;
    ch=prog[p--];}
    break;
    case':':m=0;token[m++]=ch;ch=prog[p++];
    if(ch=='='){
    syn=18;
    token[m++]=ch;}

    else{
    syn=17;
    ch=prog[p--];}
    break;
    case'+':syn=13;token[0]=ch;break;
    case'-':syn=14;token[0]=ch;break;
    case'*':syn=15;token[0]=ch;break;
    case'/':syn=16;token[0]=ch;break;
    case'=':syn=25;token[0]=ch;break;
    case';':syn=26;token[0]=ch;break;
    case'(':syn=27;token[0]=ch;break;
    case')':syn=28;token[0]=ch;break;
    case'#':syn=0;token[0]=ch;break;
    default:syn=-1;}}
    main()
    {
    printf("\n\nThe significance of the figures:\n"
    "1.figures 1 to 6 said Keyword\n"
    "2.figures 10 and 11 said Other indicators\n"
    "3.figures 13 to 28 said Operators\n");

    p=0;

    printf("\nplease input string:\n");
    do {
    ch=getchar();
    prog[p++]=ch;
    }while(ch!='#');

    p=0;

    do{
    scaner();
    switch(syn){
    case 11: printf("(%d,%d)\n",syn,sum);break;
    case -1: printf("\n ERROR;\n");break;
    default: printf("(%d,%s)\n",syn,token);
    }
    }while(syn!=0);

    getch();
    }
    程序測試結果
    對源程序begin x:=9: if x>9 then x:=2*x+1/3; end #的源文件,經過詞法分析後輸出如下圖5-1所示:

    具體的你在修改修改吧

    ⑤ 編譯器有哪幾部分構成.編譯原理

    1. 詞法分析

    詞法分析器根據詞法規則識別出源程序
    中的各個記號(token),每個記號代表一類單詞(lexeme)。源程序中常見的記號可以歸為幾大類:關鍵字、標識符、字面量和特殊符號。詞法分析器
    的輸入是源程序,輸出是識別的記號流。詞法分析器的任務是把源文件的字元流轉換成記號流。本質上它查看連續的字元然後把它們識別為「單詞」。

    2. 語法分析

    語法分析器根據語法規則識別出記號流中的結構(短語、句子),並構造一棵能夠正確反映該結構的語法樹。

    3. 語義分析

    語義分析器根據語義規則對語法樹中的語法單元進行靜態語義檢查,如果類型檢查和轉換等,其目的在於保證語法正確的結構在語義上也是合法的。

    4. 中間代碼生成

    中間代碼生成器根據語義分析器的輸出生成中間代碼。中間代碼可以有若干種形式,它們的共同特徵是與具體機器無關。最常用的一種中間代碼是三地址碼,它的一種實現方式是四元式。三地址碼的優點是便於閱讀、便於優化。

    ⑥ 【編譯原理】第二章:語言和文法



    上述文法 表示,該文法由終結符集合 ,非終結符集合 ,產生式集合 ,以及開始符號 構成。
    而產生式 表示,一個表達式(Expression) ,可以由一個標識符(Identifier) 、或者兩個表達式由加號 或乘號 連接、或者另一個表達式用括弧包裹( )構成。

    約定 :在不引起歧義的情況下,可以只寫產生式。如以上文法可以簡寫為:

    產生式

    可以簡寫為:

    如上例中,

    可以簡寫為:

    給定文法 ,如果有 ,那麼可以將符號串 重寫 為 ,記作 ,這個過程稱為 推導
    如上例中, 可以推導出 或 或 等等。

    如果 ,
    可以記作 ,則稱為 經過n步推導出 ,記作 。

    推導的反過程稱為 歸約

    如果 ,則稱 是 的一個 句型(sentential form )。

    由文法 的開始符號 推導出的所有句子構成的集合稱為 文法G生成的語言 ,記作 。
    即:


    文法

    表示什麼呢?
    代表小寫字母;
    代表數字;
    表示若干個字母和數字構成的字元串;
    說明 是一個字母、或者是字母開頭的字元串。
    那麼這個文法表示的即是,以字母開頭的、非空的字元串,即標識符的構成方式。

    並、連接、冪、克林閉包、正閉包。
    如上例表示為:

    中必須包含一個 非終結符


    產生式一般形式:
    即上式中只有當上下文滿足 與 時,才能進行從 到 的推導。

    上下文有關文法不包含空產生式( )。


    產生式的一般形式:
    即產生式左邊都是非終結符。

    右線性文法
    左線性文法
    以上都成為正則文法。
    即產生式的右側只能有一個終結符,且所有終結符只能在同一側。

    例:(右線性文法)

    以上文法滿足右線性文法。
    以上文法生成一個以字母開頭的字母數字串(標識符)。
    以上文法等價於 上下文無關文法

    正則文法能描述程序設計語言中的多數單詞。

    正則文法能描述程序設計語言中的多數單詞,但不能表示句子構造,所以用到最多的是CFG。

    根節點 表示文法開始符號S;
    內部節點 表示對產生式 的應用;該節點的標號是產生式左部,子節點從左到右表示了產生式的右部;
    葉節點 (又稱邊緣)既可以是非終結符也可以是終結符。

    給定一個句型,其分析樹的每一棵子樹的邊緣稱為該句型的一個 短語
    如果子樹高度為2,那麼這棵子樹的邊緣稱為該句型的一個 直接短語

    直接短語一定是某產生式的右部,但反之不一定。

    如果一個文法可以為某個句子生成 多棵分析樹 ,則稱這個文法是 二義性的

    二義性原因:多個if只有一個else;
    消岐規則:每個else只與最近的if匹配。

熱點內容
h6二代有哪些隱藏配置 發布:2025-02-06 04:11:09 瀏覽:606
c語言中的void是什麼意思 發布:2025-02-06 04:05:26 瀏覽:233
加密狗是啥 發布:2025-02-06 03:48:03 瀏覽:556
phpcopy文件 發布:2025-02-06 03:41:26 瀏覽:412
系統配置頁面怎麼設置 發布:2025-02-06 03:36:34 瀏覽:699
家庭電腦搭建流媒體伺服器 發布:2025-02-06 03:19:02 瀏覽:346
matlab稀疏矩陣存儲 發布:2025-02-06 03:07:54 瀏覽:840
國際服2b2t伺服器地址 發布:2025-02-06 03:06:28 瀏覽:392
c語言輸出b 發布:2025-02-06 03:06:27 瀏覽:33
普通火車wifi密碼多少 發布:2025-02-06 03:04:20 瀏覽:438