⑴ 一個編譯程序有幾部分構成
作為一個功能完整、且強大的編譯器,一般來說包括如下幾個部分:詞法分析、語法分析、語義分析(因為語法上正確的,但是語義不一定正確。例如:老虎吃人、人吃老虎,語法是正確的,都是主謂賓格式,且詞性相同,但是從語義分析上講就是錯誤的)、中間代碼生成、直到生成可執行程序。
⑵ 如何編輯一個c語言程序有關人的肥胖程度並進行簡單的的分級
總要放個代碼看看吧!!!編譯器不同可能處理方式不同有的編譯器case下面的多行語句必須要用{}括起來,否則後面的語句會忽略
⑶ 編譯程序的工作過程一般可以劃分為哪5個基本階段,還自始至終伴隨進行哪兩項工作
1、編譯程序把一個源程序翻譯成目標程序的工作過程分為五個階段:詞法分析;語法分析;中間代碼生成;代碼優化;目標代碼生成。
2、編譯程序的工作過程一般自始至終伴隨進行信息表管理和出錯處理兩項工作。
主要是進行詞法分析和語法分析,又稱為源程序分析,分析過程中發現有語法錯誤,給出提示信息。
(3)編譯一段程序分級擴展閱讀:
解釋程序是一種語言處理程序,在詞法、語法和語義分析方面與編譯程序的工作原理基本相同,但在運行用戶程序時,它直接執行源程序或源程序的內部形式(中間代碼)。因此,解釋程序並不產生目標程序,這是它和編譯程序的主要區別。解釋程序的工作過程如下:
1、由總控程序完成初始化工作。
2、依次從源程序中取出一條語句進行語法檢查,如有錯,輸出錯誤信息;如果通過了語法檢查,則根據語句翻澤成相應的指令並執行它。
3、檢查源程序是否已經全部解釋執行完畢,如果未完成則繼續解釋並執行下一條語句,直到全部語句都處理完畢。
⑷ 描述一般的編譯程序可分為哪些階段,每個階段的目的是什麼
其目的是保證標識符和常數的正確使用,把必要的信息...綜合部分 綜合階段必須根據符號表和中間語言程序產生...目標程序質量,也可以把一個邏輯步驟的工作分為幾遍.
⑸ java:編譯一段程序,根據考試成績給多個同學劃分等級。
import java.nio.Buffer;
import java.security.KeyStore.Builder;
import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;
//自己為你做的 主要是要同時列印出,必須先把他們都合成在一起,再一次列印,方法很多
public class levelForExam {
public static void main(String[] args) {
Map<String, Exam> map = new HashMap<String, Exam>();
System.out.println("請輸入共有幾名同學,(必須輸入整數)");// 確定循環次數
int n = new Scanner(System.in).nextInt();
for (int i = 0; i < n; i++) {
System.out.println("請輸入姓名");
String name = new Scanner(System.in).nextLine();
System.out.println("請輸入分數(必須輸入整數)");
int score = new Scanner(System.in).nextInt();
Exam exam = new Exam(name, score, levelSplit(score));
map.put(name, exam);
}
StringBuffer sb = new StringBuffer();
for (Object e : map.keySet()) {
String string = String.valueOf(map.get(e.toString()).toString());
sb.append(string);
}
System.out.println(sb);
// 只用一個語句列印出了所有信息,
// 你說是不是同時輸出多個人的等級???
}
public static String levelSplit(int score) {
String string = null;
if (score >= 90)
string = "A";
if (score >= 80 & score < 90)
string = "B";
if (score >= 70 & score < 80)
string = "C";
if (score >= 60 & score < 70)
string = "D";
if (score <= 59)
string = "E";
return string;
}
}
class Exam {
String name;
int score;
String level;
public Exam() {
}
public Exam(String name, int score, String level) {
this.name = name;
this.score = score;
this.level = level;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getScore() {
return score;
}
public void setScore(int score) {
this.score = score;
}
public String getLevel() {
return level;
}
public void setLevel(String level) {
this.level = level;
}
public String toString() {
return " 姓名:" + name + ", 分數:" + score + " 等級:" + level + "\n";
}
}
⑹ 編譯器是怎麼把程序分成代碼段數據段等的。。代碼段沒有數據要怎麼搞
根據你代碼的全局變數定義 或者靜態變數定義,在編譯的時候,為可執行程序分配一段空間用於存放這些變數。未初始化的全局變數存放在BSS段中,代碼段要是沒有上述變數,那數據段也就是空的。
⑺ 編譯程序分為哪幾個主要部分
1、詞法分析
詞法分析的任務是對由字元組成的單詞進行處理,從左至右逐個字元地對源程序進行掃描,產生一個個的單詞符號,把作為字元串的源程序改造成為單詞符號串的中間程序。執行詞法分析的程序稱為詞法分析程序或掃描器。
2、語法分析
編譯程序的語法分析器以單詞符號作為輸入,分析單詞符號串是否形成符合語法規則的語法單位,如表達式、賦值、循環等,最後看是否構成一個符合要求的程序,按該語言使用的語法規則分析檢查每條語句是否有正確的邏輯結構,程序是最終的一個語法單位。
3、中間代碼生成
中間代碼是源程序的一種內部表示,或稱中間語言。中間代碼的作用是可使編譯程序的結構在邏輯上更為簡單明確,特別是可使目標代碼的優化比較容易實現。中間代碼即為中間語言程序,中間語言的復雜性介於源程序語言和機器語言之間。
4、代碼優化
代碼優化是指對程序進行多種等價變換,使得從變換後的程序出發,能生成更有效的目標代碼。所謂等價,是指不改變程序的運行結果。所謂有效,主要指目標代碼運行時間較短,以及佔用的存儲空間較小。這種變換稱為優化。
5、目標代碼生成
目標代碼生成是編譯的最後一個階段。目標代碼生成器把語法分析後或優化後的中間代碼變換成目標代碼。
(7)編譯一段程序分級擴展閱讀:
特點
數據結構分析和綜合時所用的主要數據結構,包括符號表、常數表和中間語言程序。符號表由源程序中所用的標識符連同它們的屬性組成。
其中屬性包括種類(如變數、數組、結構、函數、過程等)、類型(如整型、實型、字元串、復型、標號等),以及目標程序所需的其他信息。常數表由源程序中用的常數組成,其中包括常數的機內表示,以及分配給它們的目標程序地址。
分析部分源程序的分析是經過詞法分析、語法分析和語義分析三個步驟實現的。詞法分析由詞法分析程序(又稱為掃描程序)完成。
其任務是識別單詞(即標識符、常數、保留字,以及各種運算符、標點符號等)、造符號表和常數表,以及將源程序換碼為編譯程序易於分析和加工的內部形式。
⑻ 編寫一個程序 任意輸入一個成績等級字母A B C D 輸出每個字母對應的分數段 直到輸入字母Q
#include<stdio.h>
void main()
{
char i;
while(1)
{
printf("輸入字母(大寫)\n");
scanf("%c",&i);
if(i=='\n')
continue;
switch(i)
{
case 'A':printf("90-100\n");
break;
case 'B':printf("80-89\n");
break;
case 'C':printf("61-79 \n");
break;
case 'D':printf("0-60 \n");
break;
case 'Q':printf("0-60 \n");
return;
break;
default:
printf("error\n");
}
}
}
⑼ C語言源程序的編譯過程包括哪三個階段
編譯:將源程序轉換為擴展名為.obj的二進制代碼
連接:將obj文件進行連接,加入庫函數等生成可執行文件
運行:執行可執行文件,有錯返回修改,無錯結束