`
javamonkey
  • 浏览: 169627 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

EScript 一个Demo已经准备好了

阅读更多
EScript一个Demo已经准备好了.可以在sourceforge上看看到https://sourceforge.net/projects/esic/

如下文本
Hello,first line ,keep this line
#: delnext { 
Hello this line will be deleted 
Hello,this line will be deleted 
#:} 
Hello,keep this line



通过脚本运行后,输出是
Hello,first line ,keep this line
Hello,keep this line


中间俩行被删除了

运行代码如下
		InputStreamReader reader = new InputStreamReader(Test.class.getResourceAsStream("/com/jk/escript/antlr/input.txt")) ;
		PreProcessor processor = new PreProcessor(reader);
		processor.process();
		String result = processor.getResult();		
		CommandFactory cf = new CommandFactory();
		cf.setEnv(new Enviroment());
		cf.setLineMap(processor.getLineMap());
		ANTLRStringStream  input = new ANTLRStringStream (result); 
	
		EScriptLexer lexer = new EScriptLexer(input);
		// create a buffer of tokens pulled from the lexer
		CommonTokenStream tokens = new CommonTokenStream(lexer);
		// create a parser that feeds off the tokens buffer
		EScriptParser parser = new EScriptParser(tokens);

		parser.setCommandFactory(cf);
		parser.txt();
		StringBuilder output = parser.getStringBuilder();
		System.out.println("output:\n"+output.toString());



script语法现在很简单:如下

grammar EScript;
options {backtrack=true;}
@header {
package com.jk.escript.antlr;
import com.jk.escript.*;
import java.util.List;
import java.util.ArrayList;
}
@members {
StringBuilder sb = new StringBuilder();
CommandFactory cf = null;
public StringBuilder getStringBuilder(){
return sb;
}

public void setCommandFactory(CommandFactory cf){
this.cf = cf;
}
}
txt: (commandLine|txtLine{sb.append( cf.getOriginalLine($txtLine.text)).append("\n");})*;
txtLine
:contentLine ;
commandLine
scope {
boolean  isSingleLine;
boolean  hasEnd;
List options;

}
@init{
$commandLine::isSingleLine = true;
$commandLine::hasEnd = false;
$commandLine::options= new ArrayList();
}
:  commentChar ':' key (csbegin {$commandLine::isSingleLine=false;})? commentCharEnd? NEWLINE  parasLine  (csend )?
{
String output = null;
BaseCommand command = cf.getCommand($key.text,$parasLine.text);
command.setOptions($commandLine::options);
output = command.getOutput();
if(output!=null)sb.append(output);
}
  ;
csbegin
: '{';
csend
: commentChar ':}' commentCharEnd   NEWLINE;
parasLine
: {$commandLine::isSingleLine}?=>singleLine
| mutilLine
;
singleLine
: contentLine;
mutilLine
: contentLine+;

key
: replace
| 'delnext'
;
replace
: 'replace a'
| 'replace b'
;
contentLine
: '$:' STRING NEWLINE;

commentChar

: '#'
| '//'
| '/*' {$commandLine::hasEnd = true;}
| '<!--'{$commandLine::hasEnd = true;}
;
commentCharEnd
: {$commandLine::hasEnd}?=>'*/'
| {$commandLine::hasEnd}?=>'-->'
|
;

WS  :   (' '|'\t')+ {skip();} ;

STRING
: ('0'..'9')*
;
NEWLINE: ('\r'? '\n')+;
0
0
分享到:
评论

相关推荐

    eScript Language Reference

    例如,当用户点击一个按钮时,可能触发一个名为`ButtonClicked`的事件,开发者可以在eScript中编写相应的处理逻辑。 ### 结论 eScript语言作为Siebel系统的核心脚本语言,其丰富的功能和强大的集成能力使其成为...

    siebel escript best practices

    oracel support官方提供的siebel escript最佳实践以及其他人总结的siebel escript最佳实践.(资料是英文的)

    Siebel eScriptt

    Siebel eScript作为Siebel CRM系统中的一个重要组成部分,在实现自动化处理、业务逻辑实现和用户界面定制等方面发挥着重要作用。通过对Siebel eScript的学习和掌握,可以帮助开发人员更高效地应对复杂的业务挑战,...

    Siebel eScript 如何优化

    Siebel eScript是一种在Siebel CRM系统中用于增强和自定义业务逻辑的脚本语言。在实际应用中,优化eScript对于提升系统性能至关重要。以下是一些关键的优化策略: 1. **优先考虑非脚本解决方案**:在编写eScript...

    escript-开源

    本文将深入探讨escript-开源的核心概念、工作原理以及实际应用,帮助开发者更好地理解和利用这一技术。 首先,让我们理解"escript"的基本概念。escript是一种编程语言或脚本环境,它允许开发者在文本文件(如.txt)...

    erlang-script.rpm.sh

    erlang-script.rpm 安装mq前的依赖 来源:https://packagecloud.io/rabbitmq/erlang/install#bash-rpm

    hexer:escript格式的Hex.pm集成

    六角escript格式的Hex.pm集成。联系我们如果在使用此库时发现任何错误或有问题,请在此存储库中(或拉取请求:))。 您可以在检查我们所有的开源项目。建造打造hexer只是运行make escript 。 这将编译项目并在bin/...

    windows脚本技术script

    windows脚本技术script

    emqx-windows-exception.zip mqtt

    在本场景中,`emqx-windows-exception.zip` 是一个包含EMQ X Broker在Windows操作系统上的异常处理或特定版本的压缩包。 EMQ X Broker作为MQTT服务器,提供了以下关键功能和特性: 1. **高可用性**:支持集群模式...

    超详细的javascript数组方法汇总

    join()方法用于将数组中的所有元素连接成一个字符串。如果不指定分隔符,默认使用逗号作为分隔符。也可以指定一个自定义的分隔符,如下划线或其他任何字符。join()方法不会改变原数组。 ```javascript var arr = [1,...

    script运行库2020.03.25-X64.zip

    压缩包内的文件“script运行库2020.03.25-X64.exe”很可能是一个可执行文件,用于安装上述脚本运行库,解决在部署EMQ X时遇到的`escript.ext`问题。这个文件应该包含修复错误所需的组件,或者提供正确的环境以确保`...

    siebel手册

    该手册旨在为用户提供一个全面的指南,帮助他们快速掌握Siebel 8.0的基础知识及应用技巧。手册分为两个部分:理论知识与实践操作。通过结合理论与实践的学习方式,用户可以更深入地理解Siebel系统的功能和优势。 ##...

    ESPRITII.zip_doa algorithm

    一维的doa角度估计escript程序,利用的是LS-ESCRIPT算法

    ECMAScript6入门优化版.pdf

    ECMAScript 6.0(以下简称ES6)是JavaScript语言的下一代标准,已经在2015年6月正式发布了。它的目标,是使得JavaScript语言可以用来编写复杂的大型应用程序,成为企业级开发语言。

    ex_top:ExTop是用于用Elixir编写的Erlang VM的交互式监视器

    这将生成一个名为ex_top的escript可执行文件,可以通过键入./ex_top来执行。 $ git clone https://github.com/utkarshkukreti/ex_top $ cd ex_top $ mix escript.build $ ./ex_top 用法 键盘快捷键 钥匙 用 j或向...

    emqx-4.2.5.zip

    EMQ X 是一款高度可扩展、高性能的 MQTT 消息代理,它是一个开源的 MQTT 服务器,专为物联网(IoT)设计。标题中的 "emqx-4.2.5.zip" 指的是 EMQ X 的特定版本,4.2.5,这个版本已经打包成 ZIP 压缩文件供用户下载和...

    IERL:BEAM Jupyter内核工具

    BEAM Jupyter内核工具 ... 但是,与通常的erl shell相比, erl还支持内联定义模块,即可以包含一个单元 - module ( my_mod ). - export ([ func / 1 ]). func ( X ) -&gt; X . 执行后将被编译并可用。 长生不老药

    elixir-crawler:一个网络爬虫-我的第一个Elixir项目

    Elixir-Crawler项目不仅是一个网络爬虫的实例,也是一个深入学习Elixir语言和其生态系统的好例子。通过参与这个项目,你可以了解到Elixir的函数式编程风格、并发模型以及如何利用Mix工具进行项目管理。此外,该项目...

    templator:使用前端 Javascript 框架生成基本的 Web App Boiler Plate

    使用您最喜欢的 Javascript 框架生成一个基本的 Web 应用程序样板。 安装 使用 Templator 的最简单方法是将其拉到本地机器上: git clone https://github.com/arnerjohn/templator.git cd templator 然后,使用...

    pyvisi-开源

    PyVisi 还特别支持 escript 软件包,这是一个专门用于解决偏微分方程的开源工具,通常在地球科学、流体动力学和材料科学等领域中应用。 **1. Python 可视化界面** Python 的可视化库众多,如 Matplotlib、Seaborn...

Global site tag (gtag.js) - Google Analytics