📄 calcscanner.jlex
字号:
package com.croftsoft.apps.compiler;
import java.io.*;
import java.text.*;
import java.util.*;
import java_cup.runtime.*;
/*********************************************************************
* Token scanner for Calc.
*
* <B>Reference:</B>
*
* <P>
*
* "JLex: A Lexical Analyzer Generator for Java"<BR>
* <A HREF="http://www.cs.princeton.edu/~appel/modern/java/JLex/">
* http://www.cs.princeton.edu/~appel/modern/java/JLex/</A>
*
* @author
* <A HREF="http://www.alumni.caltech.edu/~croft/">David W. Croft</A>
* @version
* 1999-03-15
*********************************************************************/
//////////////////////////////////////////////////////////////////////
// Portions of this code machine-generated by JLex.
//////////////////////////////////////////////////////////////////////
%%
%public
%class CalcScanner
%implements CalcSymbols
%function nextToken
%type Symbol
%line
%char
%cup
%eofval{
return new Symbol ( EOF );
%eofval}
WHITE_SPACE_CHAR=[\ \r\n\t\b\012]
WRITE="write"
ALPHA=[A-Za-z]
INTEGER=[0-9]+
VARIABLE={ALPHA}({ALPHA}|{INTEGER}|"_")*
SEMICOLON=";"
LPAREN="("
RPAREN=")"
EXP="^"
TIMES="*"
DIVIDE="/"
MOD="%"
PLUS="+"
MINUS="-"
GT=">"
LT="<"
GE=">="
LE="<="
EQ="=="
NEQ="!="
ASSIGN=":="
NONNEWLINE_WHITE_SPACE_CHAR=[\ \t\b\012]
STRING_TEXT=(\\\"|[^\n\"]|\\{WHITE_SPACE_CHAR}+\\)*
COMMENT_TEXT=([^/*\n]|[^*\n]"/"[^*\n]|[^/\n]"*"[^/\n]|"*"[^/\n]|"/"[^*\n])*
%{
//////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////
private static final String [ ] TEST_DATA = {
"1",
"22",
"333",
";",
"*",
"write(a);",
"bill_123" };
//////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////
public static void main ( String [ ] args )
throws Exception
//////////////////////////////////////////////////////////////////////
{
for ( int i = 0; i < TEST_DATA.length; i++ )
{
test ( TEST_DATA [ i ] );
}
}
public static void test ( String testText )
throws Exception
//////////////////////////////////////////////////////////////////////
{
Reader reader = new StringReader ( testText );
CalcScanner calcScanner = new CalcScanner ( reader );
Symbol symbol = null;
loop:
while ( ( symbol = calcScanner.nextToken ( ) ).sym != EOF )
{
System.out.println (
"Symbol: " + symbol + " Value: " + symbol.value );
}
}
public static Symbol scanInteger ( String text )
//////////////////////////////////////////////////////////////////////
{
try
{
return new Symbol ( INTEGER, new Integer ( text ) );
}
catch ( NumberFormatException ex )
{
return null;
}
}
//////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////
%}
%%
<YYINITIAL> {WRITE} { return new Symbol ( WRITE ); }
<YYINITIAL> {VARIABLE} { return new Symbol ( VARIABLE, yytext ( ) ); }
<YYINITIAL> {INTEGER} { return scanInteger ( yytext ( ) ); }
<YYINITIAL> {SEMICOLON} { return new Symbol ( SEMICOLON ); }
<YYINITIAL> {LPAREN} { return new Symbol ( LPAREN ); }
<YYINITIAL> {RPAREN} { return new Symbol ( RPAREN ); }
<YYINITIAL> {EXP} { return new Symbol ( EXP ); }
<YYINITIAL> {TIMES} { return new Symbol ( TIMES ); }
<YYINITIAL> {DIVIDE} { return new Symbol ( DIVIDE ); }
<YYINITIAL> {MOD} { return new Symbol ( MOD ); }
<YYINITIAL> {PLUS} { return new Symbol ( PLUS ); }
<YYINITIAL> {MINUS} { return new Symbol ( MINUS ); }
<YYINITIAL> {GT} { return new Symbol ( GT ); }
<YYINITIAL> {LT} { return new Symbol ( LT ); }
<YYINITIAL> {EQ} { return new Symbol ( EQ ); }
<YYINITIAL> {NEQ} { return new Symbol ( NEQ ); }
<YYINITIAL> {ASSIGN} { return new Symbol ( ASSIGN ); }
(.|\n) { yybegin ( YYINITIAL ); }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -