构建Cool语言的编译器

时间:2015-05-05 13:23:17

标签: flex-lexer lexical-analysis

我正在为Cool语言构建一个lex工具。可以在此处找到更好的语言定义:http://theory.stanford.edu/~aiken/software/cool/cool.html 我在编译代码时遇到了一些麻烦。行#include <string>#include <iostream>中可能存在一些错误,因为错误显示在这些行中。有没有其他方法来包含字符串库?我的代码的一部分如下:

%{
#include <cool-parse.h>
#include <stringtab.h>
#include <utilities.h>
#include <string>
#include<iostream>

/* The compiler assumes these identifiers. */
#define yylval cool_yylval
#define yylex  cool_yylex

/* Max size of string constants */
 #define MAX_STR_CONST 1025
 #define YY_NO_UNPUT   /* keep g++ happy */

 extern FILE *fin; /* we read from this file */


 #undef YY_INPUT
 #define YY_INPUT(buf,result,max_size) \
 if ( (result = fread( (char*)buf, sizeof(char), max_size, fin)) < 0) \
    YY_FATAL_ERROR( "read() in flex scanner failed");

 char string_buf[MAX_STR_CONST]; /* to assemble string constants */
 char *string_buf_ptr;

 static int comment_layer = 0;

 extern int curr_lineno;
 extern int verbose_flag;

 extern YYSTYPE cool_yylval;

%}

/* ----- Definitions begin: */

DARROW          =>
DIGIT           [0-9]

/* ----- Definitions end. */

1 个答案:

答案 0 :(得分:1)

您是将生成的词法分析器编译为C ++程序还是C程序?如果您实际使用// including plugins var gulp = require('gulp') , minifyHtml = require("gulp-minify-html"); // task gulp.task('minify-html', function () { gulp.src('./Html/*.html') // path to your files .pipe(minifyHtml()) .pipe(gulp.dest('path/to/destination')); }); 但未更改生成的扫描程序名称的扩展名,则无法找到C ++标头。

另一方面,您自己标头的gcc行应使用#include而不是"filename"。尖括号表示头文件是库头,对于库头,不搜索包含源文件的目录。