Skip to content

Instantly share code, notes, and snippets.

@wqweto
Created October 31, 2018 11:04
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save wqweto/44082b902efb7c45a6d990e467d72e1f to your computer and use it in GitHub Desktop.
Save wqweto/44082b902efb7c45a6d990e467d72e1f to your computer and use it in GitHub Desktop.
PEG.js proof of concept for zig
/*
SuffixExpr
= AsyncPrefix SuffixExpr FnCallArgumnets
/ PrimaryExpr SuffixOp*
*/
SuffixExpr
= AsyncPrefix (PrimaryExpr SuffixOpBeforeLParen?) FnCallArgumnets
/ (PrimaryExpr SuffixOp*)
SuffixOpBeforeLParen
= SuffixOp &"(" !SuffixOpBeforeLParen
/ SuffixOp SuffixOpBeforeLParen
AsyncPrefix = "async" _
FnCallArgumnets = "(" _ a:ListOfNumbers? ")" _ { return { Args: a } }
PrimaryExpr = i:IDENT { return { Ident: i } }
SuffixOp = "." _ e:PrimaryExpr { return { Dot: e } }
/ FnCallArgumnets
ListOfNumbers = head:NUMBER tail:("," _ n:NUMBER { return n })* { return [head].concat(tail) }
IDENT = i:$[a-zA-Z]+ _ { return i }
NUMBER = n:$[0-9]+ _ { return n }
_ = ([ \t\r\n]+ { return null })?
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment