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

beanshell的语法分析

阅读更多
最近在做一个b/s开发平台,其中使用了beanshell作为内嵌脚本编辑器。但写完代码的语法检查一直是个问题,今天突然发现了beanshell本身的parser类已经做了这方面工作,我们的实现就简单多了。

This is the BeanShell parser.  It is used internally by the Interpreter
class (which is probably what you are looking for).  The parser knows
only how to parse the structure of the language, it does not understand
names, commands, etc.

You can use the Parser from the command line to do basic structural
validation of BeanShell files without actually executing them. e.g.

java bsh.Parser [ -p ] file [ file ] [ ... ]

The -p option causes the abstract syntax to be printed.

From code you'd use the Parser like this:
  Parser parser = new Parser(in);
  while( !(eof=parser.Line()) ) {
   SimpleNode node = parser.popNode();
   // use the node, etc. (See bsh.BSH* classes)
  }


做过试验后,发现“The parser knows
only how to parse the structure of the language, it does not understand names, commands, etc.”这句话的具体含义是只做语法方面的检查,保证你写的内容符合java本身的语法规范,如关键字for写成for1、有个左括号缺丢失右括号、缺少分号结束等等。

但不包含语义方面的检查,如你定义了变量a,但使用的时候写成a1了,或者没有import某个类,却直接调用。这类检查不在beanshell parser能力范围内。

具体测试代码如下:

package com.mycompany.test.sample.test;

import java.io.FileInputStream;
import bsh.ParseException;
import bsh.Parser;

public class testBSHParser {
    public static void main(String [] args) throws Exception{
        FileInputStream in = new FileInputStream("E:/test.bsh");
        Parser parser = new Parser(in);
        try{
        while( !(parser.Line()) ) {
            // use the node, etc. (See bsh.BSH* classes)
        }
        }catch(ParseException e){
            System.out.println(e.getErrorSourceFile());
            System.out.println(e.getErrorLineNumber());
            System.out.println(e.getErrorText());
        }
    }
}


被测试的脚本放到一个文件中,如上面代码中的E:/test.bsh
int i = 0;

for(i=0;i<100;i++)
{
	i++
	System.out.println((i++)--);
}
2
0
分享到:
评论

相关推荐

    beanshell 源码

    Beanshell 常用于系统管理、自动化测试、数据处理、日志分析等多个领域。其灵活性和与Java生态系统的紧密集成使得它成为开发人员的有力工具。 通过深入研究 Beanshell 的源码,你可以了解其如何解析和执行Java代码...

    用BeanShell实现公式管理

    BeanShell是一种轻量级的Java解释器,它的语法接近Java,因此非常适合用来构建动态和灵活的系统。在本文中,我们将探讨如何利用BeanShell创建一个公式管理系统,它允许用户自定义、修改和删除公式,同时提供接口用于...

    beanshell-2.0b4.src

    Beanshell 是一个轻量级的Java脚本引擎,它允许用户在运行时执行Java语法的脚本。在标题“beanshell-2.0b4.src”中,我们看到的是 Beanshell 的一个源代码版本,2.0b4 表示这是 2.0 版本的第四个β(beta)发布。...

    jmeter-BeanShell简介

    - **BeanShell监听器**:收集和展示测试结果,可以定制化数据展示和分析。 4. **常见方法示例** - `log.info("message")`:输出调试信息。 - `vars.get("variableName")`:获取名为“variableName”的变量值。 ...

    BeanShell2.0b5源码

    BeanShell 是一个轻量级的Java脚本引擎,它允许开发者使用类似JavaScript的语法来执行Java代码。在本文中,我们将深入探讨BeanShell 2.0b5的源码,了解其工作原理、核心功能以及它如何为Java开发提供便利。 1. **...

    导入poi jar包实现使用Beanshell读写Excel文件

    在JMeter中,BeanShell是一种内置的脚本语言,基于Java语法,用于扩展JMeter的功能。BeanShell允许我们在测试计划中执行自定义的Java代码。因此,我们可以用BeanShell脚本来调用POI库,实现对Excel文件的操作。 ...

    Jmeter5.X+BeanShell性能测试

    BeanShell是JMeter的一个插件,允许使用简单的Java语法编写脚本,实现更复杂的逻辑,如数据处理、变量赋值和接口间的关联。 【可视化HTML报告】 通过生成HTML报告,可以直观地查看测试结果,便于分享和分析。 ...

    iso8583-server-simulator-beanshell:使用一个beanshell作为请求侦听器的ISO8583服务器模拟器

    2. 简单易用:Beanshell语法接近Java,对于熟悉Java的开发者来说,学习成本较低。 3. 集成友好:由于是基于Java的,Beanshell可以无缝集成到任何Java应用中,包括这个ISO8583服务器模拟器。 在实际操作中,可能包含...

    bsh架包以及源码包

    Beanshell 是一个轻量级的Java脚本引擎,它允许用户在运行时执行Java语法的脚本。这个“bsh架包以及源码包”包含了Beanshell的核心库和源代码,为开发者提供了一个深入理解其内部工作原理以及自定义功能的机会。 ...

    Jmeter Bean shell 介绍

    3. **BeanShell Sampler**:作为一个完整的采样器,它允许执行自定义的逻辑来生成请求并分析响应。 4. **BeanShell PostProcessor**:在采样器执行后运行,用于处理响应数据,如提取值或进行进一步的分析。 5. **...

    Android 之计算器源码

    这涉及到字符串处理、语法分析和数学运算等多个编程概念。 四则运算的实现涉及了基本的数学逻辑和条件判断。在Java中,我们可以使用`+`、`-`、`*`和`/`操作符来进行加减乘除,但是要处理带有括号的表达式,就需要...

    codeConversion.zip

    1. **语法解析**:这是转换过程的第一步,需要分析源代码的语法结构,通常通过解析器来完成。解析器将源代码转化为抽象语法树(AST),这是一个表示代码结构的数据结构。 2. **语义分析**:理解代码的逻辑和意图,...

    apache-jmeter-3.1安装包(含插件)

    7. **编写脚本**:JMeter支持通过录制和回放功能创建脚本,或者直接使用Java或BeanShell语法编写自定义逻辑。这使得创建复杂的测试场景变得可能,例如登录、浏览页面、搜索、提交表单等。 8. **执行测试**:设置...

    Mavscript-开源

    在 Mavscript 中,用户在文本文档中插入特殊的语法或者标记来指示计算区域。这些计算会被 Mavscript 解析并传递给 Yacas 或 BeanShell 进行处理。处理结果将被嵌入回文档,形成一个混合了文本和计算结果的综合文件。...

    tomcat 异常

    14. **BeanShell**:`bsh-2.0b5.jar`是一个动态脚本语言,如果在应用中有使用BeanShell脚本,可能有语法或运行时错误。 针对这些问题,可以采取以下步骤进行排查: 1. **检查日志**:首先查看日志文件,找出错误...

    Jmeter训练营文档.pdf

    抓包工具如Chrome/Firefox的开发者工具、Android/iOS平台上的Fiddler和Charles等,它们能够帮助测试人员捕获浏览器和服务器之间的HTTP/HTTPS通信,对于分析和调试接口请求非常有用。 JMeter作为一个性能测试工具,...

    ssh+dwr坚决不冲突的jar3

    3. **antlr-2.7.6rc1.jar, antlr-2.7.6.jar**:ANTLR是一个强大的解析工具,用于生成词法分析器、语法分析器和树遍历器。 4. **backport-util-concurrent.jar**:提供Java 5的并发工具类的backport版本,供Java 1.4...

    Java游戏开发现状分析和走向

    Java游戏开发现状分析和走向 Java作为一门广泛应用于企业级应用的编程语言,近年来在游戏开发领域也逐渐崭露头角。随着Java技术的进步,尤其是运行效率的显著提升,使得Java能够处理复杂的3D图形,如Lwjgl、Jogl和...

    程序设计语言的选择问题推荐.pdf

    以下是对不同语言特点的分析: 1. C语言:作为基础的系统级语言,C语言允许直接控制内存,适合进行底层开发和系统编程。它的效率高且灵活性强,但对程序员的要求较高。 2. Pascal:Pascal语言因其清晰的语法结构,...

    报表工具 xx x

    2. **BeanShell**:这是一种基于Java语法的脚本执行工具。 3. **GNU JAXP**:一个符合JAXP1.1标准的XML解析器。 4. **iText**:用于生成PDF文件的库。 5. **POI**:用于处理Microsoft Office格式文件(如Excel和Word...

Global site tag (gtag.js) - Google Analytics