打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
使用ANTLR构建PowerScript语法分析器(4) | OutOfMemory

使用ANTLR构建PowerScript语法分析器(4)

什么是表达式
简单的来说,表达式就是操作数和操作符根据语法规则结合后的结果,它通常被用来执行在变量或值上的操作处理。

主表达式(Primary Expression)
到现在PowerScript的词法分析已经写的差不多了,接下来就要开始写语法分析。语法分析的主要组成部分是表达式(expression),而表达式的主要组成部分则是主表达式。主表达式包含了大部分简单的表达式,如文字量(Literals),字段存取,方法调用和数组存取等。带圆括号的表达式通常也被认为是主表达式。其常见形式如下:

(x)x.yf(x)a[x]x++x--new

super,parent,this分析
什么时候使用super
当直接子类中存在有和父类相同签名的事件或函数时

使用super有哪些限制
1. 不能调用父类中控件的脚本 (猜测super后只能跟随”::”符号)
2. 只能在直接子类的函数或事件中调用父类的事件或函数

在哪些脚本中可以使用parent
1. 窗口中的控件,此时parent指代包含该控件的窗口
2. 定制的用户对象中的控件,这时parent指代定制的用户对象
3. 菜单,这时候parent指代该菜单的上一级菜单

收集的一些script语句

this.ls_array[1]this.event pfc_addrow()this.event rowfocuschanged(ll_row)this.uo_1.function hallo()post function column_order_update_from_grid()event ue_process()close(parent)parent.enabledparent.hide()parent.event ue_postconstructor()parent.function static trigger wf_process( )super::createsuper::clicked;super::event clicked()super::event clicked(xpos, ypos, row, dwo)super::of_remove_tail(anv_tailnode)super::event trigger selectionchanging(oldindex, newindex)iu_tab_postings.post of_enable_sort(dw_main, dw_detail, false)w_main.event doubleclicked(flags, xpos, ypos)dw_main.event pfc_retrieve()cb_ok.event trigger clicked()cb_ok.triggerevent(clicked!)

主表达式语法,还需要再继续完善

primary_expression    :   '(' expression ')'    |   IDENTIFIER '!'?    // build-in constant    |   literal    |   '::' IDENTIFIER    // global variables    |   call_type IDENTIFIER arguments    // example: post function to_string()    |   'create' 'using'? (STRING_LITERAL|IDENTIFIER)    |   'destroy' IDENTIFIER    |   'super' '::' call_type? IDENTIFIER arguments?    |   objectname ('.' IDENTIFIER)* identifier_suffix?    ;objectname    :   'this'    |   'parent'    |   IDENTIFIER    ;call_type    :   ( 'function'        | 'event'        | 'static'        | 'dynamic'        | 'trigger'        | 'post'        )+    ;identifier_suffix    :   arguments ('.' IDENTIFIER arguments)*    // cascaded calling    |   '[' expression_list? ']'    |   call_type IDENTIFIER arguments    ;arguments    :   '(' expression_list? ')'    ;literal    :   STRING_LITERAL    |   INTEGER_LITERAL    |   FLOAT_LITERAL    |   BOOLEAN_LITERAL    ;
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
使用Antlr实现表达式引擎
带你揭开神秘的 javascript AST 面纱之AST 基础与功能
Intercepting System Calls on x86
按回车登录
编译器如何将高级语言转化成汇编语言的?
编程语言如何实现?
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服