|
From: | Peter Willis |
Subject: | Re: [Help-source-highlight] Regular Expression Explanation for 'function.lang' |
Date: | Fri, 27 May 2011 13:53:20 -0700 |
User-agent: | Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.2.17) Gecko/20110414 Lightning/1.0b2 Thunderbird/3.1.10 |
Hello, There is a 'Wikipedia' page for IDL located at: http://en.wikipedia.org/wiki/IDL_(programming_language) There is a complete IDL programming manual located: http://idlastro.gsfc.nasa.gov/idl_html_help/Programming_in_IDL.html Normally procedures an functions are called on one line unless the line exceeds 64 (?) characters. In that case the line may use '$' symbol to continue the call statement on the next line. Procedures do not return values, hence they are never called as variables. Functions can happen in-line anywhere. Commas are also used as delimiters for array members in IDL. Below is the language definition for rsiidl.lang . 'procedure.lang' is just a duplicate of 'function.lang' at this point. Best Regards, Peter //////////RSIIDL.LANG BEGIN/////////////////////////// preproc = "include|include_once|require|require_once" comment start ";" include "number.lang" string delim "\"" "\"" escape "\\" multiline string delim "'" "'" escape "\\" multilinekeyword = "COMMON|COMPILE_OPT|PRO|FUNCTION|BEGIN|BREAK|END|GOTO|IF|THEN|ELSE|ENDIF|CASE|OF|ENDCASE|SWITCH|ENDSWITCH|FOR|DO|CONTINUE|ENDFOR|WHILE|ENDWHILE|LT|LE|EQ|NE|GE|GT|>|<|NOT|OR|XOR|AND|MOD|FORWARD_FUNCTION|ON_ERROR|ON_IOERROR|REPEAT|UNTIL|.COMPILE|.CONTINUE|.EDIT|.FULL_RESET_SESSION|.GO|.OUT|.RESET_SESSION|.RETURN|.RNEW|.RUN|.SKIP|.STEP|.STEPOVER|.TRACE|A_CORRELATE|ABS|ACOS|ADAPT_HIST_EQUAL|ALOG|ALOG10|AMOEBA|ANNOTATE|APP_USER_DIR|APP_USER_DIR_QUERY|ARG_PRESENT|ARRAY_EQUAL|ARRAY_INDICES|ARROW|ASCII_TEMPLATE|ASIN|ASSOC|ATAN|BAR_PLOT|BESELI|BESELJ|BESELK|BESELY |BETA |BILINEAR |BIN_DATE |BINARY_TEMPLATE |BINDGEN |BINOMIAL |BLK_CON |BOX_CURSOR |BROYDEN |BYTARR |BYTE |BYTSCL |C_CORRELATE |CALDAT |CALENDAR |CALL_EXTERNAL |CALL_FUNCTION |CALL_METHOD |CEIL |CHEBYSHEV |CHECK_MATH |CHISQR_CVF |CHISQR_PDF |CHOLSOL |CINDGEN |CIR_3PNT |CLUST_WTS |CLUSTER |CLUSTER_TREE |COLOR_QUAN |COLORMAP_APPLICABLE |COMFIT |COMPLEX |COMPLEXARR |COMPLEXROUND |COMPUTE_MESH_NORMALS |COND |CONGRID |CONJ |CONVERT_COORD |CONVOL |COORD2TO3 |CORRELATE |COS |COSH |CRAMER |CREATE_CURSOR |CREATE_STRUCT |CREATE_VIEW |CROSSP |CRVLENGTH |CT_LUMINANCE |CTI_TEST |CURVEFIT |CV_COORD |CVTTOBM |CW_ANIMATE |CW_ANIMATE_GETP |CW_ANIMATE_LOAD |CW_ANIMATE_RUN |CW_ARCBALL |CW_BGROUP |CW_CLR_INDEX |CW_COLORSEL |CW_DEFROI |CW_FIELD |CW_FILESEL |CW_FORM |CW_FSLIDER |CW_LIGHT_EDITOR |CW_LIGHT_EDITOR_GET |CW_LIGHT_EDITOR_SET |CW_ORIENT |CW_PALETTE_EDITOR |CW_PALETTE_EDITOR_GET |CW_PALETTE_EDITOR_SET |CW_PDMENU |CW_RGBSLIDER |CW_TMPL |CW_ZOOM |DBLARR |DCINDGEN |DCOMPLEX |DCOMPLEXARR |DEFROI |DENDRO_PLOT |DENDROGRAM |DERIV |DERIVSIG |DETERM |DIAG_MATRIX |DIALOG_MESSAGE |DIALOG_PICKFILE |DIALOG_PRINTERSETUP |DIALOG_PRINTJOB |DIALOG_READ_IMAGE |DIALOG_WRITE_IMAGE |DIGITAL_FILTER |DILATE |DINDGEN |DISSOLVE |DIST |DISTANCE_MEASURE |DOC_LIBRARY |DOUBLE |EFONT |EIGENQL |EIGENVEC |ELMHES |EOF |ERF |ERFC |ERFCX |ERODE |ERRPLOT |EXECUTE |EXP |EXPAND |EXPAND_PATH |EXPINT |EXTRAC |EXTRACT_SLICE |F_CVF |F_PDF |FACTORIAL |FFT |FILE_BASENAME |FILE_DIRNAME |FILE_EXPAND_PATH |FILE_INFO |FILE_LINES |FILE_LINK |FILE_READLINK |FILE_SAME |FILE_SEARCH |FILE_TEST |FILE_WHICH |FILEPATH |FINDGEN |FINITE |FIX |FLICK |FLOAT |FLOOR |FLOW3 |FLTARR |FORMAT_AXIS_VALUES |FSTAT |FULSTR |FUNCT |FV_TEST |FX_ROOT |FZ_ROOTS |GAMMA |GAMMA_CT |GAUSS_CVF |GAUSS_PDF |GAUSS2DFIT |GAUSSFIT |GAUSSINT |GET_DRIVE_LIST |GET_KBRD |GET_LUN |GET_SCREEN_SIZE |GETENV |GRID_TPS |GRID3 |GRIDDATA |GS_ITER |H_EQ_CT |H_EQ_INT |H5_BROWSER |HANNING |HDF_BROWSER |HDF_READ |HILBERT |HIST_2D |HIST_EQUAL |HISTOGRAM |HLS |HOUGH |HQR |HSV |IBETA |ICONTOUR |IDENTITY |IDL_VALIDNAME |IDLITSYS_CREATETOOL |IGAMMA |IIMAGE |IMAGE_CONT |IMAGINARY |IMAP |INDGEN |INT_2D |INT_3D |INT_TABULATED |INTARR |INTERPOL |INTERPOLATE |INVERT |IOCTL |IPLOT |ISHFT |ISURFACE |ITCURRENT |ITDELETE |ITGETCURRENT |ITREGISTER |ITRESET |ITRESOLVE |IVOLUME |JULDAY |KEYWORD_SET |KRIG2D |KURTOSIS |KW_TEST |L64INDGEN |LA_CHOLMPROVE |LA_CHOLSOL |LA_DETERM |LA_EIGENPROBLEM |LA_EIGENQL |LA_EIGENVEC |LA_ELMHES |LA_GM_LINEAR_MODEL |LA_HQR |LA_INVERT |LA_LEAST_SQUARE_EQUALITY |LA_LEAST_SQUARES |LA_LINEAR_EQUATION |LA_LUMPROVE |LA_LUSOL |LA_TRIMPROVE |LA_TRISOL |LABEL_DATE |LABEL_REGION |LADFIT |LAGUERRE |LEEFILT |LEGENDRE |LINBCG |LINDGEN |LINFIT |LL_ARC_DISTANCE |LMFIT |LMGR |LNGAMMA |LNP_TEST |LOADCT |LOCALE_GET |LOGICAL_AND |LOGICAL_OR |LOGICAL_TRUE |LON64ARR |LONARR |LONG |LONG64 |LSODE |LU_COMPLEX |LUMPROVE |LUSOL |M_CORRELATE |MACHAR |MAKE_ARRAY |MAP_2POINTS |MAP_CONTINENTS |MAP_GRID |MAP_IMAGE |MAP_PATCH |MAP_PROJ_FORWARD |MAP_PROJ_IMAGE |MAP_PROJ_INFO |MAP_PROJ_INIT |MAP_PROJ_INVERSE |MAP_SET |MATRIX_MULTIPLY |MATRIX_POWER |MAX |MD_TEST |MEAN |MEANABSDEV |MEDIAN |MEMORY |MESH_CLIP |MESH_DECIMATE |MESH_ISSOLID |MESH_MERGE |MESH_NUMTRIANGLES |MESH_OBJ |MESH_SMOOTH |MESH_SURFACEAREA |MESH_VALIDATE |MESH_VOLUME |MESSAGE |MIN |MIN_CURVE_SURF |MK_HTML_HELP |MODIFYCT |MOMENT |MORPH_CLOSE |MORPH_DISTANCE |MORPH_GRADIENT |MORPH_HITORMISS |MORPH_OPEN |MORPH_THIN |MORPH_TOPHAT |MPEG_CLOSE |MPEG_OPEN |MPEG_PUT |MPEG_SAVE |MULTI |N_ELEMENTS |N_PARAMS |N_TAGS |NEWTON |NORM |OBJ_CLASS |OBJ_ISA |OBJ_NEW |OBJ_VALID |OBJARR |OPEN |OPLOTERR |P_CORRELATE |PATH_SEP |PCOMP |PLOT_3DBOX |PLOT_FIELD |PLOTERR |PNT_LINE |POLAR_CONTOUR |POLAR_SURFACE |POLY |POLY_2D |POLY_AREA |POLY_FIT |POLYFILLV |POLYSHADE |POLYWARP |POPD |PRIMES |PRODUCT |PROFILE |PROJECT_VOL |PS_SHOW_FONTS |PSAFM |PSEUDO |PTR_NEW |PTR_VALID |PTRARR |QGRID3 |QROMB |QROMO |QSIMP |QUERY_BMP |QUERY_DICOM |QUERY_GIF |QUERY_IMAGE |QUERY_JPEG |QUERY_JPEG2000 |QUERY_MRSID |QUERY_PICT |QUERY_PNG |QUERY_PPM |QUERY_SRF |QUERY_TIFF |QUERY_WAV |R_CORRELATE |R_TEST |RADON |RANDOMN |RANDOMU |RANKS |RDPIX |READ_ASCII |READ_BINARY |READ_BMP |READ_DICOM |READ_IMAGE |READ_JPEG2000 |READ_MRSID |READ_PNG |READ_SPR |READ_SYLK |READ_TIFF |READ_WAV |READ_XWD |REAL_PART |REBIN |RECALL_COMMANDS |RECON3 |REFORM |REGION_GROW |REGRESS |REPLICATE |RETALL |REVERSE |RK4 |ROBERTS |ROT |ROTATE |ROUND |ROUTINE_INFO |RS_TEST |S_TEST |SAVGOL |SCOPE_LEVEL |SCOPE_VARFETCH |SCOPE_VARNAME |SEARCH2D |SEARCH3D |SFIT |SHIFT |SHMDEBUG |SHMVAR |SIMPLEX |SIN |SINDGEN |SINH |SIZE |SKEWNESS |SMOOTH |SOBEL |SORT |SPH_SCAT |SPHER_HARM |SPL_INIT |SPL_INTERP |SPLINE |SPRSAB |SPRSAX |SPRSIN |SPRSTP |SQRT |STANDARDIZE |STDDEV |STRARR |STRCMP |STRCOMPRESS |STREGEX |STRING |STRJOIN |STRLEN |STRLOWCASE |STRMATCH |STRMESSAGE |STRMID |STRPOS |STRSPLIT |STRTRIM |STRUPCASE |SVDFIT |SVSOL |SWAP_ENDIAN |SYSTIME |T_CVF |T_PDF |TAG_NAMES |TAN |TANH |TEMPORARY |TETRA_CLIP |TETRA_SURFACE |TETRA_VOLUME |THIN |THREED |TIMEGEN |TM_TEST |TOTAL |TRACE |TRANSPOSE |TRI_SURF |TRIANGULATE |TRIGRID |TRIQL |TRISOL |TS_COEF |TS_DIFF |TS_FCAST |TS_SMOOTH |TV |TVRD |UINDGEN |UINT |UINTARR |UL64INDGEN |ULINDGEN |ULON64ARR |ULONARR |ULONG |ULONG64 |UNIQ |UNSHARP_MASK |VALUE_LOCATE |VARIANCE |VERT_T3D |VOIGT |VOXEL_PROJ |WARP_TRI |WATERSHED |WF_DRAW |WHERE |WIDGET_ACTIVEX |WIDGET_BASE |WIDGET_BUTTON |WIDGET_COMBOBOX |WIDGET_DISPLAYCONTEXTMENU |WIDGET_DRAW |WIDGET_DROPLIST |WIDGET_EVENT |WIDGET_INFO |WIDGET_LABEL |WIDGET_LIST |WIDGET_PROPERTYSHEET |WIDGET_SLIDER |WIDGET_TAB |WIDGET_TABLE |WIDGET_TEXT |WIDGET_TREE |WRITE_SYLK |WTN|AXIS|BLAS_AXPY |BLAS_AXPY |BYTEORDER |CALL_PROCEDURE |CATCH |CD |CHOLDC |CLOSE |COLOR_CONVERT |CONSTRAINED_MIN |CONTOUR |COPY_LUN |CPU |CURSOR |DEFINE_KEY |DEFINE_MSGBLK |DEFINE_MSGBLK_FROM_FILE |DEFSYSV |DELVAR |DEVICE |DFPMIN |DLM_LOAD |DLM_REGISTER |DRAW_ROI |EMPTY |ENABLE_SYSRTN |ERASE |EXIT |FILE_CHMOD |FILE_COPY |FILE_DELETE |FILE_MKDIR |FILE_MOVE |FLUSH |FREE_LUN |GRID_INPUT |HEAP_FREE |HEAP_GC |HELP |IMAGE_STATISTICS |INTERVAL_VOLUME |ISOCONTOUR |ISOSURFACE |JOURNAL |LA_CHOLDC |LA_LUDC |LA_SVD |LA_TRIDC |LA_TRIQL |LA_TRIRED |LINKIMAGE |LUDC |MAKE_DLL |OBJ_DESTROY |ONLINE_HELP |ONLINE_HELP_PDF_INDEX |OPLOT |PARTICLE_TRACE |PATH_CACHE |PLOT |PLOTS |POINT_LUN |POLYFILL |POWELL |PRINT|PRINTD|PRINTF |PROFILER |PROFILES |PTR_FREE |PUSHD |QHULL |READ|READ_GIF |READ_INTERFILE |READ_JPEG |READ_PICT |READ_PPM |READ_SRF |READ_WAVE |READ_X11_BITMAP |READF |READS |READU |REDUCE_COLORS |REGISTER_CURSOR |REPLICATE_INPLACE |RESOLVE_ALL |RESOLVE_ROUTINE |RESTORE |SAVE |SCALE3 |SCALE3D |SET_PLOT |SET_SHADING |SETENV |SETUP_KEYS |SHADE_SURF |SHADE_SURF_IRR |SHADE_VOLUME |SHMMAP |SHMUNMAP |SHOW3 |SHOWFONT |SKIP_LUN |SLICER3 |SLIDE_IMAGE |SOCKET |SPAWN |SPH_4PNT |SPLINE_P |STOP |STREAMLINE |STRETCH |STRPUT |STRUCT_ASSIGN |STRUCT_HIDE |SURFACE |SURFR |SVDC |SWAP_ENDIAN_INPLACE |T3D |TEK_COLOR |TIME_TEST2 |TRIRED |TRUNCATE_LUN |TVCRS |TVLCT |TVSCL |USERSYM |VECTOR_FIELD |VEL |VELOVECT |VORONOI |WAIT |WDELETE |WIDGET_CONTROL |WINDOW |WRITE_BMP |WRITE_GIF |WRITE_IMAGE |WRITE_JPEG |WRITE_JPEG2000 |WRITE_NRIF |WRITE_PICT |WRITE_PNG |WRITE_PPM |WRITE_SPR |WRITE_SRF |WRITE_TIFF |WRITE_WAV |WRITE_WAVE |WRITEU |WSET |WSHOW |XBM_EDIT |XDISPLAYFILE |XDXF |XFONT |XINTERANIMATE |XLOADCT |XMANAGER |XMNG_TMPL |XMTOOL |XOBJVIEW |XOBJVIEW_ROTATE |XOBJVIEW_WRITE_IMAGE |XPALETTE |XPCOLOR |XPLOT3D |XREGISTERED |XROI |XSQ_TEST |XSURFACE |XVAREDIT |XVOLUME |XVOLUME_ROTATE |XVOLUME_WRITE_IMAGE|XYOUTS |ZOOM |ZOOM_24|CDF_ATTCREATE|CDF_ATTDELETE|CDF_ATTEXISTS|CDF_ATTGET|CDF_ATTINQ|CDF_ATTNUM|CDF_ATTPUT|CDF_ATTRENAME|CDF_CLOSE|CDF_CONTROL|CDF_CREATE|CDF_DELETE|CDF_DOC|CDF_ENCODE_EPOCH|CDF_EPOCH|CDF_ERROR|CDF_EXISTS|CDF_INQUIRE|CDF_LIB_INFO|CDF_OPEN|CDF_PARSE_EPOCH|CDF_VARCREATE|CDF_VARDELETE|CDF_VARGET|CDF_VARGET1|CDF_VARINQ|CDF_VARNUM|CDF_VARPUT|CDF_VARRENAME|HDF_CLOSE|HDF_DELDD|HDF_DF24_ADDIMAGE|HDF_DF24_GETIMAGE|HDF_DF24_GETINFO|HDF_DF24_LASTREF|HDF_DF24_NIMAGES|HDF_DF24_READREF|HDF_DF24_RESTART|HDF_DFAN_ADDFDS|HDF_DFAN_ADDFID|HDF_DFAN_GETDESC|HDF_DFAN_GETFDS|HDF_DFAN_GETFID|HDF_DFAN_GETLABEL|HDF_DFAN_LABLIST|HDF_DFAN_LASTREF|HDF_DFAN_PUTDESC|HDF_DFAN_PUTLABEL|HDF_DFP_ADDPAL|HDF_DFP_GETPAL|HDF_DFP_LASTREF|HDF_DFP_NPALS|HDF_DFP_PUTPAL|HDF_DFP_READREF|HDF_DFP_RESTART|HDF_DFP_WRITEREF|HDF_DFR8_ADDIMAGE|HDF_DFR8_GETIMAGE|HDF_DFR8_GETINFO|HDF_DFR8_LASTREF|HDF_DFR8_NIMAGES|HDF_DFR8_PUTIMAGE|HDF_DFR8_READREF|HDF_DFR8_RESTART|HDF_DFR8_SETPALETTE|HDF_DFSD_ADDDATA|HDF_DFSD_DIMGET|HDF_DFS
D_DIMSET|HDF_DFSD_ENDSLICE|HDF_DFSD_GETDATA|HDF_DFSD_GETINFO|HDF_DFSD_GETSLICE|HDF_DFSD_PUTSLICE|HDF_DFSD_READREF|HDF_DFSD_SETINFO|HDF_DFSD_STARTSLICE|HDF_DUPDD|HDF_EXISTS|HDF_ISHDF|HDF_LIB_INFO|HDF_NEWREF|HDF_NUMBER|HDF_OPEN|HDF_GR_ATTRINFO|HDF_SD_ATTRFIND|HDF_SD_ATTRINFO|HDF_SD_ATTRSET|HDF_SD_CREATE|HDF_SD_DIMGET|HDF_SD_DIMGETID|HDF_SD_DIMSET|HDF_SD_END|HDF_SD_ENDACCESS|HDF_SD_FILEINFO|HDF_SD_GETDATA|HDF_SD_GETINFO|HDF_SD_IDTOREF|HDF_SD_ISCOORDVAR|HDF_SD_NAMETOINDEX|HDF_SD_REFTOINDEX|HDF_SD_SELECT|HDF_SD_SETEXTFILE|HDF_SD_SETINFO|HDF_SD_START|HDF_VD_ATTACH|HDF_VD_DETACH|HDF_VD_FDEFINE|HDF_VD_FEXIST|HDF_VD_FIND|HDF_VD_GET|HDF_VD_GETID|HDF_VD_GETINFO|HDF_VD_GETNEXT|HDF_VD_INSERT|HDF_VD_ISVD|HDF_VD_ISVG|HDF_VD_LONE|HDF_VD_READ|HDF_VD_SEEK|HDF_VD_SETINFO|HDF_VD_WRITE|HDF_VG_ADDTR|HDF_VG_ATTACH|HDF_VG_DETACH|HDF_VG_GETID|HDF_VG_GETINFO|HDF_VG_GETNEXT|HDF_VG_GETTR|HDF_VG_GETTRS|HDF_VG_INQTR|HDF_VG_INSERT|HDF_VG_ISVD|HDF_VG_ISVG|HDF_VG_LONE|HDF_VG_NUMBER|HDF_VG_SETINFO|NCDF_ATTCOP Y|NCDF_ATTDEL|NCDF_ATTGET|NCDF_ATTINQ|NCDF_ATTNAME|NCDF_ATTPUT|NCDF_ATTRENAME|NCDF_CLOSE|NCDF_CONTROL|NCDF_CREATE|NCDF_DIMDEF|NCDF_DIMID|NCDF_DIMINQ|NCDF_DIMRENAME|NCDF_EXISTS|NCDF_INQUIRE|NCDF_OPEN|NCDF_VARDEF|NCDF_VARGET|NCDF_VARGET1|NCDF_VARID|NCDF_VARINQ|NCDF_VARPUT|NCDF_VARRENAME|ENDELSE|RETURN" comment delim "/*" "*/" multiline nested type = '(?:\$[#]?|@|%)[[:word:]]+' include "symbols.lang" cbracket = "{|}" include "function.lang" include "procedure.lang" variable = '[[:upper:]][[:word:]]*|_' ///////////////////RSIIDL.LANG END//////////////////////////////// On 5/27/2011 1:57 AM, Lorenzo Bettini wrote:
Hi do procedure (and functions) are always called on a line? I mean, is the procedure name always at the beginning of a line (possibly with some spaces before)? Are commas used also in other contexts besides function and procedure invocation? cheers Lorenzo P.S. some examples of programs might be useful to do some tests; have you already a partial language definition for IDL to start from? On 05/24/2011 05:27 PM, Peter Willis wrote:On 5/23/2011 7:10 AM, Lorenzo Bettini wrote:(?=\() checks whether after the name there's a ( but does not consume it can the syntax of your procedure definition be identified with a regular expression? Can you make some examples of procedures? cheers LorenzoHello, In 'IDL' procedures are *called* in the following way: PROCEDURE_NAME , ARGUMENT_1, ARGUMENT_2, ARGUMENT_3, .... , ARGUMENT_N As you can see no brackets or parenthesis are used. The problem here is a regex would need to deal with only the first case of the comma positioned after 'PROCEDURE_NAME' and ignore all other groupings until the end of the statement. There is also on other problem in that statements can use continuation where a '$' indicates the current statement continues on to the next line: PROCEDURE_NAME , ARGUMENT_1, $ ARGUMENT_2, ARGUMENT_3, $ .... , ARGUMENT_N In this case regex needs to distinguish between the case of 'PRODEDURE_NAME' and cases where the statement has been continued. ie: not highlight 'ARGUMENT_2' due to the comma following there. Declarations for *both* functions and procedures are written in similar ways. The difference is only the 'RETURN' value in the case of functions: FUNCTION function_name, arg_1, arg_2 $ arg_3, arg_4, ...., arg_n ....<PROGRAM STATEMENTS>... RETURN, some_value END PRO procedure_name, arg_1, arg_2 arg_3, arg_4, ....,$ arg_n ....<PROGRAM STATEMENTS>... END Best Regards, Peter _______________________________________________ Help-source-highlight mailing list address@hidden https://lists.gnu.org/mailman/listinfo/help-source-highlight
[Prev in Thread] | Current Thread | [Next in Thread] |