我已經用cygwin使用flex,它工作得很好,所以我安裝了flex for windows,因爲我需要一個windows版本的程序。當我試圖創建詞法分析器我得到的消息:Flex:無法創建
flex: could not create.
這裏的文件(它具有Cygwin的作品):
%{
#include "Ast.h"
#include "Parser.hpp"
#include <stdio.h>
#include <string>
#define SAVE_TOKEN_STR yylval.string = new std::string(yytext, yyleng)
#define TOKEN(t) (yylval.token = t)
%}
%%
[0-9]+ { SAVE_TOKEN_STR; return INTEGER; }
[0-9]+\.[0-9]+ { SAVE_TOKEN_STR; return FLOAT; }
[0-9]+(\.[0-9]+)?[eE][-+]?[0-9]+(\.[0-9]+)? { SAVE_TOKEN_STR; return SCIENTIFIC; }
"(" { return TOKEN(LPAR); }
")" { return TOKEN(RPAR); }
"{" { return TOKEN(LCBR); }
"}" { return TOKEN(RCBR); }
"[" { return TOKEN(LSQBR); }
"]" { return TOKEN(RSQBR); }
"+" { return TOKEN(PLUS); }
"-" { return TOKEN(MINUS); }
"*" { return TOKEN(STAR); }
"/" { return TOKEN(SLASH); }
"%" { return TOKEN(PERCENT); }
"**" { return TOKEN(EXPONENT); }
"=" { return TOKEN(ASSIGN); }
"==" { return TOKEN(EQ); }
"<>" { return TOKEN(NEQ); }
"<" { return TOKEN(LESS); }
"<=" { return TOKEN(LOE); }
"<=>" { return TOKEN(SPACESHIP); }
">" { return TOKEN(GREATER); }
">=" { return TOKEN(GOE); }
"!" { return TOKEN(NOT); }
"&&" { return TOKEN(AND); }
"||" { return TOKEN(OR); }
"not" { return TOKEN(NOT); }
"and" { return TOKEN(AND); }
"or" { return TOKEN(OR); }
"~" { return TOKEN(BITWISE_NOT); }
"&" { return TOKEN(BITWISE_AND); }
"|" { return TOKEN(BITWISE_OR); }
"^" { return TOKEN(BITWISE_XOR); }
"<<" { return TOKEN(BITWISE_LSHIFT); }
">>" { return TOKEN(BITWISE_RSHIFT); }
"~~" { return TOKEN(ROUND); }
"." { return TOKEN(DOT); }
".." { return TOKEN(RANGE); }
"..." { return TOKEN(TRANGE); }
"?" { return TOKEN(QUESTION_MARK); }
":" { return TOKEN(COLON); }
"in" { return TOKEN(IN); }
"," { return TOKEN(COMMA); }
[A-Za-z_][A-Za-z0-9_]* { SAVE_TOKEN_STR; return IDENT; }
[ \n\t] ;
. { printf("Illegal token!\n"); yyterminate(); }
%%
#ifndef yywrap
yywrap() { return 1; }
#endif
這裏就是我試圖執行命令:
flex -o Lexer.l Lexer.cpp
在cygwin中唯一的區別是我需要在命令中切換源和destionation文件名。
編輯:
如果我嘗試:
flex -o Lexer.cpp Lexer.l
我得到:
flex: can't open Lexer.cpp
它是否真的產生錯誤消息'flex:could not create.' like that,a period after following'create'? – rici
是的,這是確切的輸出 –
嗯,這很奇怪。格式字符串是「無法創建%s」,它有一個空格並且沒有'.'。由於特殊的參數解析策略,文件名是空字符串,所以我期望錯誤信息是「無法創建」的,最後有一個不可見的空間。但我想這只是一個小細節。 – rici