我正在尝试解析以下字符串:
<<! variable, my_variable, A description of my variable !>>
从我在这里做的阅读中,我认为我需要使用模式来区分文字字符串'variable',变量名(my_variable)和变量描述的词法分析器。
我遇到的问题是我不确定如何构建它。是否可以嵌套模式?是否有更好/更聪明的方法来组织我的词法规则?
lexer grammar VariableLexer;
variableMarkdown : DELIMITER_OPEN SPACE VARIABLE COMMA SPACE variable_name COMMA SPACE description SPACE DELIMITER_CLOSE;
description : WORDS ;
variable_name : ID ;
DELIMITER_OPEN : '<<!' ;
DELIMITER_CLOSE : '!>>';
COMMA : ',' ;
SPACE : ' ' ;
VARIABLE : 'variable' -> pushMode(VariableName);
mode VariableName;
ID : LOWERCASE ( LOWERCASE | NUMBER | UNDERSCORE )* -> pushMode(VariableDescription) ;
mode VariableDescription;
WORDS : ( UPPERCASE | LOWERCASE | NUMBER | SPACE )+ -> popMode;
fragment LOWERCASE : 'a'..'z' ;
fragment UPPERCASE : 'A'..'Z' ;
fragment UNDERSCORE : '_' ;
fragment NUMBER : '0'..'9' ;
答案 0 :(得分:0)
首先 - 你不能在词法分析器语法中使用解析器规则 - 解析器规则以小写字母开头,而词法分析器则以大写字母开头。
我这样做(可能不是正确的语法,但你会得到这个想法):
$(document).ready(function(){
Login.initialise();
});
var Login = (function(){
var login = function(){
var data = Util.serializeForm("#loginform");
var request = {
"ssoid":data.userName,
"password":$("#password").val(),
"captcha" : data.textCaptcha
};
$( "#loginform" ).submit();
};
var loginFormReset = function(){
console.log("loginFormReset");
};
var refreshCaptcha = function(e){
if(e){
e.preventDefault();
}
$('#captchaImage').attr(
'src',Util.getContextPath()+'/RegisterCaptchaController'
);
};
var init = function(){
refreshCaptcha();
$("#btnLogin").click(login);
$("#btnLoginReset").click(loginFormReset);
$("#refreshCaptcha").click(refreshCaptcha);
$("#refreshCaptchaTop").click(refreshCaptcha);
};
return{
initialise:init
}
})();
基本上这样你就可以跳到你需要的模式而不是推动和弹出。