133 lines
7.1 KiB
Lua
Executable File
133 lines
7.1 KiB
Lua
Executable File
-- Copyright 2006-2019 Mitchell mitchell.att.foicica.com. See License.txt.
|
|
-- AutoIt LPeg lexer.
|
|
-- Contributed by Jeff Stone.
|
|
|
|
local lexer = require('lexer')
|
|
local token, word_match = lexer.token, lexer.word_match
|
|
local P, R, S = lpeg.P, lpeg.R, lpeg.S
|
|
|
|
local lex = lexer.new('autoit')
|
|
|
|
-- Whitespace.
|
|
lex:add_rule('whitespace', token(lexer.WHITESPACE, lexer.space^1))
|
|
|
|
-- Keywords.
|
|
lex:add_rule('keyword', token(lexer.KEYWORD, word_match([[
|
|
False True And Or Not ContinueCase ContinueLoop Default Dim Global Local Const
|
|
Do Until Enum Exit ExitLoop For To Step Next In Func Return EndFunc If Then
|
|
ElseIf Else EndIf Null ReDim Select Case EndSelect Static Switch EndSwitch
|
|
Volatile While WEnd With EndWith
|
|
]], true)))
|
|
|
|
-- Functions.
|
|
lex:add_rule('function', token(lexer.FUNCTION, word_match([[
|
|
Abs ACos AdlibRegister AdlibUnRegister Asc AscW ASin Assign ATan
|
|
AutoItSetOption AutoItWinGetTitle AutoItWinSetTitle Beep Binary BinaryLen
|
|
BinaryMid BinaryToString BitAND BitNOT BitOR BitRotate BitShift BitXOR
|
|
BlockInput Break Call CDTray Ceiling Chr ChrW ClipGet ClipPut ConsoleRead
|
|
ConsoleWrite ConsoleWriteError ControlClick ControlCommand ControlDisable
|
|
ControlEnable ControlFocus ControlGetFocus ControlGetHandle ControlGetPos
|
|
ControlGetText ControlHide ControlListView ControlMove ControlSend
|
|
ControlSetText ControlShow ControlTreeView Cos Dec DirCopy DirCreate
|
|
DirGetSize DirMove DirRemove DllCall DllCallAddress DllCallbackFree
|
|
DllCallbackGetPtr DllCallbackRegister DllClose DllOpen DllStructCreate
|
|
DllStructGetData DllStructGetPtr DllStructGetSize DllStructSetData
|
|
DriveGetDrive DriveGetFileSystem DriveGetLabel DriveGetSerial DriveGetType
|
|
DriveMapAdd DriveMapDel DriveMapGet DriveSetLabel DriveSpaceFree
|
|
DriveSpaceTotal DriveStatus EnvGet EnvSet EnvUpdate Eval Execute Exp
|
|
FileChangeDir FileClose FileCopy FileCreateNTFSLink FileCreateShortcut
|
|
FileDelete FileExists FileFindFirstFile FileFindNextFile FileFlush
|
|
FileGetAttrib FileGetEncoding FileGetLongName FileGetPos FileGetShortcut
|
|
FileGetShortName FileGetSize FileGetTime FileGetVersion FileInstall FileMove
|
|
FileOpen FileOpenDialog FileRead FileReadLine FileReadToArray FileRecycle
|
|
FileRecycleEmpty FileSaveDialog FileSelectFolder FileSetAttrib FileSetEnd
|
|
FileSetPos FileSetTime FileWrite FileWriteLine Floor FtpSetProxy FuncName
|
|
GUICreate GUICtrlCreateAvi GUICtrlCreateButton GUICtrlCreateCheckbox
|
|
GUICtrlCreateCombo GUICtrlCreateContextMenu GUICtrlCreateDate
|
|
GUICtrlCreateDummy GUICtrlCreateEdit GUICtrlCreateGraphic GUICtrlCreateGroup
|
|
GUICtrlCreateIcon GUICtrlCreateInput GUICtrlCreateLabel GUICtrlCreateList
|
|
GUICtrlCreateListView GUICtrlCreateListViewItem GUICtrlCreateMenu
|
|
GUICtrlCreateMenuItem GUICtrlCreateMonthCal GUICtrlCreateObj GUICtrlCreatePic
|
|
GUICtrlCreateProgress GUICtrlCreateRadio GUICtrlCreateSlider GUICtrlCreateTab
|
|
GUICtrlCreateTabItem GUICtrlCreateTreeView GUICtrlCreateTreeViewItem
|
|
GUICtrlCreateUpdown GUICtrlDelete GUICtrlGetHandle GUICtrlGetState GUICtrlRead
|
|
GUICtrlRecvMsg GUICtrlRegisterListViewSort GUICtrlSendMsg GUICtrlSendToDummy
|
|
GUICtrlSetBkColor GUICtrlSetColor GUICtrlSetCursor GUICtrlSetData
|
|
GUICtrlSetDefBkColor GUICtrlSetDefColor GUICtrlSetFont GUICtrlSetGraphic
|
|
GUICtrlSetImage GUICtrlSetLimit GUICtrlSetOnEvent GUICtrlSetPos
|
|
GUICtrlSetResizing GUICtrlSetState GUICtrlSetStyle GUICtrlSetTip GUIDelete
|
|
GUIGetCursorInfo GUIGetMsg GUIGetStyle GUIRegisterMsg GUISetAccelerators
|
|
GUISetBkColor GUISetCoord GUISetCursor GUISetFont GUISetHelp GUISetIcon
|
|
GUISetOnEvent GUISetState GUISetStyle GUIStartGroup GUISwitch Hex HotKeySet
|
|
HttpSetProxy HttpSetUserAgent HWnd InetClose InetGet InetGetInfo InetGetSize
|
|
InetRead IniDelete IniRead IniReadSection IniReadSectionNames IniRenameSection
|
|
IniWrite IniWriteSection InputBox Int IsAdmin IsArray IsBinary IsBool
|
|
IsDeclared IsDllStruct IsFloat IsFunc IsHWnd IsInt IsKeyword IsNumber IsObj
|
|
IsPtr IsString Log MemGetStats Mod MouseClick MouseClickDrag MouseDown
|
|
MouseGetCursor MouseGetPos MouseMove MouseUp MouseWheel MsgBox Number
|
|
ObjCreate ObjCreateInterface ObjEvent ObjGet ObjName OnAutoItExitRegister
|
|
OnAutoItExitUnRegister Ping PixelChecksum PixelGetColor PixelSearch
|
|
ProcessClose ProcessExists ProcessGetStats ProcessList ProcessSetPriority
|
|
ProcessWait ProcessWaitClose ProgressOff ProgressOn ProgressSet Ptr Random
|
|
RegDelete RegEnumKey RegEnumVal RegRead RegWrite Round Run RunAs RunAsWait
|
|
RunWait Send SendKeepActive SetError SetExtended ShellExecute ShellExecuteWait
|
|
Shutdown Sin Sleep SoundPlay SoundSetWaveVolume SplashImageOn SplashOff
|
|
SplashTextOn Sqrt SRandom StatusbarGetText StderrRead StdinWrite StdioClose
|
|
StdoutRead String StringAddCR StringCompare StringFormat StringFromASCIIArray
|
|
StringInStr StringIsAlNum StringIsAlpha StringIsASCII StringIsDigit
|
|
StringIsFloat StringIsInt StringIsLower StringIsSpace StringIsUpper
|
|
StringIsXDigit StringLeft StringLen StringLower StringMid StringRegExp
|
|
StringRegExpReplace StringReplace StringReverse StringRight StringSplit
|
|
StringStripCR StringStripWS StringToASCIIArray StringToBinary StringTrimLeft
|
|
StringTrimRight StringUpper Tan TCPAccept TCPCloseSocket TCPConnect
|
|
TCPListen TCPNameToIP TCPRecv TCPSend TCPShutdown TCPStartup TimerDiff
|
|
TimerInit ToolTip TrayCreateItem TrayCreateMenu TrayGetMsg TrayItemDelete
|
|
TrayItemGetHandle TrayItemGetState TrayItemGetText TrayItemSetOnEvent
|
|
TrayItemSetState TrayItemSetText TraySetClick TraySetIcon TraySetOnEvent
|
|
TraySetPauseIcon TraySetState TraySetToolTip TrayTip UBound UDPBind
|
|
UDPCloseSocket UDPOpen UDPRecv UDPSend UDPShutdown UDPStartup VarGetType
|
|
WinActivate WinActive WinClose WinExists WinFlash WinGetCaretPos
|
|
WinGetClassList WinGetClientSize WinGetHandle WinGetPos WinGetProcess
|
|
WinGetState WinGetText WinGetTitle WinKill WinList WinMenuSelectItem
|
|
WinMinimizeAll WinMinimizeAllUndo WinMove WinSetOnTop WinSetState WinSetTitle
|
|
WinSetTrans WinWait WinWaitActive WinWaitClose WinWaitNotActive
|
|
]], true)))
|
|
|
|
-- Identifiers.
|
|
lex:add_rule('identifier', token(lexer.IDENTIFIER, lexer.word))
|
|
|
|
-- Comments.
|
|
local line_comment = ';' * lexer.nonnewline_esc^0
|
|
local block_comment1 = '#comments-start' * (lexer.any - '#comments-end')^0 *
|
|
P('#comments-end')^-1
|
|
local block_comment2 = '#cs' * (lexer.any - '#ce')^0 * P('#ce')^-1
|
|
lex:add_rule('comment', token(lexer.COMMENT, line_comment + block_comment1 +
|
|
block_comment2))
|
|
|
|
-- Preprocessor.
|
|
lex:add_rule('preprocessor', token(lexer.PREPROCESSOR, '#' * word_match([[
|
|
include-once include pragma forceref RequireAdmin NoTrayIcon
|
|
OnAutoItStartRegister
|
|
]], true)))
|
|
|
|
-- Strings.
|
|
local dq_str = lexer.delimited_range('"', true, true)
|
|
local sq_str = lexer.delimited_range("'", true, true)
|
|
local inc = lexer.delimited_range('<>', true, true, true)
|
|
lex:add_rule('string', token(lexer.STRING, dq_str + sq_str + inc))
|
|
|
|
-- Macros.
|
|
lex:add_rule('macro', token('macro', '@' * (lexer.alnum + '_')^1))
|
|
lex:add_style('macro', lexer.STYLE_PREPROCESSOR)
|
|
|
|
-- Variables.
|
|
lex:add_rule('variable', token(lexer.VARIABLE, '$' * (lexer.alnum + '_')^1))
|
|
|
|
-- Numbers.
|
|
lex:add_rule('number', token(lexer.NUMBER, lexer.float + lexer.integer))
|
|
|
|
-- Operators.
|
|
lex:add_rule('operator', token(lexer.OPERATOR, S('+-^*/&<>=?:()[]')))
|
|
|
|
return lex
|