這是我的輸入文件:野牛柔性新行沒有被識別
class Box{
integer x;
}
的解析識別標記CLASS,標識,{,然後它說下一個標記$未定義,然後它打印語法錯誤
當代碼是這樣一行:
class Box{integer x;}
它按預期工作...
所以,主要的問題是如何識別新線
編輯:這裏是Flex文件
declarations
%%
"\n" {return (NEWLINE); }
[ ]+ /* blank, tab, new line: eat up whitespace */
. {return(yytext[0]);}
%%
Auxiliary functions
我是否需要改變我的空白,標籤的一部分和新的行代碼:?
[ \t\n]+ /* blank, tab, new line: eat up whitespace */
. {return(yytext[0]);}
EDIT2:我的Flex文件是:
flex
%{
#include "arxeio.tab.h"
%}
KEF [A-Z]
MIK [a-z]
NUM [0-9]
US [_]
ID [A-Z]([A-Z]*[a-z]*[0-9]*[_]*)*|[a-z]([A-Z]*[a-z]*[0-9]*[_]*)*|[_]([A-Z]*[a-z]*[0-9]*[_]*)*
AR [0-9]+
%%
":=" {return (ASSGNOP); }
char {return (CHAR); }
else { return (ELSE); }
if {return (IF); }
integer {return (INTEGER); }
class {return (CLASS); }
new {return (NEW); }
return {return (RETURN); }
void {return (VOID); }
while {return (WHILE); }
{ID} {return(IDENTIFIER) ;}
{AR} {return (NUMBER); }
"\n" { fputs("<<newline>>\n", stderr); return (NEWLINE); }
"\"" {return (ET); }
"\'" {return (ET); }
"\0" {return (ET); }
"\t" {return (ET); }
"\\" {return (ET); }
[ \t\n]+ /* ignore spaces, tabulations,line breaks,blank, tab, new line: eat up whitespace*/
. {return(yytext[0]);}
%%
我野牛文件是:
%{
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
#define YYDEBUG 1
int yylex(void) ;
extern FILE *yyout;
int errors;
%}
%start program
%token CHAR ELSE IF INTEGER CLASS NEW RETURN VOID WHILE ASSGNOP
%token NUMBER NEWLINE
%token IDENTIFIER
%token KEF MIK NUM ET
%left '`''~''@''#''$''^''['']''{''}'',''_''?''.'';'':'
%left '|''&''!'
%left '>''<''='
%left '-''+'
%left '*''/''%'
%left '('')'
%expect 32
%%
...
...
...
program : CLASS IDENTIFIER '{'NEWLINE declar'}'
;
%%
main (int argc,char *argv[])
{extern FILE *yyin;
++argv;--argc;
yyin = fopen (argv[0],"r");
yydebug = 1;
errors = 0;
yyparse();
}
yyerror(char *errmsg)
{
fprintf(stderr, "%s\n",errmsg);
}
通常情況下,你的詞彙掃描儀將「跳過」換行,對待他們他們一樣的空白,除了增加輸入行計數器。當然,您可能會反對它們出現在字符串或字符常量內,並且它們會標記單行註釋的結尾,但所有這些都是在詞法掃描程序內部處理的。由於您未展示任何Flex代碼,因此我們無法多說。 –
@JonathanLeffler我已經更新了這個問題 – fxuser
請注意,'「/ n」'與*「非常不同'」\ n「'。 –