main.sa
上传用户:afrynkmhm
上传日期:2007-01-06
资源大小:1262k
文件大小:1k
源码类别:

编译器/解释器

开发平台:

Others

  1. class MAIN is
  2.    -- Define a selector that can switch from java to javadoc; make visible to lexers
  3.    shared selector : ANTLR_TOKEN_STREAM_SELECTOR{ANTLR_COMMON_TOKEN} := 
  4.  ANTLR_TOKEN_STREAM_SELECTOR{ANTLR_COMMON_TOKEN}::create;
  5.    main ( args : ARRAY{STR} ) is
  6.       if ( args.size < 2 ) then
  7.  #OUT + "usage " + args[0] + " <filename>n";
  8.  return;
  9.       end;
  10.  
  11.       f : IFSTREAM := IFSTREAM::open_for_read( args[1] );
  12.       if ( void(f) ) then
  13.  #OUT + "file "" + args[1] + "" not foundn";
  14.  return;
  15.       end;
  16.       protect 
  17.  -- attach java lexer to the input stream, which also creates a shared input state object
  18.  java_lexer ::= #DEMO_JAVA_LEXER{ANTLR_COMMON_TOKEN}( f );
  19.  -- create javadoc lexer; attach to same shared input state as java lexer
  20.  javadoc_lexer ::= #DEMO_JAVADOC_LEXER{ANTLR_COMMON_TOKEN}( java_lexer.input_state );
  21.  -- notify selector about various lexers; name them for convenient reference later
  22.  selector.add_input_stream( java_lexer, "java");
  23.  selector.add_input_stream( javadoc_lexer, "javadoc");
  24.  selector.select("java"); -- start with main java lexer
  25.  -- Create parser attached to selector
  26.  parser ::= #DEMO_JAVA_PARSER{ANTLR_COMMON_TOKEN,ANTLR_COMMON_AST}(selector);
  27.  -- Pull in one or more int decls with optional javadoc
  28.  parser.input;
  29.       when $STR then
  30.  #ERR + "exception: " + exception.str + "n";
  31.       end;
  32.    end;
  33. end;