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

📄 main.sa

📁 Java写的词法/语法分析器。可生成JAVA语言或者是C++的词法和语法分析器。并可产生语法分析树和对该树进行遍历
💻 SA
字号:
class MAIN is

   -- Define a selector that can switch from java to javadoc; make visible to lexers
   shared selector : ANTLR_TOKEN_STREAM_SELECTOR{ANTLR_COMMON_TOKEN} := 
	 ANTLR_TOKEN_STREAM_SELECTOR{ANTLR_COMMON_TOKEN}::create;

   main ( args : ARRAY{STR} ) is

      if ( args.size < 2 ) then
	 #OUT + "usage " + args[0] + " <filename>\n";
	 return;
      end;
	 
      f : IFSTREAM := IFSTREAM::open_for_read( args[1] );

      if ( void(f) ) then
	 #OUT + "file \"" + args[1] + "\" not found\n";
	 return;
      end;

      protect 
	 -- attach java lexer to the input stream, which also creates a shared input state object
	 java_lexer ::= #DEMO_JAVA_LEXER{ANTLR_COMMON_TOKEN}( f );

	 -- create javadoc lexer; attach to same shared input state as java lexer
	 javadoc_lexer ::= #DEMO_JAVADOC_LEXER{ANTLR_COMMON_TOKEN}( java_lexer.input_state );

	 -- notify selector about various lexers; name them for convenient reference later
	 selector.add_input_stream( java_lexer, "java");
	 selector.add_input_stream( javadoc_lexer, "javadoc");

	 selector.select("java"); -- start with main java lexer

	 -- Create parser attached to selector
	 parser ::= #DEMO_JAVA_PARSER{ANTLR_COMMON_TOKEN,ANTLR_COMMON_AST}(selector);

	 -- Pull in one or more int decls with optional javadoc
	 parser.input;

      when $STR then
	 #ERR + "exception: " + exception.str + "\n";
      end;
   end;
end;

⌨️ 快捷键说明

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