tiger.flex

来自「tiger run time supporting files」· FLEX 代码 · 共 88 行

FLEX
88
字号
package tiger.parse;
import tiger.errormsg.ErrorMsg;
%% 

%cup
%char
%state COMMENT

%{

private void newline() {
  errorMsg.newline(yychar);
}

private void err(int pos, String s) {
	errorMsg.error(pos, s);
}

private void err(String s) {
	err(yychar, s);
}

private java_cup.runtime.Symbol tok(int kind, Object value) {    
	return new java_cup.runtime.Symbol(kind, yychar, yychar+yylength(), value);
}

public Yylex(java.io.InputStream s, ErrorMsg e) {
  this(s);
  errorMsg = e;
}

private ErrorMsg errorMsg;

%}

%eofval{
{ 
	return tok(sym.EOF, null);
}
%eofval}       

LineTerminator = \r|\n|\r\n
WhiteSpace = [ \t\f]


%%

<YYINITIAL> {
	{LineTerminator}	{ newline(); }
	{WhiteSpace}	{ /* do nothing */ }
	
	/* Token : Keywords */
	
	"if"  { return tok(sym.IF, null); }
	"for"  { return tok(sym.FOR, null); }
	// to do ....
	
	/* Token : Identifiers */
	
	/*
		{Identifier} { return tok(sym.ID, yytext()); }
	*/
	
	/* Token : Integer */
	
	// should we check very long integer in there?
	[0-9]+ { return tok(sym.INT, new Integer(yytext())); }
	
	// or not?
	[0-9]+ { return tok(sym.INT, new String(yytext())); }
	
	/* Token : String */
  	// to do...
  	
  	/* Token : SEPARATORS AND OPERATORS */
	
	","	{ return tok(sym.COMMA, null); }
	"."	{ return tok(sym.DOT, null); }
	"+"	{ return tok(sym.PLUS, null); }
	
	"/*" { yybegin(COMMENT); }
	
	[^] { return tok(sym.error, yytext()); }
}

<COMMENT> {
	[^] { /* nothing*/ }
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?