有关于在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——点击“应用”(一定要点击应用,千万不要直接确定)



至此,成功:




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