📄 clexer.lex
字号:
/* CLexer.java is a generated file. You probably want to * edit CLexer.lex to make changes. Use JFlex to generate it. * To generate CLexer.java * Install <a href="http://jflex.de/">JFlex</a> v1.3.2 or later. * Once JFlex is in your classpath run<br> * <code>java JFlex.Main CLexer.lex</code><br> * You will then have a file called CLexer.java *//* * This file is part of a <a href="http://ostermiller.org/syntax/">syntax * highlighting</a> package. * Copyright (C) 1999-2002 Stephen Ostermiller * http://ostermiller.org/contact.pl?regarding=Syntax+Highlighting * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * See COPYING.TXT for details. */package com.Ostermiller.Syntax.Lexer;import java.io.*;/** * CLexer is a c language lexer. Created with JFlex. An example of how it is used: * <CODE> * <PRE> * CLexer shredder = new CLexer(System.in); * CToken t; * while ((t = shredder.getNextToken()) != null){ * System.out.println(t); * } * </PRE> * </CODE> * * @see CToken */ %%%public%class CLexer%implements Lexer%function getNextToken%type Token %{ private int lastToken; private int nextState=YYINITIAL; /** * next Token method that allows you to control if whitespace and comments are * returned as tokens. */ public Token getNextToken(boolean returnComments, boolean returnWhiteSpace)throws IOException{ Token t = getNextToken(); while (t != null && ((!returnWhiteSpace && t.isWhiteSpace()) || (!returnComments && t.isComment()))){ t = getNextToken(); } return (t); } /** * Prints out tokens from a file or System.in. * If no arguments are given, System.in will be used for input. * If more arguments are given, the first argument will be used as * the name of the file to use as input * * @param args program arguments, of which the first is a filename */ public static void main(String[] args) { InputStream in; try { if (args.length > 0){ File f = new File(args[0]); if (f.exists()){ if (f.canRead()){ in = new FileInputStream(f); } else { throw new IOException("Could not open " + args[0]); } } else { throw new IOException("Could not find " + args[0]); } } else { in = System.in; } CLexer shredder = new CLexer(in); Token t; while ((t = shredder.getNextToken()) != null) { if (t.getID() != CToken.WHITE_SPACE){ System.out.println(t); } } } catch (IOException e){ System.out.println(e.getMessage()); } } /** * Closes the current input stream, and resets the scanner to read from a new input stream. * All internal variables are reset, the old input stream cannot be reused * (content of the internal buffer is discarded and lost). * The lexical state is set to the initial state. * Subsequent tokens read from the lexer will start with the line, char, and column * values given here. * * @param reader The new input. * @param yyline The line number of the first token. * @param yychar The position (relative to the start of the stream) of the first token. * @param yycolumn The position (relative to the line) of the first token. * @throws IOException if an IOExecption occurs while switching readers. */ public void reset(java.io.Reader reader, int yyline, int yychar, int yycolumn) throws IOException{ yyreset(reader); this.yyline = yyline; this.yychar = yychar; this.yycolumn = yycolumn; }%}%line%char%full%state MIDDLE_OF_LINE%state PREPROCESSORHASH=("#"|"??=")LBRACKET=("["|"??(")RBRACKET=("]"|"??)")BACKSLASH=([\\]|"??/")CARET=("^"|"??'")LBRACE=("{"|"??<")RBRACE=("}"|"??>")VERTICAL=("|"|"??!")TILDA=("~"|"??-")HexDigit=([0-9a-fA-F])Digit=([0-9])OctalDigit=([0-7])TetraDigit=([0-3])NonZeroDigit=([1-9])Letter=([a-zA-Z_])BLANK=([ ])TAB=([\t])FF=([\f])EscChar=({BACKSLASH})CR=([\r])LF=([\n])EOL=({CR}|{LF}|{CR}{LF})WhiteSpace=({BLANK}|{TAB}|{FF}|{EOL})NonBreakingWhiteSpace=({BLANK}|{TAB}|{FF})AnyNonSeparator=([^\t\f\r\n\ \(\)\{\}\[\]\;\,\.\=\>\<\!\~\?\:\+\-\*\/\&\|\^\%\"\']|{HASH}|{BACKSLASH})OctEscape1=({EscChar}{OctalDigit})OctEscape2=({EscChar}{OctalDigit}{OctalDigit})OctEscape3=({EscChar}{TetraDigit}{OctalDigit}{OctalDigit})OctEscape=({OctEscape1}|{OctEscape2}|{OctEscape3})HexEscape=({EscChar}[x|X]{HexDigit}{HexDigit})Escape=({EscChar}([a]|[b]|[f]|[n]|[r]|[t]|[v]|[\']|[\"]|[\?]|{BACKSLASH}|[0]))Identifier=({Letter}({Letter}|{Digit}|"$")*)ErrorIdentifier=({AnyNonSeparator}+)Comment=("//"[^\r\n]*)TradCommentBegin=("/*")DocCommentBegin =("/**")NonTermStars=([^\*\/]*[\*]+[^\*\/])TermStars=([\*]+[\/])CommentText=((([^\*]*[\/])|{NonTermStars})*)CommentEnd=([^\*]*{TermStars})TradComment=({TradCommentBegin}{CommentText}{CommentEnd})DocCommentEnd1=([^\/\*]{CommentText}{CommentEnd})DocCommentEnd2=({NonTermStars}{CommentText}{CommentEnd})DocComment=({DocCommentBegin}({DocCommentEnd1}|{DocCommentEnd2}|{TermStars}|[\/]))OpenComment=({TradCommentBegin}{CommentText}([^\*]*)([\*]*))LongSuffix=(([lL][uU]?)|([uU][lL]?))DecimalNum=(([0]|{NonZeroDigit}{Digit}*){LongSuffix}?)OctalNum=([0]{OctalDigit}*{LongSuffix}?)HexNum=([0]([x]|[X]){HexDigit}{HexDigit}*{LongSuffix}?)Sign=([\+\-])SignedInt=({Sign}?{Digit}+)Expo=([eE])ExponentPart=({Expo}{SignedInt})FloatSuffix=([fFlL])FloatWDecimal=(({Digit}*[\.]{Digit}+)|({Digit}+[\.]{Digit}*))Float1=({FloatWDecimal}{ExponentPart}?)Float2=({Digit}+{ExponentPart})Float=(({Float1}|{Float2}){FloatSuffix}?)ErrorFloat=({Digit}({AnyNonSeparator}|[\.])*)AnyChrChr=([^\'\n\r\\])TrigraphChar = ({HASH}|{LBRACKET}|{RBRACKET}|{CARET}|{LBRACE}|{RBRACE}|{VERTICAL}|{TILDA})UnclosedCharacter=([\']({Escape}|{OctEscape}|{HexEscape}|{TrigraphChar}|{AnyChrChr}))Character=({UnclosedCharacter}[\'])MalformedUnclosedCharacter=([\']({AnyChrChr}|({EscChar}[^\n\r]))*)MalformedCharacter=([\'][\']|{MalformedUnclosedCharacter}[\'])AnyStrChr=([^\"\n\r\\\?])SlashNewLine=({BACKSLASH}{EOL})FalseTrigraph= (("?"(("?")*)[^\=\(\)\/\'\<\>\!\-\\\?\"\n\r])|("?"[\=\(\)\/\'\<\>\!\-]))UnclosedString=([\"]((((("?")*)({Escape}|{OctEscape}|{HexEscape}|{TrigraphChar}))|{FalseTrigraph}|{AnyStrChr}|{SlashNewLine})*)(("?")*))String=({UnclosedString}[\"])MalformedUnclosedString=([\"]([^\"\n\r])*)MalformedString=({MalformedUnclosedString}[\"])PreProcessorKeyWord=("include"|"include_next"|"define"|"undef"|"if"|"ifdef"|"ifndef"|"else"|"elif"|"endif"|"line"|"pragma"|"error")PreProcessorEscapes=({EscChar}{EOL}|{EscChar})PreProcessorText=(([^\n\r\/]|{PreProcessorEscapes}|[\/][^\/\*\n\r]|[\/]{PreProcessorEscapes})*)PreProcessorDirective=({HASH}({NonBreakingWhiteSpace}*){PreProcessorKeyWord}{PreProcessorText})MalformedPreProcessorDirective=({HASH}({NonBreakingWhiteSpace}*)([^\/\n\r\ \t\f\\]*))%% <YYINITIAL> {PreProcessorDirective} { nextState = PREPROCESSOR; lastToken = CToken.PREPROCESSOR_DIRECTIVE; String text = yytext(); CToken t = (new CToken(lastToken,text,yyline,yychar,yychar+text.length(),nextState)); yybegin(nextState); return(t);}<PREPROCESSOR> {PreProcessorText} { lastToken = CToken.PREPROCESSOR_DIRECTIVE; String text = yytext(); CToken t = (new CToken(lastToken,text,yyline,yychar,yychar+text.length(),nextState)); return(t);}<YYINITIAL> {MalformedPreProcessorDirective} { nextState = PREPROCESSOR; lastToken = CToken.ERROR_MALFORMED_PREPROCESSOR_DIRECTIVE; String text = yytext(); CToken t = (new CToken(lastToken,text,yyline,yychar,yychar+text.length(),nextState)); yybegin(nextState); return(t);}<YYINITIAL, MIDDLE_OF_LINE> "(" { nextState = MIDDLE_OF_LINE; lastToken = CToken.SEPARATOR_LPAREN; String text = yytext(); CToken t = (new CToken(lastToken,text,yyline,yychar,yychar+text.length(),nextState)); yybegin(nextState); return (t); }<YYINITIAL, MIDDLE_OF_LINE> ")" { nextState = MIDDLE_OF_LINE; lastToken = CToken.SEPARATOR_RPAREN; String text = yytext(); CToken t = (new CToken(lastToken,text,yyline,yychar,yychar+text.length(),nextState)); yybegin(nextState); return (t);}<YYINITIAL, MIDDLE_OF_LINE> {LBRACE} { nextState = MIDDLE_OF_LINE; lastToken = CToken.SEPARATOR_LBRACE; String text = yytext(); CToken t = (new CToken(lastToken,text,yyline,yychar,yychar+text.length(),nextState)); yybegin(nextState); return (t);}<YYINITIAL, MIDDLE_OF_LINE> {RBRACE} { nextState = MIDDLE_OF_LINE; lastToken = CToken.SEPARATOR_RBRACE; String text = yytext(); CToken t = (new CToken(lastToken,text,yyline,yychar,yychar+text.length(),nextState)); yybegin(nextState); return (t);}<YYINITIAL, MIDDLE_OF_LINE> {LBRACKET} { nextState = MIDDLE_OF_LINE; lastToken = CToken.SEPARATOR_LBRACKET; String text = yytext(); CToken t = (new CToken(lastToken,text,yyline,yychar,yychar+text.length(),nextState)); yybegin(nextState); return (t);}<YYINITIAL, MIDDLE_OF_LINE> {RBRACKET} { nextState = MIDDLE_OF_LINE; lastToken = CToken.SEPARATOR_RBRACKET; String text = yytext(); CToken t = (new CToken(lastToken,text,yyline,yychar,yychar+text.length(),nextState)); yybegin(nextState); return (t);}<YYINITIAL, MIDDLE_OF_LINE> ";" { nextState = MIDDLE_OF_LINE; lastToken = CToken.SEPARATOR_SEMICOLON; String text = yytext(); CToken t = (new CToken(lastToken,text,yyline,yychar,yychar+text.length(),nextState)); yybegin(nextState); return (t);}<YYINITIAL, MIDDLE_OF_LINE> "," { nextState = MIDDLE_OF_LINE; lastToken = CToken.SEPARATOR_COMMA; String text = yytext(); CToken t = (new CToken(lastToken,text,yyline,yychar,yychar+text.length(),nextState)); yybegin(nextState); return (t);}<YYINITIAL, MIDDLE_OF_LINE> "." { nextState = MIDDLE_OF_LINE; lastToken = CToken.SEPARATOR_PERIOD; String text = yytext(); CToken t = (new CToken(lastToken,text,yyline,yychar,yychar+text.length(),nextState)); yybegin(nextState); return (t);}<YYINITIAL, MIDDLE_OF_LINE> "->" { nextState = MIDDLE_OF_LINE; lastToken = CToken.SEPARATOR_ARROW; String text = yytext(); CToken t = (new CToken(lastToken,text,yyline,yychar,yychar+text.length(),nextState)); yybegin(nextState); return (t);}<YYINITIAL, MIDDLE_OF_LINE> "=" { nextState = MIDDLE_OF_LINE; lastToken = CToken.OPERATOR_ASSIGN; String text = yytext(); CToken t = (new CToken(lastToken,text,yyline,yychar,yychar+text.length(),nextState)); yybegin(nextState); return (t);}<YYINITIAL, MIDDLE_OF_LINE> ">" { nextState = MIDDLE_OF_LINE; lastToken = CToken.OPERATOR_GREATER_THAN; String text = yytext(); CToken t = (new CToken(lastToken,text,yyline,yychar,yychar+text.length(),nextState)); yybegin(nextState); return (t);}<YYINITIAL, MIDDLE_OF_LINE> "<" { nextState = MIDDLE_OF_LINE; lastToken = CToken.OPERATOR_LESS_THAN; String text = yytext(); CToken t = (new CToken(lastToken,text,yyline,yychar,yychar+text.length(),nextState)); yybegin(nextState); return (t);}<YYINITIAL, MIDDLE_OF_LINE> "!" { nextState = MIDDLE_OF_LINE; lastToken = CToken.OPERATOR_LOGICAL_NOT; String text = yytext(); CToken t = (new CToken(lastToken,text,yyline,yychar,yychar+text.length(),nextState)); yybegin(nextState); return (t);}<YYINITIAL, MIDDLE_OF_LINE> {TILDA} { nextState = MIDDLE_OF_LINE; lastToken = CToken.OPERATOR_BITWISE_COMPLIMENT; String text = yytext(); CToken t = (new CToken(lastToken,text,yyline,yychar,yychar+text.length(),nextState)); yybegin(nextState); return (t);}<YYINITIAL, MIDDLE_OF_LINE> "?" { nextState = MIDDLE_OF_LINE; lastToken = CToken.OPERATOR_QUESTION; String text = yytext(); CToken t = (new CToken(lastToken,text,yyline,yychar,yychar+text.length(),nextState)); yybegin(nextState); return (t);}<YYINITIAL, MIDDLE_OF_LINE> ":" { nextState = MIDDLE_OF_LINE; lastToken = CToken.OPERATOR_COLON; String text = yytext(); CToken t = (new CToken(lastToken,text,yyline,yychar,yychar+text.length(),nextState)); yybegin(nextState); return (t);}<YYINITIAL, MIDDLE_OF_LINE> "+" { nextState = MIDDLE_OF_LINE; lastToken = CToken.OPERATOR_ADD; String text = yytext(); CToken t = (new CToken(lastToken,text,yyline,yychar,yychar+text.length(),nextState)); yybegin(nextState); return (t);}<YYINITIAL, MIDDLE_OF_LINE> "-" { nextState = MIDDLE_OF_LINE; lastToken = CToken.OPERATOR_SUBTRACT; String text = yytext(); CToken t = (new CToken(lastToken,text,yyline,yychar,yychar+text.length(),nextState)); yybegin(nextState); return (t);}<YYINITIAL, MIDDLE_OF_LINE> "*" { nextState = MIDDLE_OF_LINE; lastToken = CToken.OPERATOR_MULTIPLY; String text = yytext(); CToken t = (new CToken(lastToken,text,yyline,yychar,yychar+text.length(),nextState)); yybegin(nextState); return (t);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -