⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 calcscanner.jlex

📁 CroftSoft Code Library是一个开源的可移植的纯Java游戏库
💻 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 + -