mota-js/_server/blockly/MotaAction.g4
YouWei Zhao fbb05c4649 MotaAction.g4 && ~~'动作列表'~~
添加了语法的描述文件MotaAction.g4
移除了blockly中'动作列表'的字样
2018-01-26 01:15:20 +08:00

208 lines
3.9 KiB
ANTLR

grammar MotaAction;
//===============parser===============
//事件 程序入口之一
event_m
: actionList
;
//动作集合
actionList
: (statement|Newline)+
;
//为了避免关键字冲突,全部加了_s
//动作
statement
: text_s
| tip_s
| show_s
| hide_s
| move_s
| moveHero_s
| changeFloor_s
| changePos_s
| setFg_s
| openDoor_s
| openShop_s
| disableShop_s
| battle_s
| trigger_s
| playSound_s
| playBgm_s
| pauseBgm_s
| resumeBgm_s
| setValue_s
| if_s
| choices_s
| win_s
| lose_s
| function_s
| update_s
| sleep_s
| revisit_s
| exit_s
;
text_s
: '显示文章' ':' EvalString Newline
| ('标题' EvalString)? ('图像' IdString)? ':' EvalString Newline
;
tip_s
: '显示提示' ':' EvalString Newline
;
setValue_s
: '变量操作' ':' '名称' EvalString '值' EvalString Newline
;
show_s
: '显示事件' INT ',' INT ('楼层' IdString)? ('动画时间' INT)? Newline
;
hide_s
: '隐藏事件' (INT ',' INT)? ('楼层' IdString)? ('动画时间' INT)? Newline
;
trigger_s
: '触发事件' INT ',' INT Newline
;
revisit_s
: '重启当前事件' Newline
;
exit_s
: '立刻结束当前事件' Newline
;
update_s
: '更新状态栏和地图显伤' Newline
;
sleep_s
: '等待' INT '毫秒' Newline
;
battle_s
: '强制战斗' IdString Newline
;
openDoor_s
: '开门' INT ',' INT ('楼层' IdString)? Newline
;
changeFloor_s
: '楼层切换' IdString INT ',' INT ('上'|'下'|'左'|'右')? ('动画时间' INT)? Newline
;
changePos_s
: '位置切换' INT ',' INT ('上'|'下'|'左'|'右')? Newline
| '勇士转向' ('上'|'下'|'左'|'右') Newline
;
openShop_s
: '打开全局商店' IdString Newline
;
disableShop_s
: '禁用全局商店' IdString Newline
;
setFg_s
: '更改画面色调' NUMBER ',' NUMBER ',' NUMBER (',' NUMBER)? ('动画时间' INT)? Newline
| '恢复画面色调' ('动画时间' INT)? Newline
;
move_s
: '移动事件' (INT ',' INT)? ('动画时间' INT)? '立刻消失'? (('上'|'下'|'左'|'右') INT?)+ Newline
;
moveHero_s
: '移动勇士' ('动画时间' INT)? (('上'|'下'|'左'|'右') INT?)+ Newline
;
playBgm_s
: '播放背景音乐' EvalString Newline
;
pauseBgm_s
: '暂停背景音乐' Newline
;
resumeBgm_s
: '恢复背景音乐' Newline
;
playSound_s
: '播放音效' EvalString Newline
;
win_s
: '游戏胜利' EvalString Newline
;
lose_s
: '游戏失败' EvalString Newline
;
if_s
: '条件分歧' ':' EvalString Newline actionList '条件失败' ':' Newline actionList '分歧结束' Newline
;
choices_s
: '选项开始' EvalString Newline choicesContext+ '选项结束' Newline
;
choicesContext
: '选项文字' EvalString Newline actionList
;
function_s
: '自定义脚本' Newline .*? Newline '自定义结束' Newline
;
//===============lexer===============
NUMBER
: '-'? INT '.' INT EXP? // 1.35, 1.35E-9, 0.3, -4.5
| '-'? INT EXP // 1e10 -3e4
| '-'? INT // -3, 45
;
INT : '0' | '1'..'9' '0'..'9'* ; // no leading zeros
fragment EXP : [Ee] [+\-]? INT ; // \- since - means "range" inside [...]
IdString
: [a-zA-Z_][0-9a-zA-Z_\-]*
;
EvalString
: (ESC_str | ~[\\])*?
;
fragment ESC_str : '\\' ([\\/bfnrt] | UNICODE) ;
fragment UNICODE : 'u' HEX HEX HEX HEX ;
fragment HEX : [0-9a-fA-F] ;
//===
WhiteSpace
: [ \t]+ -> skip
;
Newline
: ('\r' '\n'?| '\n') -> skip
;
BlockComment
: '/*' .*? '*/' -> skip
;
LineComment
: '//' ~[\r\n]* -> skip
;