使用Jison创建/翻译简单的脚本到另一种语言
Using Jison to create / translate simple script to another language
我一直在玩Jison,试图为一个非常简单的脚本语法创建一个"解释器"(这只是一个个人搞乱的项目,没有商业案例!)
我创建编译器已经有20年了,我想我只是没有掌握一些概念。
我想做的是给一个非常简单的语句程序,每行一个,到Jison,并得到Javascript语句流,然后执行动作。
我可能看错了-也许我需要在解析期间实际执行操作?这听起来不太对。
无论如何,我得到的是(我正在尝试这个在线顺便http://zaach.github.io/jison/try/)
/* lexical grammar */
%lex
%options case-insensitive
%%
's+ /* skip whitespace */
is's+a'b return 'OCREATE'
is's+some'b return 'ACREATE'
[_a-zA-Z]+[_a-zA-Z0-9]*'b return 'IDENTIFIER'
<<EOF>> return 'EOF'
/lex
/* operator associations and precedence */
%start input
%% /* language grammar */
input
: /* empty */
| program EOF
{ return $1; }
;
program
: expression
{ $$ = $1; }
| program expression
{ $$ = $1; }
;
expression
: IDENTIFIER OCREATE IDENTIFIER
{ $$ = 'controller.createOne(''' + $1 + ''', ''' + $3 + ''');' }
| IDENTIFIER ACREATE IDENTIFIER
{ $$ = 'controller.createSeveral(''' + $1 + ''', ''' + $3 + ''');' }
;
输入:
basket is some apples
orange is a fruit
…我想:
controller.createSeveral('basket', 'apples');
controller.createOne('orange', 'fruit');
我得到的是:
controller.createSeveral('basket', 'apples');
这对我来说是有意义的,可以得到一个结果,但是我不知道该怎么做才能继续构建我的输出
问题出在program
的第二次生产中:
program
: expression
{ $$ = $1; }
| program expression
{ $$ = $1; }
第二个结果的意思是,基本上,"一个程序可以是一个(较短的)程序,后面跟着一个表达式,但它的语义值是较短程序的值。"
显然,您希望程序的值被表达式的值增广,因此您需要这样说:
program
: expression
{ $$ = $1; }
| program expression
{ $$ = $1.concat($2); }
(或$$ = $1 + $2
,如果你喜欢。)您可能需要一个换行符来提高可读性。)
相关文章:
- Windows8应用程序(html&Javascript):从图片库(除了文件选择器)显示图像的另一种方式
- jQuery:使用substr()的另一种方法
- 另一种显示和隐藏按钮的方式
- 单击()的另一种方式
- 解析一个复杂的JavaScript表达式,将其改写为另一种格式
- parseJSON在一种情况下有效,而在另一种情况中无效
- 如何访问对象's成员通过另一种方法填充的方法
- 是否可以在网页上用另一种字体设置jqmath-display的样式
- 用于自动将一种类型的URL更改为另一种类型
- 将日期字符串转换为另一种语言
- Rails 以一种方式格式化 DateTime.now 和 DateTime.yesterday 另一种方式 - 我如何
- 通过javascript将带有日期的字符串格式化为另一种格式
- 输入文本是't在一种情况下以相同的形式更新与另一种情况相同的角度模型
- 将JSON从一种格式转换为另一种格式
- 另一种方式是Javascript中的函数堆叠
- require.js是require的另一种方式
- 如何获得一种颜色的rgb值'It’它接近另一种颜色
- 使用另一种脚本语言来代替Javascript,由浏览器进行解释
- 是否有另一种方法来禁用缓存时获取脚本
- 使用Jison创建/翻译简单的脚本到另一种语言