有關於在VS2013中配置Parser Generator的步驟詳解

  自己在配置環境的時候花了很長時間,走了很多彎路,發現網上的資料比較少,也不夠系統,所以寫一下我的配置步驟。

  首先在PG(Paser Generator)中先寫一個測試文檔(只創建了Yacc文件,功能是進行簡單的加減乘除,只能輸入1-9):

%{
/****************************************************************************
myparser.y
ParserWizard generated YACC file.

Date: 2016年10月19日
****************************************************************************/
#include <ctype.h>
#include <stdio.h>
%}

/////////////////////////////////////////////////////////////////////////////
// declarations section
%include {
#ifndef YYSTYPE
#define YYSTYPE double
#endif
}

// place any declarations here
%left '+' '-'
%left '*' '/'
%right UMINUS

%%

/////////////////////////////////////////////////////////////////////////////
// rules section

// place your YACC rules here (there must be at least one)

lines	:	lines expr '\n'	{ printf("%g\n", $2); }
		|	lines '\n'
		|
		;

expr	:	expr '+' expr	{ $$ = $1 + $3; }
		|	expr '-' expr	{ $$ = $1 - $3; }
		|	expr '*' expr	{ $$ = $1 * $3; }
		|	expr '/' expr	{ $$ = $1 / $3; }
		|	'(' expr ')'	{ $$ = $2; }
		|	'-' expr %prec UMINUS	{ $$ = -$2; }
		|	NUMBER
		;
NUMBER	:	'0'				{ $$ = 0.0; }
		|	'1'				{ $$ = 1.0; }
		|	'2'				{ $$ = 2.0; }
		|	'3'				{ $$ = 3.0; }
		|	'4'				{ $$ = 4.0; }
		|	'5'				{ $$ = 5.0; }
		|	'6'				{ $$ = 6.0; }
		|	'7'				{ $$ = 7.0; }
		|	'8'				{ $$ = 8.0; }
		|	'9'				{ $$ = 9.0; }
		;
%%

/////////////////////////////////////////////////////////////////////////////
// programs section

int yygettoken(void)
{
	// place your token retrieving code here
	return getchar();
}

int main(void)
{
	return yyparse();
}
經編譯後通過:


之後就進行在VS2013中的配置(其餘版本在細節部分可能會有差異):

1.先創建一個Win32控制檯項目,爲空項目(我創建的項目名爲PGTry3)。

2.將Yacc編譯後的C文件和頭文件放在項目中的對應位置。(注意一定加入的是C文件而不是C++文件,否則會出錯)


3.但此時進行Release編譯會報錯:


說明我們沒有引入所需要的資源文件。

4.進行項目配置。

(1)點擊項目中的屬性,彈出對話框:

                       

(2)點擊VC++目錄。假設PG的安裝目錄爲Directory(注意,一定是安裝到的目錄,而不是快捷方式的目錄,或者安裝程序所在目錄),分別修改包含目錄,庫目錄,源目錄。

包含目錄:Directory/Cpp/Include

庫目錄:Directory/Cpp/Lib/msvc32(這個目錄可能存在問題,因爲有的電腦和msvc32不會兼容,這個時候需要自己配置庫。我的電腦是win10,用的是VS2013,這個庫是可以用的)。

源目錄:Directory/Cpp/Source(可以不進行修改)



此時再進行編譯,會出現如下錯誤:


(3)所以還需要以下操作:

屬性——代碼生成——運行庫選擇“多線程(/MT)”



鏈接庫——輸入——ylmt.lib


此時按照正常情況來說應該編譯成功了,但我的電腦出了以下問題:

解決方案如下:
鏈接器——命令行——其他選項中輸入:/SAFESEH:NO——點擊“應用”(一定要點擊應用,千萬不要直接確定)



至此,成功:




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章