bairui

VimL - expressions (PEG)

Oct 29th, 2011
154
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
VIM 1.80 KB | None | 0 0
  1. ; VimL (Vim Script) Parser
  2. ; Barry Arthur, 29 Oct 2011
  3.  
  4. .skip_white = true
  5. .namespace = 'viml_parser'
  6. .parser_name = 'viml#parser'
  7. .root_element = 'viml'
  8.  
  9. <expr1>           ::=  <expr2> '?' <expr1> ':' <expr1>
  10. <expr2>           ::=  <expr3> '||' <expr3>
  11. <expr3>           ::=  <expr4> '&&' <expr4>
  12. <expr4>           ::=  (<expr5> <eqop> <expr5>) / (<expr5> <isop> <expr5>)
  13. <expr5>           ::=  <expr5> <addop> <expr6>
  14. <expr6>           ::=  <expr7> <mulop> <expr7>
  15. <expr7>           ::=  <unop> <expr8>
  16. <expr8>           ::=  (<expr9> '[' (<exprange> / <expr1>) ']') / (<expr9> '.' <ident>) / (<expr9> '(' <exprlist> ')' / <expr7>
  17. <expr9>           ::=  <number> / <string> / <list> / <dict> / <optval> / <nestedexpr> / <envvar> / <regval> / <funccall> / <bracedfunccall> / <ident> / <bracedident>
  18.  
  19. <eqop>            ::=  ('==' / '!=' / '>=' / '>' / '<=' / '<' / '=~' / '!~') ('?' / '#')?
  20. <isop>            ::=  'is' 'not'?
  21. <addop>           ::=  '+' / '-' / '.'
  22. <mulop>           ::=  '*' / '/' / '%'
  23. <unop>            ::=  '!' / '-' / '+'
  24. <exprange>        ::=  <expr1> ':' <expr1>
  25.  
  26. <number>          ::=  '[-+]\?\d*\.\?\d\+\%([eE][-+]\?\d\+\)\?'
  27. <sqstr>           ::=  "'" "'"! '.'* "'"
  28. <dqstr>           ::=  '"' '"'! '.'* '"'
  29. <string>          ::=  <sqstr> / <dqstr>
  30. <list>            ::=  '[' <exprlist> ']'
  31. <exprlist>        ::=  (<expr1> (',' <expr1>)*)?
  32. <dict>            ::=  '{' (<dictpair> (',' <dictpair>)*)? '}'
  33. <dictpair>        ::=  <expr1> ':' <expr1>
  34.  
  35. <optval>          ::=  '&' <ident>
  36.  
  37. <nestedexpr>      ::=  '(' <expr1> ')'
  38.  
  39. <ident>           ::=  '\h\w*'
  40. <bracedident>     ::=  '\h\w*{\w*}\w*'
  41. <envvar>          ::=  '$[A-Z]\+'
  42. <regval>          ::=  '@[a-z0-9_/.+*"'']'
  43.  
  44. <funccall>        ::=  <ident> '(' <exprlist> ')'
  45. <bracedfunccall>  ::=  <bracedident> '(' <exprlist> ')'
  46.  
  47.  
Advertisement
Add Comment
Please, Sign In to add comment