首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Antlr4解析jsp scriptlets表达式指令

问Antlr4解析jsp scriptlets表达式指令
EN

Stack Overflow用户
提问于 2017-06-06 14:40:31
回答 0查看 275关注 0票数 0

我想解析jsp文件来识别指令标签,jsp action元素,scriptlet表达式等。为此,我试图扩展现有的html grammar。我遇到了区分普通html标签打开和jsp标签打开的问题。现有语法具有以下词法分析器规则:

代码语言:javascript
复制
TAG_OPEN
    : '<' -> pushMode(TAG)
    ;
//
// tag declarations
//
mode TAG;

TAG_CLOSE
    : '>' -> popMode
    ;

TAG_SLASH_CLOSE
    : '/>' -> popMode
    ;

TAG_SLASH
    : '/'
    ;

//
// lexing mode for attribute values
//
TAG_EQUALS
    : '=' -> pushMode(ATTVALUE)
    ;

TAG_NAME
    : TAG_NameStartChar TAG_NameChar*
    | TAG_NameStartChar* ':' TAG_NameStartChar*
    ;

TAG_WHITESPACE
    : [ \t\r\n] -> skip
    ;

以及与此对应的解析器规则:

代码语言:javascript
复制
htmlElement
    : TAG_OPEN htmlTagName htmlAttribute* TAG_CLOSE htmlContent TAG_OPEN TAG_SLASH htmlTagName TAG_CLOSE
    | TAG_OPEN htmlTagName htmlAttribute* TAG_SLASH_CLOSE
    | TAG_OPEN htmlTagName htmlAttribute* TAG_CLOSE
    | TAG_OPEN TAG_SLASH htmlTagName TAG_CLOSE
//  | jspDirective
//  | jspDeclaration
    | scriptlet
    | script
    | style
    ;

我正在尝试使用以下内容来扩展上述规则:

代码语言:javascript
复制
scriptlet
    : JSP_TAG_OPEN jspElement jspElementName jspElementAttribute* JSP_TAG_CLOSE 
    //|SCRIPTLET
    ;

jspElementName
    : TAG_NAME
    ;

jspElementAttribute
    : jspAttributeName TAG_EQUALS jspAttributeValue
    ;

jspAttributeName
    : TAG_NAME
    ;

jspAttributeValue
    : ATTVALUE_VALUE
    ;

jspElement
    : jspDirective
    | jspExpression
    | jspDeclaration
    | jspFragment
    ;

jspDirective    
    : JSP_DIRECTIVE_SIGN
    ;

jspExpression
    : JSP_EXPRESSION_SIGN
    ;

jspDeclaration
    : JSP_DECLARATION_SIGN
    ;

jspFragment
    : JSP_FRAGMENT_SIGN
    ;

词法分析器规则是:

代码语言:javascript
复制
JSP_TAG_OPEN
    : '<%' ' '*
    ;

JSP_DIRECTIVE_SIGN
    : '@'
    ;

JSP_EXPRESSION_SIGN
    : '='
    ;

JSP_DECLARATION_SIGN
    : '!'
    ;

JSP_FRAGMENT_SIGN
    : [ ]+
    ;

JSP_TAG_CLOSE
    : '%>'  
    ;

但我猜问题在于,每当遇到<字符时,TAG_OPEN的词法分析器规则就会开始运行,而不是等待查看这是否是jsp标记<%。

因此,当我试图解析一个包含以下内容的小html时:

代码语言:javascript
复制
<html>
<title>Statement Load page</title>
<%@ taglib uri="http://jakarta.apache.org/struts/tags-html"
    prefix="html"%>

我得到了这个错误:

代码语言:javascript
复制
line 3:2 no viable alternative at input '@ taglib uri="http://jakarta.apache.org/struts/tags-html"\r\n\tprefix="html"%>\r\n'
EN

回答

页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44382982

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档