JISON 解析器中的验证
Validations in JISON parser
所以我使用 JISON
生成了一个解析器:
%lex
%x TEXT
%%
("Project"|"project") {return 'PROJECTCOMMAND';}
"-au" {return 'ADDUSER';}
"-n" {this.begin('TEXT'); return 'NAMEOPTION';}
"-k" {return 'KEYOPTION';}
"-desc" {return 'DESCRIPTION';}
("--add"|"-a") {return 'ADDOPTION';}
<TEXT>[-a-zA-Z0-9@'.]+ {this.popState(); return 'TEXT';}
<INITIAL,TEXT>'s+ // Ignore white space...
/lex
%%
line :
PROJECTCOMMAND ADDUSER
{
//Project Command of add user
var res = new Object();
res.value = "addUser Project";
return res;
}
| PROJECTCOMMAND ADDOPTION
{
//Project Command with no arguments
var res = new Object();
res.value = "addProject";
return res;
}
| PROJECTCOMMAND ADDOPTION NAMEOPTION TEXT
{
//Project command with project name as argument
var res = new Object();
res.value = "addProject name";
res.name = $4;
return res;
}
有什么方法可以对命令进行验证,即如果命令不满足上述任何规则,则抛出错误,即具有默认选项。
解析器末尾的类似内容:
| return "command is invalid";
提前致谢
这个问题还没有答案,因为它比看起来要大。您询问的是从解析器生成器工具构建的解析器中给出有意义的错误消息的一般问题。多年来,这一直是编译器编写者和工具编写者的问题。
解析器通常不像过程程序那样工作,因为您不能像在编程时在开关或 if 语句中那样使用"默认"或"else"子句,尽管它看起来很容易扩展,但事实并非如此。正是出于这个原因,有些人仍然手动编写自己的自定义解析器,因为它使他们能够灵活地处理此类错误情况。错误情况是规则与文本不匹配。关于这个主题已经写了很多学术论文,但在这里可以找到一个小的例子讨论:http://research.swtch.com/yyerror。
你问了JISON,它基于yacc/bison。在 yacc/bison 中,错误情况由称为 yyerror 的内置功能处理。这使失败错误消息可以自定义为"命令无效"之类的内容。据我所知,此功能尚未在 JISON 中实现。
在这种情况下,您必须修改语法规则,以便对所有可能的替代项(将成为错误消息)进行操作。例如:
| PROJECTCOMMAND ADDOPTION NAMEOPTION
{ // Error
return something;
}
| ADDOPTION NAMEOPTION TEXT
{ // Error
return something;
}
| NAMEOPTION TEXT
{ // Error
return something;
}
| TEXT
{ // Error
return something;
}
| ADDOPTION TEXT
{ // Error
return something;
}
.... and every other combination of tokens ....
正如你所看到的,这既可怕又不令人满意。
相关文章:
- 正在验证8个真/假复选框或复选框中的2个
- 借助asp.net验证或java脚本对多个文本进行验证
- jQuery自定义验证比较多个输入的序列
- 使用html中的外部javascript进行数据验证
- 如何使用jquery Validation验证Formspread
- jquery中的文本框验证
- 在验证和发送邮件后更改联系人表单的 html
- 代码不会验证
- JS验证ajax返回的html中的表单数据
- 同步调用,直到用户通过angular验证为访问者
- 带有加号的电话号码验证(可选)
- 解析javascript表单验证器
- 两位数的月份日期验证
- 使用angularjs验证文本框中的电子邮件
- 验证Javascript中的Textarea
- 使用regex的jquery keydown绑定不会验证撇号和句点
- Jquery表单验证插件-如果选中复选框,如何在提交时执行某些操作
- 正在删除node.js中已验证的网站
- 自定义表单验证和提交
- JISON 解析器中的验证