?? main.cpp
字號:
/*
* file: main.cpp
* func: The main source file.
*/
// First 與 Follow 集生成程序
/*
* CFF v1.5
*
* 這是我的一個(gè)防 Bison 1.24 掃描器自動(dòng)生成器中的一部分,將它提取出來,以
* 方便大家在需要的時(shí)候使用。
* 本程序可以從輸入文件中讀取類似于 Bison1.24 中定義的上下文無關(guān)文法并對其
* 進(jìn)行處理,輸出其終結(jié)符集、非終結(jié)符集、產(chǎn)生式(文法)集、First與Follow集。
*
* CFF1.5 修改:
* 1) 可以對文法進(jìn)行化簡。
* 2) 增加 '.' 作為標(biāo)識符的一部分,其作用相當(dāng)于下劃線('_'),即現(xiàn)在
* a.ff 也可以是一個(gè)合法的標(biāo)識符名稱。
* 3) 支持絕大部分的 Bison1.24 語法規(guī)則,如 %token,%left,%right,%prec...,
* 注釋,文法動(dòng)作,嵌入式文法動(dòng)作等。
* 4) 程序結(jié)果輸出到獨(dú)立的文件中。
* 5) 取消命令行參數(shù)。
* 6) 為原始文法添加 “@start->開始符號” 的新產(chǎn)生式。
* 7) 修改了一些小錯(cuò)誤。
*/
#include <iostream>
#include <vector>
#include <string>
#include <fstream>
#include <cstdlib>
#include <algorithm>
#include "types.h"
#include "cmd.h"
#include "lex.h"
//#include "parse.h"
#include "first.h"
using std::cout;
using std::cin;
using std::endl;
sint32 main(sint32 argc,char *argv[])
{
// 命令行分析 ...
Cmd cmd(argc,argv);
// ....
if(argc <= 1)
{// 命令行參數(shù)為空。
cout<<"\n請輸入文法文件:";
std::string fname;
cin>>fname;
cmd.set_ifname(fname);
}
Lex lex(cmd.get_ifname());
First first(lex,cmd);
first.start_parse();
first.crt_First();
first.crt_Follow();
first.print_Version("--- Create by CFF 1.5 ---");
first.print_Terminals();
first.print_Nonterminals();
first.print_Rulers();
first.print_First();
first.print_Follow();
if (argc<=1)
system("pause");
return 0;
}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -