help-source-highlight
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Help-source-highlight] Regular Expression Explanation for 'function


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 "\\" multiline

keyword = "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
Lorenzo


Hello,

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






reply via email to

[Prev in Thread] Current Thread [Next in Thread]