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

📄 miniscanner.jlex

📁 CroftSoft Code Library是一个开源的可移植的纯Java游戏库
💻 JLEX
字号:
     package com.croftsoft.apps.compiler.mini.parse;

     import java.io.*;
     import java.text.*;
     import java.util.*;

     import java_cup.runtime.*;

     /*********************************************************************
     * Token scanner for the Mini programming language.
     *
     * <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-04-24
     *********************************************************************/

     //////////////////////////////////////////////////////////////////////
     // Portions of this code machine-generated by JLex.
     //////////////////////////////////////////////////////////////////////

%%

%public

%class       MiniScanner
%implements  MiniSymbols, CUPTokenScanner
%function    nextToken
%type        Symbol

%line
%char
%cup

%eofval{

  return new Symbol ( EOF );

%eofval}

WHITE_SPACE_CHAR=[\ \r\n\t\b\012]

BEGIN="begin"
CALL="call"
DO="do"
ELSE="else"
END="end"
IF="if"
INTEGER="integer"
FI="fi"
PROCEDURE="procedure"
READ="read"
THEN="then"
TO="to"
WHILE="while"
WRITE="write"

LETTER=[a-z]
DIGIT=[0-9]

CONSTANT={DIGIT}+
NAME={LETTER}({LETTER}|{DIGIT})*

SEMICOLON=";"
LPAREN="("
RPAREN=")"
COMMA=","

EXP="^"

TIMES="*"
DIVIDE="/"
MOD="%"

PLUS="+"
MINUS="-"

GE=">="
LE="<="
GT=">"
LT="<"

EQ="="
NE="<>"

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_FILES = {
         "../test/Test.mini" };

     //////////////////////////////////////////////////////////////////////
     //////////////////////////////////////////////////////////////////////

     public static void  main ( String [ ]  args )
       throws Exception
     //////////////////////////////////////////////////////////////////////
     {
       for ( int  i = 0; i < TEST_FILES.length; i++ )
       {
         test ( new FileReader ( TEST_FILES [ i ] ) );
       }
     }

     public static void  test ( Reader  reader )
       throws Exception
     //////////////////////////////////////////////////////////////////////
     {
       MiniScanner  miniScanner = new MiniScanner ( reader );

       Symbol  symbol = null;

       loop:
       while ( ( symbol = miniScanner.nextToken ( ) ).sym != EOF )
       {
         System.out.println (
           "Symbol:  " + symbol + "  Value:  " + symbol.value );
       }
     }

     public static Symbol  scanConstant ( String  text )
     //////////////////////////////////////////////////////////////////////
     {
       try
       {
         return new Symbol ( CONSTANT, new Integer ( text ) );
       }
       catch ( NumberFormatException  ex )
       {
         return null;
       }
     }

     //////////////////////////////////////////////////////////////////////
     //////////////////////////////////////////////////////////////////////

%}

%%

<YYINITIAL> {BEGIN}     { return new Symbol ( BEGIN     ); }
<YYINITIAL> {CALL}      { return new Symbol ( CALL      ); }
<YYINITIAL> {DO}        { return new Symbol ( DO        ); }
<YYINITIAL> {ELSE}      { return new Symbol ( ELSE      ); }
<YYINITIAL> {END}       { return new Symbol ( END       ); }
<YYINITIAL> {IF}        { return new Symbol ( IF        ); }
<YYINITIAL> {INTEGER}   { return new Symbol ( INTEGER   ); }
<YYINITIAL> {FI}        { return new Symbol ( FI        ); }
<YYINITIAL> {PROCEDURE} { return new Symbol ( PROCEDURE ); }
<YYINITIAL> {READ}      { return new Symbol ( READ      ); }
<YYINITIAL> {THEN}      { return new Symbol ( THEN      ); }
<YYINITIAL> {TO}        { return new Symbol ( TO        ); }
<YYINITIAL> {WHILE}     { return new Symbol ( WHILE     ); }
<YYINITIAL> {WRITE}     { return new Symbol ( WRITE     ); }

<YYINITIAL> {NAME}      { return new Symbol ( NAME, yytext ( ) ); }
<YYINITIAL> {CONSTANT}  { return scanConstant ( yytext ( ) ); }

<YYINITIAL> {SEMICOLON} { return new Symbol ( SEMICOLON ); }
<YYINITIAL> {LPAREN}    { return new Symbol ( LPAREN    ); }
<YYINITIAL> {RPAREN}    { return new Symbol ( RPAREN    ); }
<YYINITIAL> {COMMA}     { return new Symbol ( COMMA     ); }

<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> {GE}        { return new Symbol ( GE        ); }
<YYINITIAL> {LE}        { return new Symbol ( LE        ); }
<YYINITIAL> {GT}        { return new Symbol ( GT        ); }
<YYINITIAL> {LT}        { return new Symbol ( LT        ); }

<YYINITIAL> {EQ}        { return new Symbol ( EQ        ); }
<YYINITIAL> {NE}        { return new Symbol ( NE        ); }

<YYINITIAL> {ASSIGN}    { return new Symbol ( ASSIGN    ); }

            (.|\n)      { yybegin ( YYINITIAL ); }

⌨️ 快捷键说明

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