javascript – 你如何在Jison中匹配零个或多个令牌?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了javascript – 你如何在Jison中匹配零个或多个令牌?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1850字,纯文字阅读大概需要3分钟。
内容图文
![javascript – 你如何在Jison中匹配零个或多个令牌?](/upload/InfoBanner/zyjiaocheng/770/d2c2de8a1fb5409e81d35a26ceb8bc48.jpg)
我正在Jison中编写一个简单的表达式解析器,允许任意数量的换行符跟在表达式中的二元运算符.到目前为止这是我的语法:
{
"operators": [
["left", "+", "-"],
["left", "*", "/", "%"]
],
"bnf": {
"program": [
["statement EOF", "return $1;"]
],
"statement": [
["expression newlines", "$$= $1 + ';';"]
],
"expression": [
["NUMBER", "$$= yytext;"],
["expression + expression", "$$= $1 + ' + ' + $3;"],
["expression - expression", "$$= $1 + ' - ' + $3;"],
["expression * expression", "$$= $1 + ' * ' + $3;"],
["expression / expression", "$$= $1 + ' / ' + $3;"],
["expression % expression", "$$= $1 + ' % ' + $3;"],
["expression + newlines expression", "$$= $1 + ' + ' + $4;"],
["expression - newlines expression", "$$= $1 + ' - ' + $4;"],
["expression * newlines expression", "$$= $1 + ' * ' + $4;"],
["expression / newlines expression", "$$= $1 + ' / ' + $4;"],
["expression % newlines expression", "$$= $1 + ' % ' + $4;"]
],
"newlines": [
["NEWLINE", ""],
["newlines NEWLINE", ""]
]
}
}
正如您所看到的,我正在为每个二元运算符编写两条规则.在我看来,这是多余的.我宁愿生产一个匹配零个或多个NEWLINE标记(Kleene star)而不是一个或多个标记(Kleene plus)的产品.你怎么在Jison做这个?
解决方法:
我使用Jison而忽略了空格(包括换行).
我的%lex中的第一行是:
\s+ /* ignore */
但如果你不愿意,你不必这样做.
尝试这些方面的东西:
"expression": [
["NUMBER", "$$= yytext;"],
["expression + expression", "$$= $1 + ' + ' + $3;"],
["expression - expression", "$$= $1 + ' - ' + $3;"],
["expression * expression", "$$= $1 + ' * ' + $3;"],
["expression / expression", "$$= $1 + ' / ' + $3;"],
["expression % expression", "$$= $1 + ' % ' + $3;"],
["expression newlines", "$$= $1"],
["newlines expression", "$$= $2"]
],
这应该允许任何表达式之前/之后的任何数量的新行.
内容总结
以上是互联网集市为您收集整理的javascript – 你如何在Jison中匹配零个或多个令牌?全部内容,希望文章能够帮你解决javascript – 你如何在Jison中匹配零个或多个令牌?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。