自己在配置環境的時候花了很長時間,走了很多彎路,發現網上的資料比較少,也不夠系統,所以寫一下我的配置步驟。
首先在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——點擊“應用”(一定要點擊應用,千萬不要直接確定)
至此,成功: