阅读更多

20顶
0踩

编程语言

原创新闻 Struts2开发快速调试插件configdebug

2011-06-13 09:26 by 见习记者 四个石头 评论(42) 有16420人浏览

    Project Hosting(项目托管)http://code.google.com/p/configdebug/

1.   概述

在使用Struts2进行web项目开发的时候,我们需要使用配置文件来解耦action和视图资源(例如:jsp页面)

开发完某个功能之后,我们在页面做一个操作(例如点击一个按钮),然后跳转到另一个页面,在调试的过程中,我们需要知道我的这个操作调用了哪个action,并且action执行之后,返回到哪个页面,然后在action中,或页面上,或配置文件中来找到是否出错

一般的调试过程是:

l  根据url,在Struts2配置文件中找到该url对应的配置信息

l  然后根据配置信息,找到对应的action类,以及对应的方法

l  然后看该操作返回那个结果字符串

l  再到配置文件中,找到该结果字符串对应的视图资源位置

l  最后找到视图资源

这个过程对开发人员来说,是繁琐的,无聊的。

我们要做的,就是省去上面的步骤,直接找到需要的调试相关信息

2.   功能列表

l  用户进行一个操作,如果经过Struts2处理,就会在控制台打印相应的信息,信息如下:

该操作的访问方式:例如POSTGET

调试url地址:url及参数(POST方式的参数被转为GET方式),便于用url直接调试

POSTGET参数的多行显示:每行显示一个键值对,参数名称=参数值

执行的action以及方法:便于快速找到该操作对应的action及方法

该操作的执行时间(单位毫秒):便于确定该操作的执行效率

action配置信息所在配置文件的路径以及名称:便于快速找到对应的配置文件

action配置信息在配置文件中的行数:便于快速找到配置该action的位置

action返回的结果名称:便于快速确定action中方法返回的结果名称

action返回的视图位置:便于快速找到该操作返回的视图资源的实际位置

Session范围中的信息:便于观察session中的信息

l  方便的开关控制台信息的显示

通过配置Struts.xml文件中的devMode的值为truefalse,来启用或停用控制台的提示信息,从而达到在开发的时候,设置devMode=true(打印信息),在程序上线的时候,设置devMode=false(不打印信息),不会造成效率的影响。

或者在Struts.xml中去掉该插件相关的拦截器配置(在项目发布时,可以不包含该插件包),来关闭调试信息。

l  可自定义提示前缀和提示信息

configdebug.properties属性文件中进行配置。

3.   使用效果

3.1.  操作

用户在一个添加用户页面中,输入如下信息,然后点击提交按钮

该操作调用Struts2action



 

 

3.2.  结果

 

在控制台打印出如上信息,说明:

1.         accessMethod

该操作的访问方法是POST方式提交的

2.         debugUrl

调试的url,显示完整的url以及参数,对于参数的处理,如果是GET方式,就按原样打印,如果是POST方式,就将参数转换为GET方式,即在url后面添加参数对儿。如果这次增加操作出现异常,那么在修改后台代码之后,就不用在添加页码再次输入这些信息,只需要将该debugUrl在浏览器的地址栏中执行即可,直到该功能调试成功,节省了输入信息的时间。

3.         parameters(Multirow)

如果有参数,将参数分开,多行显示,便于开发人员观察参数的值是否正确等

4.         actionAndMethod

该操作实际调用的是com.demo.action.UserAction中的add方法,便于开发人员快速找到该方法进行修改逻辑,或修改bug

5.         executeTime

该操作的执行时间是375毫秒

6.         configFilePath

action(com.demo.action.UserAction)是在类路径下的struts.xml中配置的

7.         configFileLineNumber

action(com.demo.action.UserAction)struts.xml中配置位置的行号是47

8.         actionReturnResult

action(com.demo.action.UserAction)add方法中的返回结果值为success

9.         actionReturnView

action(com.demo.action.UserAction)返回的视图资源(例如:jsp)的位置在项目根路径下的app/user/user_list.jsp

10.     sessionInfo

当前session中的信息有,loginUser=张三

 

 

下载地址:http://code.google.com/p/configdebug/downloads/list

20
0
评论 共 42 条 请登录后发表评论
42 楼 四个石头 2011-06-26 11:20
该异常产生的原因是:在使用POST方式提交的时候,没有传递参数
感谢iteye网友thc1987 和yuanjzh 提出该异常,该异常已经解决
wtslh 写道
嘿嘿,又重新确认了,struts2文件上传发生错误,确实是这个插件造成。

该异常产生的原因是:在使用POST方式提交的时候,没有传递参数
该异常已经解决,你可以下载新的版本v1.1
下载地址:http://code.google.com/p/configdebug/downloads/list
41 楼 wtslh 2011-06-24 18:37
嘿嘿,又重新确认了,struts2文件上传发生错误,确实是这个插件造成。
40 楼 wtslh 2011-06-24 18:11
不好意思,上传文件时的错误,不是这个插件造成的。
我误解了,不好意思。
39 楼 wtslh 2011-06-24 18:08
当使用struts2的上传功能时,报错。
Struts Problem Report
Struts has detected an unhandled exception:

Messages: String index out of range: -1

File: java/lang/AbstractStringBuilder.java
Line number: 881


--------------------------------------------------------------------------------

Stacktraces
java.lang.StringIndexOutOfBoundsException: String index out of range: -1
    java.lang.AbstractStringBuilder.substring(AbstractStringBuilder.java:881)
    java.lang.StringBuffer.substring(StringBuffer.java:416)
    com.configdebug.interceptor.ConfigDebugInterceptor.getParameters(ConfigDebugInterceptor.java:223)
    com.configdebug.interceptor.ConfigDebugInterceptor.intercept(ConfigDebugInterceptor.java:83)
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
    org.apache.struts2.impl.StrutsActionProxy.execute(StrutsActionProxy.java:52)
    org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:485)
    org.apache.struts2.dispatcher.ng.ExecuteOperations.executeAction(ExecuteOperations.java:77)
    org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.doFilter(StrutsPrepareAndExecuteFilter.java:91)
    org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
    org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain
38 楼 四个石头 2011-06-15 19:35
yuanjzh 写道
########################################struts2 debug info begin########################################
## 1.accessMethod:GET
## 2.debugUrl:http://localhost:8080/addCookie.action?termId=200100000000&cityId=1001
## 3.parameters(Multirow):
##   termId=200100000000
##   cityId=1001
## 4.actionAndMethod:com.sunrise.mss.action.CookieAction.addCookie()
## 5.executeTime:735ms
## 6.configFilePath:file:/E:/Workspaces/MyEclipse%209/web-terminal/WebRoot/WEB-INF/classes/struts.xml
## 7.configFileLineNumber:28
## 8.actionReturnResult:success
## 9.actionReturnView:{location=index.jsp}
## 10.sessionInfo:
##   globalData=
===========================================================================
[SessionID: 666d83-1308e058034-ac10fb2fedbb54817d2a1e589c9131a5]
[termId: 200100000000]
===========================================================================
cityId[STRING]                =                   1001
===========================================================================

########################################struts2 debug info end##########################################
[ERROR][http-8080-Processor24][2011/06/14 19:59:52 015] Servlet.service() for servlet default threw exception [org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:253)]
java.lang.StringIndexOutOfBoundsException: String index out of range: -1
yuanjzh 写道
########################################struts2 debug info begin########################################
## 1.accessMethod:GET
## 2.debugUrl:http://localhost:8080/addCookie.action?termId=200100000000&cityId=1001
## 3.parameters(Multirow):
##   termId=200100000000
##   cityId=1001
## 4.actionAndMethod:com.sunrise.mss.action.CookieAction.addCookie()
## 5.executeTime:735ms
## 6.configFilePath:file:/E:/Workspaces/MyEclipse%209/web-terminal/WebRoot/WEB-INF/classes/struts.xml
## 7.configFileLineNumber:28
## 8.actionReturnResult:success
## 9.actionReturnView:{location=index.jsp}
## 10.sessionInfo:
##   globalData=
===========================================================================
[SessionID:	666d83-1308e058034-ac10fb2fedbb54817d2a1e589c9131a5]
[termId:	200100000000]
===========================================================================
cityId[STRING]                =                   1001
===========================================================================

########################################struts2 debug info end##########################################
[ERROR][http-8080-Processor24][2011/06/14 19:59:52 015] Servlet.service() for servlet default threw exception [org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:253)]
java.lang.StringIndexOutOfBoundsException: String index out of range: -1


该异常产生的原因是:在使用POST方式提交的时候,没有传递参数
感谢iteye网友thc1987 和yuanjzh 提出该异常,该异常已经解决,会在下个版本修正,非常感谢

修正版本发布了,v1.1
37 楼 yuanjzh 2011-06-15 16:43
四个石头 写道
harvey.sun 写道
异步提交表单为什么拦截不到呢?

看你的异步提交是不是调用的struts2的action,只有调用struts2的action才能拦截到


这个bug让我不能在项目中使用
36 楼 四个石头 2011-06-15 16:28
harvey.sun 写道
异步提交表单为什么拦截不到呢?

看你的异步提交是不是调用的struts2的action,只有调用struts2的action才能拦截到
35 楼 harvey.sun 2011-06-15 16:24
这是个很好用的插件,期待下一个版本的升级,作者幸苦了。
34 楼 harvey.sun 2011-06-15 16:22
异步提交表单为什么拦截不到呢?
33 楼 cooltange 2011-06-15 15:36
这个插件不错,以后有机会可以 用用
32 楼 yuanjzh 2011-06-15 11:02
yuanjzh 写道
########################################struts2 debug info begin########################################
## 1.accessMethod:GET
## 2.debugUrl:http://localhost:8080/addCookie.action?termId=200100000000&cityId=1001
## 3.parameters(Multirow):
##   termId=200100000000
##   cityId=1001
## 4.actionAndMethod:com.sunrise.mss.action.CookieAction.addCookie()
## 5.executeTime:735ms
## 6.configFilePath:file:/E:/Workspaces/MyEclipse%209/web-terminal/WebRoot/WEB-INF/classes/struts.xml
## 7.configFileLineNumber:28
## 8.actionReturnResult:success
## 9.actionReturnView:{location=index.jsp}
## 10.sessionInfo:
##   globalData=
===========================================================================
[SessionID: 666d83-1308e058034-ac10fb2fedbb54817d2a1e589c9131a5]
[termId: 200100000000]
===========================================================================
cityId[STRING]                =                   1001
===========================================================================

########################################struts2 debug info end##########################################
[ERROR][http-8080-Processor24][2011/06/14 19:59:52 015] Servlet.service() for servlet default threw exception [org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:253)]
java.lang.StringIndexOutOfBoundsException: String index out of range: -1
yuanjzh 写道
########################################struts2 debug info begin########################################
## 1.accessMethod:GET
## 2.debugUrl:http://localhost:8080/addCookie.action?termId=200100000000&cityId=1001
## 3.parameters(Multirow):
##   termId=200100000000
##   cityId=1001
## 4.actionAndMethod:com.sunrise.mss.action.CookieAction.addCookie()
## 5.executeTime:735ms
## 6.configFilePath:file:/E:/Workspaces/MyEclipse%209/web-terminal/WebRoot/WEB-INF/classes/struts.xml
## 7.configFileLineNumber:28
## 8.actionReturnResult:success
## 9.actionReturnView:{location=index.jsp}
## 10.sessionInfo:
##   globalData=
===========================================================================
[SessionID:	666d83-1308e058034-ac10fb2fedbb54817d2a1e589c9131a5]
[termId:	200100000000]
===========================================================================
cityId[STRING]                =                   1001
===========================================================================

########################################struts2 debug info end##########################################
[ERROR][http-8080-Processor24][2011/06/14 19:59:52 015] Servlet.service() for servlet default threw exception [org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:253)]
java.lang.StringIndexOutOfBoundsException: String index out of range: -1


该异常产生的原因是:在使用POST方式提交的时候,没有传递参数
感谢iteye网友thc1987 和yuanjzh 提出该异常,该异常已经解决,会在下个版本修正,非常感谢


请问下个版本什么时候可以下载?
31 楼 四个石头 2011-06-15 09:01
########################################struts2 debug info begin########################################
## 1.accessMethod:GET
## 2.debugUrl:http://localhost:8080/addCookie.action?termId=200100000000&cityId=1001
## 3.parameters(Multirow):
##   termId=200100000000
##   cityId=1001
## 4.actionAndMethod:com.sunrise.mss.action.CookieAction.addCookie()
## 5.executeTime:735ms
## 6.configFilePath:file:/E:/Workspaces/MyEclipse%209/web-terminal/WebRoot/WEB-INF/classes/struts.xml
## 7.configFileLineNumber:28
## 8.actionReturnResult:success
## 9.actionReturnView:{location=index.jsp}
## 10.sessionInfo:
##   globalData=
===========================================================================
[SessionID: 666d83-1308e058034-ac10fb2fedbb54817d2a1e589c9131a5]
[termId: 200100000000]
===========================================================================
cityId[STRING]                =                   1001
===========================================================================

########################################struts2 debug info end##########################################
[ERROR][http-8080-Processor24][2011/06/14 19:59:52 015] Servlet.service() for servlet default threw exception [org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:253)]
java.lang.StringIndexOutOfBoundsException: String index out of range: -1
yuanjzh 写道
########################################struts2 debug info begin########################################
## 1.accessMethod:GET
## 2.debugUrl:http://localhost:8080/addCookie.action?termId=200100000000&cityId=1001
## 3.parameters(Multirow):
##   termId=200100000000
##   cityId=1001
## 4.actionAndMethod:com.sunrise.mss.action.CookieAction.addCookie()
## 5.executeTime:735ms
## 6.configFilePath:file:/E:/Workspaces/MyEclipse%209/web-terminal/WebRoot/WEB-INF/classes/struts.xml
## 7.configFileLineNumber:28
## 8.actionReturnResult:success
## 9.actionReturnView:{location=index.jsp}
## 10.sessionInfo:
##   globalData=
===========================================================================
[SessionID:	666d83-1308e058034-ac10fb2fedbb54817d2a1e589c9131a5]
[termId:	200100000000]
===========================================================================
cityId[STRING]                =                   1001
===========================================================================

########################################struts2 debug info end##########################################
[ERROR][http-8080-Processor24][2011/06/14 19:59:52 015] Servlet.service() for servlet default threw exception [org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:253)]
java.lang.StringIndexOutOfBoundsException: String index out of range: -1


该异常产生的原因是:在使用POST方式提交的时候,没有传递参数
感谢iteye网友thc1987 和yuanjzh 提出该异常,该异常已经解决,会在下个版本修正,非常感谢
30 楼 yuanjzh 2011-06-14 20:04
########################################struts2 debug info begin########################################
## 1.accessMethod:GET
## 2.debugUrl:http://localhost:8080/addCookie.action?termId=200100000000&cityId=1001
## 3.parameters(Multirow):
##   termId=200100000000
##   cityId=1001
## 4.actionAndMethod:com.sunrise.mss.action.CookieAction.addCookie()
## 5.executeTime:735ms
## 6.configFilePath:file:/E:/Workspaces/MyEclipse%209/web-terminal/WebRoot/WEB-INF/classes/struts.xml
## 7.configFileLineNumber:28
## 8.actionReturnResult:success
## 9.actionReturnView:{location=index.jsp}
## 10.sessionInfo:
##   globalData=
===========================================================================
[SessionID:	666d83-1308e058034-ac10fb2fedbb54817d2a1e589c9131a5]
[termId:	200100000000]
===========================================================================
cityId[STRING]                =                   1001
===========================================================================

########################################struts2 debug info end##########################################
[ERROR][http-8080-Processor24][2011/06/14 19:59:52 015] Servlet.service() for servlet default threw exception [org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:253)]
java.lang.StringIndexOutOfBoundsException: String index out of range: -1
	at java.lang.AbstractStringBuilder.substring(AbstractStringBuilder.java:881)
	at java.lang.StringBuffer.substring(StringBuffer.java:416)
	at com.configdebug.interceptor.ConfigDebugInterceptor.getParameters(ConfigDebugInterceptor.java:223)
	at com.configdebug.interceptor.ConfigDebugInterceptor.intercept(ConfigDebugInterceptor.java:83)
	at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:224)
	at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:223)
	at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455)
	at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:221)
	at org.apache.struts2.impl.StrutsActionProxy.execute(StrutsActionProxy.java:50)
	at org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:504)
	at org.apache.struts2.dispatcher.FilterDispatcher.doFilter(FilterDispatcher.java:419)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:215)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:172)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:108)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:174)
	at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:873)
	at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:665)
	at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:528)
	at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:81)
	at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:689)
	at java.lang.Thread.run(Thread.java:619)
29 楼 smartlan 2011-06-14 17:42
JDK1.4.2下的struts2.0支持不?
28 楼 四个石头 2011-06-14 12:06
存在就有理由 写道
suyulin6688 写道
icanfly 写道
要是能整个SpringMVC的调试模式就爽了,,SpringMVC现在增加或者修改一个URL映射都要重新启动服务器,太不爽了

哥们,推荐你使用jRebel和jRebel for Eclipse插件,相当强悍。
1.增加或者修改一个URL映射,不需要重新启动服务器
2.增加或者修改方法名和方法里面的内容,不需要重新启动服务器
3.增加一个类,不需要重新启动服务器

但是内存要翻倍不止啊,这一点比较不爽的。

有时间我会研究一下,弄个springMVC的,看来现在用springMVC的人不少呀
27 楼 存在就有理由 2011-06-14 11:53
suyulin6688 写道
icanfly 写道
要是能整个SpringMVC的调试模式就爽了,,SpringMVC现在增加或者修改一个URL映射都要重新启动服务器,太不爽了

哥们,推荐你使用jRebel和jRebel for Eclipse插件,相当强悍。
1.增加或者修改一个URL映射,不需要重新启动服务器
2.增加或者修改方法名和方法里面的内容,不需要重新启动服务器
3.增加一个类,不需要重新启动服务器

但是内存要翻倍不止啊,这一点比较不爽的。
26 楼 四个石头 2011-06-14 10:23
thc1987 写道
我的struts是2.0.x的 用了报错
Caused by: java.lang.StringIndexOutOfBoundsException: String index out of range: -1
at java.lang.AbstractStringBuilder.substring(AbstractStringBuilder.java:881)
at java.lang.StringBuffer.substring(StringBuffer.java:416)
at com.configdebug.interceptor.ConfigDebugInterceptor.getParameters(ConfigDebugInterceptor.java:223)
at com.configdebug.interceptor.ConfigDebugInterceptor.intercept(ConfigDebugInterceptor.java:83)

貌似是不支持我这个版本了.

这个不是版本的问题,是传的参数的问题,可能是我没有测试到这种情况,你能不能把详细的信息发一下,例如,你点击提交时,携带了哪些参数
25 楼 thc1987 2011-06-14 10:19
我的struts是2.0.x的 用了报错
Caused by: java.lang.StringIndexOutOfBoundsException: String index out of range: -1
at java.lang.AbstractStringBuilder.substring(AbstractStringBuilder.java:881)
at java.lang.StringBuffer.substring(StringBuffer.java:416)
at com.configdebug.interceptor.ConfigDebugInterceptor.getParameters(ConfigDebugInterceptor.java:223)
at com.configdebug.interceptor.ConfigDebugInterceptor.intercept(ConfigDebugInterceptor.java:83)

貌似是不支持我这个版本了.
24 楼 228939139 2011-06-14 09:50
firebug出了session看不到基本已经搞定啦
23 楼 四个石头 2011-06-14 09:23
wtslh 写道
很好,很容易配置。
可否在后续版本中增加一种配置,就是可控制拦截某些action方法调用,而不是全部。
比如通配拦截:
*Add()
*Modify()
或者
doAdd*()
doModify*()
类似这个意思。

谢谢wtslh提的意见,可以考虑加上这种配置。就怕配置项太多,会让使用变得复杂化,其实简单是最好的 ,非常感谢您提的意见

发表评论

您还没有登录,请您登录后再发表评论

相关推荐

  • 算术表达式的自上而下语法分析及其实现

    算术表达式的自上而下语法分析及其实现 这篇文章里主要是站在编译原理的角度讲述一种语法分析程序的实现的方法,通过对一个典型的例子——算术表达式的分析,从而使大家了解构造一个实用的语法分析程序的方法,同时,也为广大程序员提供一种解决实际问题的思路。

  • 2021年上半年软件设计师上午真题及答案解析(五)

    调用hoo(a,x)函数,此时a=2传给hoo函数中的x,并且由于是引用方式,此时x在hoo函数内的修改会影响原a的值(注意区别,hoo函数的x与foo函数的x是不用的局部变量)。以下UML状态图中,假设活动的状态是A,事件b=0发生并且a>5,发生条件是c状态到d状态的转换条件的是( ),D变为活动的状态,有关状态图的叙述中,不正确的是( )。执行y=y+10=15,执行x=y-x=15-2=13,此时x的值会传回原foo函数的a,即a=x=13。A.确定的有限自动机,它能识别以bab结尾的。

  • 04语法分析——自上而下分析

    例如,如果分号作为语句的结束符(C语言中就是这样的),那么作为语句开头的关键字就可能不在产生表达式的非终结符的 FOLLOW 集中。(3)如果把FIRST(A)中的符号加入非终结符 A 的同步符号集,那么,当FIRST(A)中的一个符号在输入中出现时,可以根据 A 恢复语法分析。(5)如果不能匹配堆栈顶的终结符号,一种简单的想法是弹出堆栈顶的这个终结符号,并发出一条信息,说明已经插入这个终结符,继续语法分析。我们以预测分析为例。①若M[A,a]是A的一个产生式,则X出栈,同时将产生式的右部反序一一进栈;

  • 算术表达式的自上而下语法分析及其实现(上)

    学过编译原理的同学大概都知道对一个句子进行自上而下语法分析的方法。我参考了陈火旺院士的《高级程序设计语言编译原理》,在这篇文章里我主要是站在编译原理的角度讲述一种语法分析程序的实现的方法,通过对一个典型的例子——算术表达式的分析,从而使大家了解构造一个实用的语法分析程序的方法,同时,也为广大程序员提供一种解决实际问题的思路。本文包括以下内容:1. 算术表达式的产生式;2. 自上而下语法分析的算

  • 算术表达式的自上而下语法分析及其实现(下)

    (接中篇) 5. 自上而下语法分析程序的实现 经过上面4步精心的准备,最令人激动的时刻到了。一般《编译原理》课本上的代码大都是无法在机器上运行的伪代码,在这里,你将要看到的是一个实用的可以检查错误的可以执行求值的基于自上而下语法分析算法的计算算术表达式的程序。 不失一般性,我们规定算术表达式只可以进行整数的四则运算(含括号),这样我们需要扩充下面3个函数: int E_AddSub();     

  • 编译原理实验:自上而下语法分析

    编译原理实验报告:自上而下语法分析1. 实验题目:自上而下语法分析实验目的实验内容实验要求输入输出2. 设计思想3. 算法流程4. 源程序新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特......

  • 语法分析器(c++)

    编译原理实验二,语法分析,LR0,LR1

  • 语法分析器和自上而下语法分析器

    词法分析器和自上而下语法分析器,其中语法分析器采用的是简单优先的方法。里面有实验原理,实验代码(界面采用MFC做的)

  • 自上而下语法分析

    c++编写自上而下语法分析程序,bcisakjvfgdafibv dskzugbf

  • LR语法分析 java版

    实现一个关于表达式的LR语法分析程序 识别用户输入的包含变量与整数的混合算术表达式(不包含减法与除法运算) 文法如下: 0 S E 1 E E+E 2 E E E 3 E E 4 E i 编程运用上述LR分析表 识别从键盘输入的算术表达式 ">实现一个关于表达式的LR语法分析程序 识别用户输入的包含变量与整数的混合算术表达式(不包含减法与除法运算) 文法如下: 0 S E 1 E E+E 2 E E E 3 E E 4 E i 编程运用上述LR分析表 识别从键盘输入的算术表达 [更多]

  • 算术表达式的词法、语法分析。

    吐血之作,编译原理课程设计。算术表达式的词法分析,语法分析,四元式输出。 MFC。 分高,但物有所值。

  • 编译原理实验报告 表达式中间代码生成

    一、实验题目 表达式中间代码生成 二、实验目的 熟悉算术表达式的语法分析与中间代码生成原理。 三、实验内容 1. 构造算术表达式的四元式翻译文法 2. 设计算术表达式的递归下降子程序分析算法 3. 设计算术表达的四元式生成算法 4. 实现代码并调试运行 四、实验要求 1、采用递归下降语法制导翻译法,对算术表达式,赋值语句进行语义分析并 生成四元式序列. 2、输入是语法分析后提供的正确的单词串,输出四元式序列. 例如:对于语句串 Begin a:=2+3*4;x:=(a+b)/c end# 输出的指令如下: (1) t1=3*4 (2) t2=w+t1 (3) a=t2 (4) t3=a+b (5) t4=t3/c (6) x=t4 五、设计原理

  • 【编译原理】c++实现自上而下语法分析器

    写在前面:本博客为本人原创,严禁任何形式的转载!本博客只允许放在博客园(.cnblogs.com),如果您在其他网站看到这篇博文,请通过下面这个唯一的合法链接转到原文! 本博客全网唯一合法URL:http://www.cnblogs.com/acm-icpcer/p/8964342.html   使用递归下降子程序实现的PL/0语言的算术表达式的自上而下语法分析。该语言的其他语法实...

  • 编译原理实验二 自上而下语法分析

    自上而下 语法分析实验 一、实验目的 (1)给出 PL/0 文法规范,要求编写 PL/0语言的语法分析程序。 (2)通过设计、编制、调试一个典型的自上而下语法分析程序,实现对词法分析程序所提供的单词序列进行语法检查和结构分析,进一步掌握常用的语法分析方法。 (3)选择最有代表性的语法分析方法,如递归下降分析法、预测分析法;选择对各种常见程序语言都具备的语法结构,如赋值语句,特别是表达式,作为分析对象。 二、实验内容 (1)已给 PL/0 语言文法,构造表达式部分的语法分析器。 分析对象〈算术表达式〉的 BN

  • Java实现算术表达式词法分析程序

    Java实现算术表达式词法分析程序,更多详情可以查看博客wmathor.com

  • 编译原理实验报告 熟悉算术表达式的语法分析与中间代码生成原理

    1. 构造算术表达式的四元式翻译文法 2. 设计算术表达式的递归下降子程序分析算法 3. 设计算术表达的四元式生成算法 4. 实现代码并调试运行

  • 设计实现语法分析器及相关(JAVA)

    设计实现语法分析器及相关 实验内容 根据P81 2(4)写出对应的递归下降分析程序,分析输入串正确与否; E->TE’ E’->+E | ε T->FT’ T’->T | ε F->PF’ F’->*F’ | ε P->(E) | a | b | ^ 实验目的 通过设计、编制、调试一个递归下降语法分析程序,实现对词法分析程序所提供的单词序列进行语法检查和结构分析,掌握常用的语法分析方法。通过本实验,应达到以下目标: 1、掌握从源程序文件中读取有效字符的方法和产生源

  • java 调用js 方法库进行简单的数学表达式的运算

    @Test public void ttt() throws Exception { String expr = "a==a";//"1>2 " boolean ss=ruleCal(expr); System.out.println(ss); } private Boolean ruleCal(String rule){ Sc

  • 编译原理:语法分析(算术表达式的扩充)

    实验二 语法分析(算术表达式的扩充) 一·、实验题目 算术表达式文法扩充如下: E→E+E| E-E|E*E |E/E| (E) | I 试根据该文法重新设计LR分析表,并修改语义加工程序,最后验证修改的结果。 二、实验过程 (1)代码设计 由于一开始没有用实验要求的文法设计的表(最主要是实验要求的文法有很多左递归的文法造成对于还没充分认识LR的我来说,存在很大的难度。所以查找一些假设LR构造的表已经设计出来的,看看LR语法分析的流程),所以等我了解了LR构造的流程以后,我就想设计一个更加符合要求的。

  • 编译原理实验2(1)——自上而下语法分析

    1、为初等函数运算语言构造LL(1)语法分析器。2、掌握LL(1)语法分析器的方法,加深对自上而下语法分析原理的理解。3、掌握设计、编制并调试LL(1)语法分析程序的思想和方法。一、根据初等函数运算语言运算法则,将语法模式用上下文无关文法表达。(纸上作业)1、注意运算的优先级问题,避免产生二义性文法。二、将上述文法改写为LL(1)文法。(纸上作业)三、根据LL(1)文法给出预测分析表。(纸上作业)四、根据预测分析表,给出解析LL(1)文法的递归下降子程序或预测分析器程序。五、本语法分析程序的输入是实验一生成

Global site tag (gtag.js) - Google Analytics