当前位置:我的异常网» C语言 » flex词法分析状态使用有关问题
flex词法分析状态使用有关问题
www.myexceptions.net 网友分享于:2013-11-09 浏览:10次
flex词法分析状态使用问题
%{
#include
#include "util.h"
#include "tokens.h"
#include "errormsg.h"
int charPos=1;
int yywrap(void)
{
charPos=1;
return 1;
}
void adjust(void)
{
EM_tokPos=charPos;
charPos+=yyleng;
}
%}
delim [ \t]
whitespace {delim}+
TraditionalComment ("/*"[^*]+"*/" | "/*""*"+"/")
LineTerminator ("\n"|"\r"|"\r\n"|"\n\r")
Comment "/*"([^\*]|(\*)*[^\*/])*(\*)*"*/"
DecIntergerLiteral ([0-9]+)
RealNum ([0-9]+"."[0-9]*) | ([0-9]*"."[0-9]+)
Identifier ([a-zA-Z_][a-zA-Z_0-9]*)
%s INITIAL1
%s STRING1
%%
{whitespace} {}
{Comment} {}
\" {adjust(); BEGIN(STRING1);}
"while" {adjust(); return WHILE;}
"for" {adjust(); return FOR;}
"to" {adjust(); return TO;}
"break" {adjust(); return BREAK;}
"let" {adjust(); return LET;}
"in" {adjust(); return IN;}
"end" {adjust(); return END;}
"function" {adjust(); return FUNCTION;}
"var" {adjust(); return VAR;}
"type" {adjust(); return TYPE;}
"array" {adjust(); return ARRAY;}
"if" {adjust(); return IF;}
"then" {adjust(); return THEN;}
"else" {adjust(); return ELSE;}
"do" {adjust(); return DO;}
"of" {adjust(); return OF;}
"nil" {adjust(); return NIL;}
"," {adjust(); return COMMA;}
":" {adjust(); return COLON;}
";" {adjust(); return SEMICOLON;}
"(" {adjust(); return LBRACK;}
")" {adjust(); return RBRACK;}
"[" {adjust(); return LPAREN;}
"]" {adjust(); return RPAREN;}
"{" {adjust(); return LBRACE;}
"}" {adjust(); return RBRACE;}
"." {adjust(); return DOT;}
"+" {adjust(); return PLUS;}
"-" {adjust(); return MINUS;}
"*" {adjust(); return TIMES;}
"/" {adjust(); return DIVIDE;}
"=" {adjust(); return EQ;}
"<>" {adjust(); return NEQ;}
"
"<=" {adjust(); return LE;}
">" {adjust(); return GT;}
">=" {adjust(); return GE;}
"&" {adjust(); return AND;}
"|" {adjust(); return OR;}
":=" {adjust(); return ASSIGN;}
{DecIntergerLiteral} {adjust(); yylval.ival=atoi(yytext); return INT;}
{Identifier} {adjust(); yylval.sval = String(yytext); return ID;}
{LineTerminator} {adjust(); EM_newline(); continue;}
\" {BEGIN(INITIAL1);adjust();yylval.sval = String(yytext);return STRING;}
[^\n\t\"\\]+ {yymore();}
\\t {yymore();}
\\n {yymore();}
\\\" {yymore();}
\\\\ {yymore();}
这个FLEX程序有什么错误啊
文章评论