Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'org.eclipse.photran.core/model/org/eclipse/photran/internal/core/f95modelparser/FreeFormLexerPhase1.flex')
-rw-r--r--org.eclipse.photran.core/model/org/eclipse/photran/internal/core/f95modelparser/FreeFormLexerPhase1.flex415
1 files changed, 415 insertions, 0 deletions
diff --git a/org.eclipse.photran.core/model/org/eclipse/photran/internal/core/f95modelparser/FreeFormLexerPhase1.flex b/org.eclipse.photran.core/model/org/eclipse/photran/internal/core/f95modelparser/FreeFormLexerPhase1.flex
new file mode 100644
index 00000000..a4e2f3df
--- /dev/null
+++ b/org.eclipse.photran.core/model/org/eclipse/photran/internal/core/f95modelparser/FreeFormLexerPhase1.flex
@@ -0,0 +1,415 @@
+/*
+ * First phase of free form lexical analysis for Fortran 95 parser
+ *
+ * FreeFormLexerPhase1 acts as a "token stream" feeding FreeFormLexerPhase2
+ * (See FreeFormLexerPhase2.java and f95t.bnf)
+ *
+ * @author Jeffrey Overbey
+ *
+ * @see FreeFormLexerPhase2
+ * @see Parser
+ *
+ * NOTE: Get rid of (space out) "yybegin(YYINITIAL);" in the lines
+ * for any tokens that can appear in an IMPLICIT statement
+ * (It was also omitted in the lines for T_SLASH so that
+ * INTERFACE OPERATOR (/) would tokenize correctly.)
+ */
+
+package org.eclipse.photran.internal.core.f95parser;
+import java.util.List;
+import java.util.LinkedList;
+
+%%
+
+%class FreeFormLexerPhase1
+%throws Exception
+%char
+%line
+%column
+%implements ILexer
+%ignorecase
+%type Token
+%{
+ private Token token(Terminal terminal)
+ {
+ Token t = new Token();
+ t.setTerminal(terminal);
+ t.setFilename(this.filename);
+
+ if (terminal == Terminal.T_SCON)
+ {
+ String sbText = stringBuffer.toString();
+ t.setOffset(sbOffset);
+ t.setLength(sbText.length());
+ t.setText(sbText);
+ t.setStartLine(sbLine);
+ t.setStartCol(sbCol);
+ }
+ else
+ {
+ t.setOffset(yychar);
+ t.setLength(yylength());
+ t.setText(yytext());
+ t.setStartLine(yyline+1);
+ t.setStartCol(yycolumn+1);
+ }
+
+ // Iterate through the string to determine the ending line and column
+ t.setEndLine(t.getStartLine());
+ t.setEndCol(t.getStartCol()-1);
+ for (int i = 0; i < t.getLength(); i++)
+ {
+ if (t.getText().charAt(i) == '\n')
+ {
+ t.setEndLine(t.getEndLine()+1);
+ t.setEndCol(1);
+ }
+ else t.setEndCol(t.getEndCol()+1);
+ }
+
+ return t;
+ }
+
+ //public static void main(String[] args) throws Exception
+ //{
+ // FreeFormLexerPhase2 l = new FreeFormLexerPhase2(System.in);
+ // Parser.parse(l);
+ //}
+
+ private StringBuffer stringBuffer = null;
+
+ private boolean wantEos = false;
+
+ private int sbOffset = -1;
+ private int sbLine = -1;
+ private int sbCol = -1;
+
+ private String filename = "<stdin>";
+ public void setFilename(String fn)
+ {
+ filename = fn;
+ }
+
+ private List/*<NonTreeToken>*/ nonTreeTokens = new LinkedList();
+ public List/*<NonTreeToken>*/ getNonTreeTokens()
+ {
+ return nonTreeTokens;
+ }
+
+ private void storeNonTreeToken()
+ {
+ nonTreeTokens.add(new NonTreeToken(this.filename,
+ yychar, // int offset
+ yyline+1, // int row
+ yycolumn+1, // int col
+ yytext()));
+ }
+%}
+
+LineTerminator = \r\n|\n|\r
+WhiteSpace = [ \t\f]+
+
+Comment = "!" [^\r\n]*
+
+StarredType = ("*"[0-9]+)?
+
+Dig = [0-9]+
+EExp = ("E"|"e")("+"|"-")?{Dig}
+DExp = ("D"|"d")("+"|"-")?{Dig}
+Sig1 = ({Dig} "." [0-9]+ | "." {Dig})
+Sig2 = {Dig} "."
+Sig = {Sig1} | {Sig2}
+DdotD = {Dig} "." {Dig}
+Efw = [Ee] {Dig}
+Range = [a-zA-Z](-[a-zA-Z])?
+
+Bcon = ( B ' [0-1]+ ' | B \" [0-1]+ \" )
+Ocon = ( O ' [0-7]+ ' | O \" [0-7]+ \" )
+Zcon = ( Z ' [0-9A-Fa-f]+ ' | Z \" [0-9A-Fa-f]+ \" )
+
+Dcon1 = {Dig}{DExp} | {Sig}{DExp} | {Sig1}
+Dcon2 = {Sig2}
+Fcon = [IiBbOoZzFfDd] {WhiteSpace}* {DdotD} | (E [NnSs]? | e [NnSs]? | G | g) {WhiteSpace}* {DdotD} {Efw}?
+Icon = ( {Dig} | {Dig} ("E"|"e") {Dig} "." {Dig} )
+Pcon = ("+"|"-")? {Dig} (P|p)
+Rcon1 = {Dig}{EExp} | {Sig}{EExp} | {Sig1}
+Rcon2 = {Sig2}
+Xcon = {Dig} (X|x)
+Xdop = \. [A-Za-z]+ \.
+Ident = [A-Za-z][A-Za-z0-9_]*
+xImpl = "(" [ \t]* {Range} ([ \t]* "," [ \t]* {Range})* ")"
+xImplLkahead = [ \t\f]*(","|";"|{LineTerminator}|"!")
+
+NumDotLkahead = [^A-Za-z]
+
+LineContinuation = "&"(({WhiteSpace}|{Comment})*{LineTerminator})+({WhiteSpace}*"&")?
+
+CppIfdef="#ifdef"[^\r\n]*{LineTerminator}
+CppIfndef="#ifndef"[^\r\n]*{LineTerminator}
+CppIf="#if"[^\r\n]*{LineTerminator}
+CppElse="#else"[^\r\n]*{LineTerminator}
+CppElif="#elif"[^\r\n]*{LineTerminator}
+CppInclude="#include"[^\r\n]*{LineTerminator}
+CppDefine="#define"[^\r\n]*{LineTerminator}
+CppUndef="#undef"[^\r\n]*{LineTerminator}
+CppLine="#line"[^\r\n]*{LineTerminator}
+CppError="#error"[^\r\n]*{LineTerminator}
+CppPragma="#pragma"[^\r\n]*{LineTerminator}
+CppDirective={CppIfdef}|{CppIfndef}|{CppIf}|{CppElse}|{CppElif}|{CppInclude}|{CppDefine}|{CppUndef}|{CppLine}|{CppError}|{CppPragma}
+
+FortranInclude="INCLUDE"[^\r\n]*{LineTerminator}
+
+%state IMPLICIT
+%state QUOTED
+%state DBLQUOTED
+%state OPERATORorFORMAT
+
+%%
+
+/* Lexical rules */
+
+<YYINITIAL,IMPLICIT,OPERATORorFORMAT> {
+"ACCESS"[ \t]*"=" { wantEos = true; yybegin(YYINITIAL); return token(Terminal.T_ACCESSEQ); }
+"ACTION"[ \t]*"=" { wantEos = true; yybegin(YYINITIAL); return token(Terminal.T_ACTIONEQ); }
+"ADVANCE"[ \t]*"=" { wantEos = true; yybegin(YYINITIAL); return token(Terminal.T_ADVANCEEQ); }
+"ALLOCATABLE" { wantEos = true; yybegin(YYINITIAL); return token(Terminal.T_ALLOCATABLE); }
+"ALLOCATE" { wantEos = true; yybegin(YYINITIAL); return token(Terminal.T_ALLOCATE); }
+".AND." { wantEos = true; return token(Terminal.T_AND); }
+"ASSIGN" { wantEos = true; yybegin(YYINITIAL); return token(Terminal.T_ASSIGN); }
+"ASSIGNMENT" { wantEos = true; yybegin(YYINITIAL); return token(Terminal.T_ASSIGNMENT); }
+"*" { wantEos = true; return token(Terminal.T_ASTERISK); }
+"BACKSPACE" { wantEos = true; yybegin(YYINITIAL); return token(Terminal.T_BACKSPACE); }
+"BLANK"[ \t]*"=" { wantEos = true; yybegin(YYINITIAL); return token(Terminal.T_BLANKEQ); }
+"BLOCK" { wantEos = true; yybegin(YYINITIAL); return token(Terminal.T_BLOCK); }
+"BLOCK"[ \t]*"DATA" { wantEos = true; yybegin(YYINITIAL); return token(Terminal.T_BLOCKDATA); }
+"CALL" { wantEos = true; yybegin(YYINITIAL); return token(Terminal.T_CALL); }
+"CASE" { wantEos = true; yybegin(YYINITIAL); return token(Terminal.T_CASE); }
+"CHARACTER"{StarredType} { wantEos = true; return token(Terminal.T_CHARACTER); }
+"CLOSE" { wantEos = true; yybegin(YYINITIAL); return token(Terminal.T_CLOSE); }
+":" { wantEos = true; yybegin(YYINITIAL); return token(Terminal.T_COLON); }
+"," { wantEos = true; return token(Terminal.T_COMMA); }
+"COMMON" { wantEos = true; yybegin(YYINITIAL); return token(Terminal.T_COMMON); }
+"COMPLEX"{StarredType} { wantEos = true; return token(Terminal.T_COMPLEX); }
+"CONTAINS" { wantEos = true; yybegin(YYINITIAL); return token(Terminal.T_CONTAINS); }
+"CONTINUE" { wantEos = true; yybegin(YYINITIAL); return token(Terminal.T_CONTINUE); }
+"CYCLE" { wantEos = true; yybegin(YYINITIAL); return token(Terminal.T_CYCLE); }
+"DATA" { wantEos = true; yybegin(YYINITIAL); return token(Terminal.T_DATA); }
+"DEALLOCATE" { wantEos = true; yybegin(YYINITIAL); return token(Terminal.T_DEALLOCATE); }
+"DEFAULT" { wantEos = true; yybegin(YYINITIAL); return token(Terminal.T_DEFAULT); }
+"DELIM"[ \t]*"=" { wantEos = true; yybegin(YYINITIAL); return token(Terminal.T_DELIMEQ); }
+"DIMENSION" { wantEos = true; yybegin(YYINITIAL); return token(Terminal.T_DIMENSION); }
+"DIRECT"[ \t]*"=" { wantEos = true; yybegin(YYINITIAL); return token(Terminal.T_DIRECTEQ); }
+"DO" { wantEos = true; yybegin(YYINITIAL); return token(Terminal.T_DO); }
+"DOUBLE"{StarredType} { wantEos = true; return token(Terminal.T_DOUBLE); }
+"DOUBLEPRECISION"{StarredType} { wantEos = true; return token(Terminal.T_DOUBLEPRECISION); }
+"ELEMENTAL" { wantEos = true; yybegin(YYINITIAL); return token(Terminal.T_ELEMENTAL); }
+"ELSE" { wantEos = true; yybegin(YYINITIAL); return token(Terminal.T_ELSE); }
+"ELSEIF" { wantEos = true; yybegin(YYINITIAL); return token(Terminal.T_ELSEIF); }
+"ELSEWHERE" { wantEos = true; yybegin(YYINITIAL); return token(Terminal.T_ELSEWHERE); }
+"END" { wantEos = true; yybegin(YYINITIAL); return token(Terminal.T_END); }
+"ENDBLOCK" { wantEos = true; yybegin(YYINITIAL); return token(Terminal.T_ENDBLOCK); }
+"ENDBLOCKDATA" { wantEos = true; yybegin(YYINITIAL); return token(Terminal.T_ENDBLOCKDATA); }
+"ENDDO" { wantEos = true; yybegin(YYINITIAL); return token(Terminal.T_ENDDO); }
+"END"[ \t]*"=" { wantEos = true; yybegin(YYINITIAL); return token(Terminal.T_ENDEQ); }
+"ENDFILE" { wantEos = true; yybegin(YYINITIAL); return token(Terminal.T_ENDFILE); }
+"ENDFORALL" { wantEos = true; yybegin(YYINITIAL); return token(Terminal.T_ENDFORALL); }
+"ENDFUNCTION" { wantEos = true; yybegin(YYINITIAL); return token(Terminal.T_ENDFUNCTION); }
+"ENDIF" { wantEos = true; yybegin(YYINITIAL); return token(Terminal.T_ENDIF); }
+"ENDINTERFACE" { wantEos = true; yybegin(YYINITIAL); return token(Terminal.T_ENDINTERFACE); }
+"ENDMODULE" { wantEos = true; yybegin(YYINITIAL); return token(Terminal.T_ENDMODULE); }
+"ENDPROGRAM" { wantEos = true; yybegin(YYINITIAL); return token(Terminal.T_ENDPROGRAM); }
+"ENDSELECT" { wantEos = true; yybegin(YYINITIAL); return token(Terminal.T_ENDSELECT); }
+"ENDSUBROUTINE" { wantEos = true; yybegin(YYINITIAL); return token(Terminal.T_ENDSUBROUTINE); }
+"ENDTYPE" { wantEos = true; yybegin(YYINITIAL); return token(Terminal.T_ENDTYPE); }
+"ENDWHERE" { wantEos = true; yybegin(YYINITIAL); return token(Terminal.T_ENDWHERE); }
+"ENTRY" { wantEos = true; yybegin(YYINITIAL); return token(Terminal.T_ENTRY); }
+"EOR"[ \t]*"=" { wantEos = true; yybegin(YYINITIAL); return token(Terminal.T_EOREQ); }
+".EQ." { wantEos = true; return token(Terminal.T_EQ); }
+"==" { wantEos = true; return token(Terminal.T_EQEQ); }
+"=>" { wantEos = true; yybegin(YYINITIAL); return token(Terminal.T_EQGREATERTHAN); }
+"=" { wantEos = true; yybegin(YYINITIAL); return token(Terminal.T_EQUALS); }
+"EQUIVALENCE" { wantEos = true; yybegin(YYINITIAL); return token(Terminal.T_EQUIVALENCE); }
+".EQV." { wantEos = true; return token(Terminal.T_EQV); }
+"ERR"[ \t]*"=" { wantEos = true; yybegin(YYINITIAL); return token(Terminal.T_ERREQ); }
+"EXIST"[ \t]*"=" { wantEos = true; yybegin(YYINITIAL); return token(Terminal.T_EXISTEQ); }
+"EXIT" { wantEos = true; yybegin(YYINITIAL); return token(Terminal.T_EXIT); }
+"EXTERNAL" { wantEos = true; yybegin(YYINITIAL); return token(Terminal.T_EXTERNAL); }
+".FALSE." { wantEos = true; return token(Terminal.T_FALSE); }
+"FILE" { wantEos = true; yybegin(YYINITIAL); return token(Terminal.T_FILE); }
+"FILE"[ \t]*"=" { wantEos = true; yybegin(YYINITIAL); return token(Terminal.T_FILEEQ); }
+"FMT"[ \t]*"=" { wantEos = true; yybegin(YYINITIAL); return token(Terminal.T_FMTEQ); }
+"FORALL" { wantEos = true; yybegin(YYINITIAL); return token(Terminal.T_FORALL); }
+"FORMAT" { wantEos = true; yybegin(OPERATORorFORMAT); return token(Terminal.T_FORMAT); }
+"FORMATTED"[ \t]*"=" { wantEos = true; yybegin(YYINITIAL); return token(Terminal.T_FORMATTEDEQ); }
+"FORM"[ \t]*"=" { wantEos = true; yybegin(YYINITIAL); return token(Terminal.T_FORMEQ); }
+"FUNCTION" { wantEos = true; yybegin(YYINITIAL); return token(Terminal.T_FUNCTION); }
+".GE." { wantEos = true; return token(Terminal.T_GE); }
+"GO" { wantEos = true; yybegin(YYINITIAL); return token(Terminal.T_GO); }
+"GOTO" { wantEos = true; yybegin(YYINITIAL); return token(Terminal.T_GOTO); }
+">" { wantEos = true; return token(Terminal.T_GREATERTHAN); }
+">=" { wantEos = true; return token(Terminal.T_GREATERTHANEQ); }
+".GT." { wantEos = true; return token(Terminal.T_GT); }
+"IF" { wantEos = true; yybegin(YYINITIAL); return token(Terminal.T_IF); }
+"IMPLICIT" { wantEos = true; yybegin(IMPLICIT); return token(Terminal.T_IMPLICIT); }
+"IN" { wantEos = true; yybegin(YYINITIAL); return token(Terminal.T_IN); }
+"INOUT" { wantEos = true; yybegin(YYINITIAL); return token(Terminal.T_INOUT); }
+"INQUIRE" { wantEos = true; yybegin(YYINITIAL); return token(Terminal.T_INQUIRE); }
+"INTEGER"{StarredType} { wantEos = true; return token(Terminal.T_INTEGER); }
+"INTENT" { wantEos = true; yybegin(YYINITIAL); return token(Terminal.T_INTENT); }
+"INTERFACE" { wantEos = true; yybegin(YYINITIAL); return token(Terminal.T_INTERFACE); }
+"INTRINSIC" { wantEos = true; yybegin(YYINITIAL); return token(Terminal.T_INTRINSIC); }
+"IOLENGTH"[ \t]*"=" { wantEos = true; yybegin(YYINITIAL); return token(Terminal.T_IOLENGTHEQ); }
+"IOSTAT"[ \t]*"=" { wantEos = true; yybegin(YYINITIAL); return token(Terminal.T_IOSTATEQ); }
+"KIND"[ \t]*"=" { wantEos = true; return token(Terminal.T_KINDEQ); }
+".LE." { wantEos = true; return token(Terminal.T_LE); }
+"LEN"[ \t]*"=" { wantEos = true; return token(Terminal.T_LENEQ); }
+"<" { wantEos = true; return token(Terminal.T_LESSTHAN); }
+"<=" { wantEos = true; return token(Terminal.T_LESSTHANEQ); }
+"LOGICAL"{StarredType} { wantEos = true; return token(Terminal.T_LOGICAL); }
+"(" { wantEos = true; return token(Terminal.T_LPAREN); }
+".LT." { wantEos = true; return token(Terminal.T_LT); }
+"-" { wantEos = true; return token(Terminal.T_MINUS); }
+"MODULE" { wantEos = true; yybegin(YYINITIAL); return token(Terminal.T_MODULE); }
+"NAMED"[ \t]*"=" { wantEos = true; yybegin(YYINITIAL); return token(Terminal.T_NAMEDEQ); }
+"NAME"[ \t]*"=" { wantEos = true; yybegin(YYINITIAL); return token(Terminal.T_NAMEEQ); }
+"NAMELIST" { wantEos = true; yybegin(YYINITIAL); return token(Terminal.T_NAMELIST); }
+".NE." { wantEos = true; return token(Terminal.T_NE); }
+".NEQV." { wantEos = true; return token(Terminal.T_NEQV); }
+"NEXTREC"[ \t]*"=" { wantEos = true; yybegin(YYINITIAL); return token(Terminal.T_NEXTRECEQ); }
+"NML"[ \t]*"=" { wantEos = true; yybegin(YYINITIAL); return token(Terminal.T_NMLEQ); }
+"NONE" { wantEos = true; yybegin(YYINITIAL); return token(Terminal.T_NONE); }
+".NOT." { wantEos = true; return token(Terminal.T_NOT); }
+"NULL" { wantEos = true; return token(Terminal.T_NULL); }
+"NULLIFY" { wantEos = true; yybegin(YYINITIAL); return token(Terminal.T_NULLIFY); }
+"NUMBER"[ \t]*"=" { wantEos = true; yybegin(YYINITIAL); return token(Terminal.T_NUMBEREQ); }
+"ONLY" { wantEos = true; yybegin(YYINITIAL); return token(Terminal.T_ONLY); }
+"OPEN" { wantEos = true; yybegin(YYINITIAL); return token(Terminal.T_OPEN); }
+"OPENED"[ \t]*"=" { wantEos = true; yybegin(YYINITIAL); return token(Terminal.T_OPENEDEQ); }
+"OPERATOR" { wantEos = true; yybegin(OPERATORorFORMAT); return token(Terminal.T_OPERATOR); }
+"OPTIONAL" { wantEos = true; yybegin(YYINITIAL); return token(Terminal.T_OPTIONAL); }
+".OR." { wantEos = true; return token(Terminal.T_OR); }
+"OUT" { wantEos = true; yybegin(YYINITIAL); return token(Terminal.T_OUT); }
+"PAD"[ \t]*"=" { wantEos = true; yybegin(YYINITIAL); return token(Terminal.T_PADEQ); }
+"PARAMETER" { wantEos = true; yybegin(YYINITIAL); return token(Terminal.T_PARAMETER); }
+"PAUSE" { wantEos = true; yybegin(YYINITIAL); return token(Terminal.T_PAUSE); }
+"%" { wantEos = true; yybegin(YYINITIAL); return token(Terminal.T_PERCENT); }
+"+" { wantEos = true; return token(Terminal.T_PLUS); }
+"POINTER" { wantEos = true; yybegin(YYINITIAL); return token(Terminal.T_POINTER); }
+"POSITION"[ \t]*"=" { wantEos = true; yybegin(YYINITIAL); return token(Terminal.T_POSITIONEQ); }
+"**" { wantEos = true; return token(Terminal.T_POW); }
+"PRECISION" { wantEos = true; return token(Terminal.T_PRECISION); }
+"PRINT" { wantEos = true; yybegin(YYINITIAL); return token(Terminal.T_PRINT); }
+"PRIVATE" { wantEos = true; yybegin(YYINITIAL); return token(Terminal.T_PRIVATE); }
+"PROCEDURE" { wantEos = true; yybegin(YYINITIAL); return token(Terminal.T_PROCEDURE); }
+"PROGRAM" { wantEos = true; yybegin(YYINITIAL); return token(Terminal.T_PROGRAM); }
+"PUBLIC" { wantEos = true; yybegin(YYINITIAL); return token(Terminal.T_PUBLIC); }
+"PURE" { wantEos = true; yybegin(YYINITIAL); return token(Terminal.T_PURE); }
+"READ" { wantEos = true; yybegin(YYINITIAL); return token(Terminal.T_READ); }
+"READ"[ \t]*"=" { wantEos = true; yybegin(YYINITIAL); return token(Terminal.T_READEQ); }
+"READWRITE"[ \t]*"=" { wantEos = true; yybegin(YYINITIAL); return token(Terminal.T_READWRITEEQ); }
+"REAL"{StarredType} { wantEos = true; return token(Terminal.T_REAL); }
+"REC"[ \t]*"=" { wantEos = true; yybegin(YYINITIAL); return token(Terminal.T_RECEQ); }
+"RECL"[ \t]*"=" { wantEos = true; yybegin(YYINITIAL); return token(Terminal.T_RECLEQ); }
+"RECURSIVE" { wantEos = true; yybegin(YYINITIAL); return token(Terminal.T_RECURSIVE); }
+"RESULT" { wantEos = true; yybegin(YYINITIAL); return token(Terminal.T_RESULT); }
+"RETURN" { wantEos = true; yybegin(YYINITIAL); return token(Terminal.T_RETURN); }
+"REWIND" { wantEos = true; yybegin(YYINITIAL); return token(Terminal.T_REWIND); }
+")" { wantEos = true; return token(Terminal.T_RPAREN); }
+"SAVE" { wantEos = true; yybegin(YYINITIAL); return token(Terminal.T_SAVE); }
+"SELECT" { wantEos = true; yybegin(YYINITIAL); return token(Terminal.T_SELECT); }
+"SELECTCASE" { wantEos = true; yybegin(YYINITIAL); return token(Terminal.T_SELECTCASE); }
+"SEQUENCE" { wantEos = true; yybegin(YYINITIAL); return token(Terminal.T_SEQUENCE); }
+"SEQUENTIAL"[ \t]*"=" { wantEos = true; yybegin(YYINITIAL); return token(Terminal.T_SEQUENTIALEQ); }
+"SIZE"[ \t]*"=" { wantEos = true; yybegin(YYINITIAL); return token(Terminal.T_SIZEEQ); }
+"/" { wantEos = true; return token(Terminal.T_SLASH); }
+"/=" { wantEos = true; return token(Terminal.T_SLASHEQ); }
+"//" { wantEos = true; return token(Terminal.T_SLASHSLASH); }
+"STAT"[ \t]*"=" { wantEos = true; yybegin(YYINITIAL); return token(Terminal.T_STATEQ); }
+"STATUS"[ \t]*"=" { wantEos = true; yybegin(YYINITIAL); return token(Terminal.T_STATUSEQ); }
+"STOP" { wantEos = true; yybegin(YYINITIAL); return token(Terminal.T_STOP); }
+"SUBROUTINE" { wantEos = true; yybegin(YYINITIAL); return token(Terminal.T_SUBROUTINE); }
+"TARGET" { wantEos = true; yybegin(YYINITIAL); return token(Terminal.T_TARGET); }
+"THEN" { wantEos = true; yybegin(YYINITIAL); return token(Terminal.T_THEN); }
+"TO" { wantEos = true; yybegin(YYINITIAL); return token(Terminal.T_TO); }
+".TRUE." { wantEos = true; return token(Terminal.T_TRUE); }
+"TYPE" { wantEos = true; return token(Terminal.T_TYPE); }
+"_" { wantEos = true; yybegin(YYINITIAL); return token(Terminal.T_UNDERSCORE); }
+"UNFORMATTED"[ \t]*"=" { wantEos = true; yybegin(YYINITIAL); return token(Terminal.T_UNFORMATTEDEQ); }
+"UNIT"[ \t]*"=" { wantEos = true; yybegin(YYINITIAL); return token(Terminal.T_UNITEQ); }
+"USE" { wantEos = true; yybegin(YYINITIAL); return token(Terminal.T_USE); }
+"WHERE" { wantEos = true; yybegin(YYINITIAL); return token(Terminal.T_WHERE); }
+"WHILE" { wantEos = true; yybegin(YYINITIAL); return token(Terminal.T_WHILE); }
+"WRITE" { wantEos = true; yybegin(YYINITIAL); return token(Terminal.T_WRITE); }
+"WRITE"[ \t]*"=" { wantEos = true; yybegin(YYINITIAL); return token(Terminal.T_WRITEEQ); }
+{Bcon} { wantEos = true; return token(Terminal.T_BCON); }
+{Dcon1} { wantEos = true; return token(Terminal.T_DCON); }
+{Dcon2}/{NumDotLkahead} { wantEos = true; return token(Terminal.T_DCON); }
+{Fcon} { wantEos = true; return token(Terminal.T_FCON); }
+{Icon} { wantEos = true; return token(Terminal.T_ICON); }
+{Ident} { wantEos = true; return token(Terminal.T_IDENT); }
+{Ocon} { wantEos = true; return token(Terminal.T_OCON); }
+{Pcon} { wantEos = true; return token(Terminal.T_PCON); }
+{Rcon1} { wantEos = true; return token(Terminal.T_RCON); }
+{Rcon2}/{NumDotLkahead} { wantEos = true; return token(Terminal.T_RCON); }
+{Xcon} { wantEos = true; return token(Terminal.T_XCON); }
+{Xdop} { wantEos = true; return token(Terminal.T_XDOP); }
+{Zcon} { wantEos = true; return token(Terminal.T_ZCON); }
+"'" { stringBuffer = new StringBuffer();
+ stringBuffer.append('\'');
+ sbOffset = yychar;
+ sbLine = yyline+1;
+ sbCol = yycolumn+1;
+ yybegin(QUOTED); }
+\" { stringBuffer = new StringBuffer();
+ stringBuffer.append('\"');
+ sbOffset = yychar;
+ sbLine = yyline+1;
+ sbCol = yycolumn+1;
+ yybegin(DBLQUOTED); }
+{Comment} { storeNonTreeToken(); }
+{WhiteSpace} { }
+{CppDirective} { storeNonTreeToken(); }
+{FortranInclude} { storeNonTreeToken(); }
+{LineContinuation} { storeNonTreeToken(); }
+{LineTerminator}|";" { boolean b = wantEos; wantEos = false; if (b) return token(Terminal.T_EOS); }
+<<EOF>> { wantEos = false; yybegin(YYINITIAL); return token(Terminal.END_OF_INPUT); }
+}
+
+<IMPLICIT> {
+{xImpl}/{xImplLkahead} { wantEos = true; return token(Terminal.T_XIMPL); }
+{xImpl}$ { wantEos = true; return token(Terminal.T_XIMPL); }
+}
+
+<YYINITIAL,IMPLICIT> {
+"(/" { wantEos = true; yybegin(YYINITIAL); return token(Terminal.T_LPARENSLASH); }
+"/)" { wantEos = true; yybegin(YYINITIAL); return token(Terminal.T_SLASHRPAREN); }
+}
+
+<QUOTED> {
+"''" { stringBuffer.append('\''); }
+"'" { stringBuffer.append('\'');
+ yybegin(YYINITIAL);
+ wantEos = true;
+ return token(Terminal.T_SCON); }
+[^\n\r&']+ { stringBuffer.append( yytext() ); }
+{LineContinuation} { }
+"&" { stringBuffer.append( yytext() ); }
+[\n\r] { throw new Exception("Lexer Error (" + filename + ", line " + (yyline+1) + ", col " + (yycolumn+1) + "): String literal spans multiple lines without continuation"); }
+<<EOF>> { throw new Exception("Lexer Error (" + filename + ", line " + (yyline+1) + ", col " + (yycolumn+1) + "): End of file encountered before string literal terminated"); }
+}
+
+<DBLQUOTED> {
+\"\" { stringBuffer.append('\"'); }
+\" { stringBuffer.append('\"');
+ yybegin(YYINITIAL);
+ wantEos = true;
+ return token(Terminal.T_SCON); }
+[^\n\r&\"]+ { stringBuffer.append( yytext() ); }
+{LineContinuation} { }
+"&" { stringBuffer.append( yytext() ); }
+[\n\r] { throw new Exception("Lexer Error (" + filename + ", line " + (yyline+1) + ", col " + (yycolumn+1) + "): String literal spans multiple lines without continuation"); }
+<<EOF>> { throw new Exception("Lexer Error (" + filename + ", line " + (yyline+1) + ", col " + (yycolumn+1) + "): End of file encountered before string literal terminated"); }
+}
+
+/* Error */
+. { throw new Exception("Lexer Error (" + filename + ", line " + (yyline+1) + ", col " + (yycolumn+1) + "): Unexpected character " + yytext()); }

Back to the top