49 lines
1.3 KiB
Lua
49 lines
1.3 KiB
Lua
|
local m = require 'lpeglabel'
|
||
|
|
||
|
local Sp = m.S' \t\v\f'
|
||
|
local Nl = m.P'\r\n' + m.S'\r\n'
|
||
|
local Number = m.R'09'^1
|
||
|
local Word = m.R('AZ', 'az', '__', '\x80\xff') * m.R('AZ', 'az', '09', '__', '\x80\xff')^0
|
||
|
local Symbol = m.P'=='
|
||
|
+ m.P'~='
|
||
|
+ m.P'--'
|
||
|
-- non-standard:
|
||
|
+ m.P'<<='
|
||
|
+ m.P'>>='
|
||
|
+ m.P'//='
|
||
|
-- end non-standard
|
||
|
+ m.P'<<'
|
||
|
+ m.P'>>'
|
||
|
+ m.P'<='
|
||
|
+ m.P'>='
|
||
|
+ m.P'//'
|
||
|
+ m.P'...'
|
||
|
+ m.P'..'
|
||
|
+ m.P'::'
|
||
|
-- non-standard:
|
||
|
+ m.P'!='
|
||
|
+ m.P'&&'
|
||
|
+ m.P'||'
|
||
|
+ m.P'/*'
|
||
|
+ m.P'*/'
|
||
|
+ m.P'+='
|
||
|
+ m.P'-='
|
||
|
+ m.P'*='
|
||
|
+ m.P'%='
|
||
|
+ m.P'&='
|
||
|
+ m.P'|='
|
||
|
+ m.P'^='
|
||
|
+ m.P'/='
|
||
|
-- end non-standard
|
||
|
-- singles
|
||
|
+ m.S'+-*/!#%^&()={}[]|\\\'":;<>,.?~`'
|
||
|
local Unknown = (1 - Number - Word - Symbol - Sp - Nl)^1
|
||
|
local Token = m.Cp() * m.C(Nl + Number + Word + Symbol + Unknown)
|
||
|
|
||
|
local Parser = m.Ct((Sp^1 + Token)^0)
|
||
|
|
||
|
return function (lua)
|
||
|
local results = Parser:match(lua)
|
||
|
return results
|
||
|
end
|