『壹』 最好最快的畫程序框圖的軟體是什麼要能自動編寫程序代碼(BASIC語言),能編譯為EXE文件
《畫程》——高中演算法教學的得力助手
用戶直接把圖標拖動到流程線上,流程線自動擴展,而且程序代碼也立即自動生成,程序還可以直接編譯為EXE文件,馬上運行,實現從程序框圖到程序代碼的自動轉換,還可以保存所有各種文件(流程圖文件、源程序文件、編譯得到可執行文件、導出流程圖為圖片文件),它就是《畫程》——寓意象畫圖一樣畫出程序來!
從此,不用再絞盡腦汁編程了,只要掌握演算法,只要會畫流程圖,就能得到標准而優美的程序!徹底解放高中數學、信息老師和學生,不用去記演算法語言的語法,只須專注於演算法思想,用思想指揮電腦!
『貳』 編譯原理 詞法分析
C語言詞法分析器
#include<iostream>
#include<stdio.h>
#include<string>
using namespace std;
FILE *f; //定義一個文件變數
static int line = 1; //表示游標所在的行數
struct ID{ char *name; int count;}id[100];//用於存放ID號碼
static int I = 0; //用於記錄ID存放的數量
int Number[100]; //用於存放數字
static int P = 0; //用於記錄存放數字的個數
int error[100] = {0}; //用於記錄錯誤所在的行數
static int K = 0; //記錄錯誤次數
void Error(); //記錄錯誤
void loginID(char *); //注冊ID號
void loginNumber(int &); //記錄數字
void noteLine(char &); //記錄游標所在的行數
void print(); //輸出分析結果
int same(char *chr); //判斷單詞是否已經存在
void Error()
{ error[K++] = line; }
void loginID(char *chr) //注冊ID號
{
int k = 0;
int h = 0;
for(int i = 0; i < I; i++)
{
if(!strcmp(chr,id.name)) //如果單詞已經存在
{
id.count++;
k = 1;
}
}
if(k == 0) //該單詞不存在
{
h = I + 1;
//I = h;
id[h].count++;
id[h].name = chr;
//strcpy(id[h].name ,chr);
}
}
void loginNumber(int &nu)
{ Number[P++] = nu; }
void noteLine(char &ch)
{
if ( ch == ' ' )
++line;
}
void print()//輸出部分
{
//cout << "關鍵字以及變數:" << endl;
//for(int i = 0; i < 100; i++)
//cout << i <<" " << id.name << " " << id.count << endl;
cout << "數字:" << endl;
for(int i = 1; i <= P; i++)
cout << i << ": " << Number[i-1] << endl;
if(error[0] != 0)
{
cout << "出現的錯誤!" << endl;
for(int i = 1; i <= K; i++)
cout << "第" << i << "個錯誤: " << "第" << error[i-1] << "行" << endl;
}
else cout << "沒有錯誤!" << endl;
}
//文件處理部分
void noblank( char &ch) //跳過空格,回車
{
noteLine(ch);
while(ch == ' ' || ch == ' ')
ch = fgetc(f);
}
void identifier(char name[],char &ch)//字母變數
{
int i;
for(i = 0; i < 20; i++)
name = '';
i = 0;
while (('0'<= ch && ch <= '9')||('a'<= ch&&ch <= 'z')||('A'<= ch&&ch <='Z'))
{
name = ch;
i++;
ch = fgetc(f);
}
loginID(name);
//for(int j = 0; j < i; j++)
//{cout << name[j];}
// cout << ' ';
}
int number(char &ch)//數字
{
int num=0;
while('0'<= ch && ch <= '9')
{
num = num* 10 + (ch-'0');
ch = fgetc(f);
}
if( ('a'<= ch&&ch <= 'z')||('A'<= ch&&ch <='Z'))
{
Error();
}
else if( ch == '.')
{;}
loginNumber(num); //記錄數字
return num;
}
void test(char &ch)//符號
{
char str[2]={'0/'};
if(ch == '*')
{ str[0] = ch; ch = fgetc(f);}
if(ch == '.')
{ str[0] = ch; ch = fgetc(f);}
if(ch == ',')
{ str[0] = ch; ch = fgetc(f);}
if(ch == '"')
{ str[0] = ch; ch = fgetc(f);}
if(ch == '/')
{ str[0] = ch; ch = fgetc(f);}
if(ch == '%')
{ str[0] = ch; ch = fgetc(f);}
if(ch == '^')
{ str[0] = ch; ch = fgetc(f);}
if(ch == '-')
{ str[0] = ch; ch = fgetc(f);}
if(ch == '{')
{ str[0] = ch; ch = fgetc(f);}
if(ch == '}')
{ str[0] = ch; ch = fgetc(f);}
if(ch == '[')
{ str[0] = ch; ch = fgetc(f);}
if(ch == ']')
{ str[0] = ch; ch = fgetc(f);}
if(ch == ';')
{str[0] = ch; ch = fgetc(f);}
if(ch == ':')
{ str[0] = ch; ch = fgetc(f);}
if(ch == '?')
{ str[0] = ch; ch = fgetc(f);}
if(ch == '(')
{ str[0] = ch; ch = fgetc(f);}
if(ch == ')')
{str[0] = ch; ch = fgetc(f);}
if(ch =='+')
{
str[0] = ch;
if((ch = fgetc(f)) == '+' )
{
str[1] = ch;
ch = fgetc(f);
//cout << str[0] << str[1] << endl;
}
//cout << str[0]<< endl;
}
if(ch == '-')
{
str[0] = ch;
if((ch = fgetc(f)) == '-' )
{
str[1] = ch;
ch = fgetc(f);
//cout << str[0] << str[1] << endl;
}
//cout << str[0]<< endl;
}
if(ch == '&')
{
str[0] = ch;
if((ch = fgetc(f)) == '&' )
{
str[1] = ch;
ch = fgetc(f);
//cout << str[0] << str[1] << endl;
}
//cout << str[0]<< endl;
}
if(ch == '|')
{
str[0] = ch;
if((ch = fgetc(f)) == '|' )
{
str[1] = ch;
ch = fgetc(f);
//cout << str[0] << str[1] << endl;
}
//cout << str[0]<< endl;
}
if(ch == '!')
{
str[0] = ch;
if((ch = fgetc(f)) == '=' )
{
str[1] = ch;
ch = fgetc(f);
//cout << str[0] << str[1] << endl;
}
//cout << str[0]<< endl;
}
if(ch == '=')
{
str[0] = ch;
if((ch = fgetc(f)) == '=' )
{
str[1] = ch;
ch = fgetc(f);
//cout << str[0] << str[1] << endl;
}
}
if(ch == '>')
{
str[0] = ch;
if((ch = fgetc(f)) == '=' )
{
str[1] = ch;
ch = fgetc(f);
//cout << str[0] << str[1] << endl;
}
else
if(ch == '>' )
{
str[1] = ch;
ch = fgetc(f);
//cout << str[0] << str[1] << endl;
}
}
if(ch == '<')
{
str[0] = ch;
if((ch = fgetc(f)) == '=' )
{
str[1] = ch;
ch = fgetc(f);
}
else
if(ch == '<' )
{
str[1] = ch;
ch = fgetc(f);
}
}
}
int main()
{
char ch;
char name[30];
for(int i = 0; i < 30; i++)
name = '/0';
f = fopen("c.txt","r"); //打開指定輸入文件
if (f == NULL)
cout<<"文件不存在!"<<endl;
ch = fgetc(f);
while(!feof(f))
{
noblank( ch ); //跳過回車,空格
if( ( ch >= 'a' && ch <= 'z' )||( ch >= 'A' && ch <= 'Z' ))
{ identifier(name,ch); } //處理字母
else if( ch >= '0'&& ch <= '9')
{ number(ch); } //處理數字
else
{ test(ch); } //處理符號
}
print(); //列印詞法分析結果
fclose(f); //關閉文件
system("pause");
return 0;
}
『叄』 verilog怎樣生成原理框圖
RTL視圖
編譯通過後
Tools --> Netlist Viewers ----> RTL Viewer
框圖的生成為 :
File -- >Create/Update ---> Create Symbol Files for Current file
『肆』 高級語言、低級語言、偽代碼、編譯程序、匯編程序、解釋程序、機器語言、自然語言、流程圖
高級語言是相對於低級語言說的,低級語言官方名稱為匯編語言,就是計算機的硬體能直接識別並執行的語言,高級語言不能被計算直接識別必須由計算轉換成匯編語言才能執行。
偽代碼是編寫者為了方便、減化程序,讓程序更加簡捷、明了、直觀的編寫程序,方便自己和讀者讀懂程序自己定義一的指令,就像為了方便稱乎你而不用描述你長什麼樣、穿什麼衣服等等給你起的名字一樣。
編譯程序是編寫程序的過程,就像你把中文翻譯成英文的過程就叫翻譯一樣,只不過那個叫編譯,因為它不只是要翻譯,還要編寫。
匯編程序是由匯編語言直接編寫的一段完整的代碼,能夠表達編寫者的意圖、目的一段代碼,就如同游戲程序一樣,能夠執行的就像你要做一個程序算出一個值一樣,必須完整的才叫程,不完整的只能叫一段匯編代碼,因為它不能執行或不能完整的表達作者的意圖。
解釋程序就是了解編寫者的目的、意圖對其編寫好的程序逐行分析並加以解釋。
機器語言就是比匯編更加基礎的一類語言,就是二進制代碼比如說不得010111000011001之類的語言,能直接被計算執行,其實計算是讀不懂匯編語言的,必須由內存中事先存好的機器語言對匯編語言的定義,比如說啊move這個是匯編語言中的移動指令,咱人能讀懂是因為事先有人把這個語言存在人的大腦里了,但計算機不懂啊,所以必須轉化為機器語言再執行。
自然語言就是自然話了,就是人能讀懂的語言,電腦不一定明白的話,就象中國話一樣。
流程圖是編寫者為了方便編寫程序或直觀的分析程序上下句之間的過程,自己畫的一個流程圖,就象你要去吃飯,但不知怎麼去吃飯的地方,這樣給你畫一個路線圖就明白了。