start: fileline* fileline: cmd_series | empty | comment | assign _NL* assign: (var_name "=" assign_value)|(val_slice "=" assign_value) var_name: "$"? NAME assign_value: /[^\n]+/ empty: WS+ comment: /#[^\n]*/ cmd_series: cmd (";" cmd)* [";"] cmd: complex_cmd|userv_cmd complex_cmd: (cmd_name arg_list? opt_list?) simple_cmd: compound_cmd_name arg_list compound_cmd_name: cmd_name ("_"|LETTER)+ //cmd1 cmd2 cmd3 for testing only //%import gplus3_inc1.test_cmd //%import gplus3_inc1.cmd_name test_cmd: "cmd1"|"cmd2"|"cmd3" //cmd_name: test_cmd | "ds" | "run" | "sets" | "ncfg" |"figs"|"prpre"|"notice"|"print"|"dir"|"def"|"defaults"|"yaxis"|"xaxis"|"legen"|"plot"|"oplot"|"figtt"|"COLOR"|"legend"|"prop"|"figttl"|"ann"|"exit"|"plot_symbol_color"|"plot_line_color"|"plot_symbol_type"|"plot_line_thick"|"plot_grid_line_type"|"plot_grid_type" cmd_name: test_cmd | "ANN"i | "AUTODISP"i | "AUTOLOAD"i | "BEGIN"i | "END"i | "BEGIN_DATA"i | "END_DATA"i | "BREAK"i | "CD"i | "CLASS"i | "CLEAR"i | "COLOR"i | "COMBINE"i | "CONT"i | "CONTOUR"i | "COPY"i | "CT"i | "DEF"i | "DEL"i | "DERIV"i | "DIC"i | "DIR"i | "DISP"i | "DO"i | "DONE"i | "DS"i | "DT"i | "ELL"i | "EVAL"i | "EWMA"i | "EXIT"i | "FIGS"i | "FIGTTL"i | "FOR"i | "GET"i | "GRID"i | "GROUP"i | "HELP"i | "IF"i | "LEGEND"i | "LINE"i | "MATH"i | "MN"i | "NCFG"i | "NOTICE"i | "OCONTOUR"i | "OPLOT"i | "PAGE"i | "PAGES"i | "PARAMS"i | "PFIT"i | "PGTTL"i | "PLOT"i | "PRINT"i | "PROP"i | "PRPRE"i | "PV"i | "PWD"i | "QUIT"i | "RE"i | "REC"i | "REGEXP"i | "REN"i | "REP"i | "REPS"i | "RUN"i | "SETS"i | "SHOW"i | "SMOOTH"i | "SORT"i | "SPLINE"i | "SQUARE"i | "STOP"i | "SUB"i | "SUSP"i | "SYS"i | "TC"i | "USERV"i | "VIEW"i | "WHILE"i | "WRITEMAC"i | "XAXIS"i | "YAXIS"i userv_cmd:"userv" var_name userv_opt* userv_opt: userv_opt_dt|userv_opt_v userv_opt_dt: "-dt" NAME userv_opt_v: "-v" assign_value //arg_list: (val_slice | arg_name | val_list | val_range)+ arg_list: val_list arg_name: ("_"|LETTER|"$") ("_"|LETTER|DIGIT|"."|"-")* user_var_name: "$" NAME opt_list: opt_pair+ opt_pair: key (val_list)? key: "-" NAME value: NAME | NUMBER | SIGNED_NUMBER | ESCAPED_STRING | user_var_name | val_slice | arg_name | val_range | array val_list: value ((","? WS_INLINE*) value)* array: "[" value (("," WS_INLINE*) value)* "]" val_slice: NAME ":" NUMBER val_range: NUMBER"-" NUMBER NAME: ("_"|LETTER) ("_"|LETTER|DIGIT|".")* ESCAPED_STRING: /("(?!"").*?(?