LightningIsMyName

BNF Using Scala Parser Combinators

Apr 21st, 2011
287
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Scala 2.23 KB | None | 0 0
  1. def pNumericConst = regex(new Regex("[0-9]+"))
  2. def pStringConst = regex(new Regex("\"([^\"]|(\\\"))*\""))
  3. def pColorConst = regex(new Regex("0x[A-Fa-f0-9]{6}"))
  4. def pId = regex(new Regex("[A-Za-z][A-Za-z0-9]*"))
  5. def pBooleanConst = regex(new Regex("(true)|(false)"))
  6. def pTextStyleConst = regex(new Regex("(bold)|(italic)|(regular)"))
  7. def pHAlignConst = regex(new Regex("(top)|(middle)|(bottom)"))
  8. def pVAlignConst = regex(new Regex("(left)|(center)|(right)"))
  9.  
  10. def pNumericExpr = pNumericConst;
  11. def pStringExpr =  pStringConst;
  12. def pColorExpr = pColorConst;
  13. def pBooleanExpr = pBooleanConst;
  14. def pTextStyleExpr = pTextStyleConst
  15. def pHAlignExpr = pHAlignConst
  16. def pVAlignExpr = pVAlignConst
  17.  
  18. def Program      = WidgetSpec *
  19. def WidgetSpec   = pId ~ "<-" ~ Widget
  20.  
  21. def Widget       = (AtomicWidget
  22.                     | (AtomicWidget ~   "|"   ~ AtomicWidget)
  23.                     | (AtomicWidget ~  "---"  ~ AtomicWidget)
  24.                     | (AtomicWidget ~  "*|*"  ~ RangeSpec)
  25.                     | (AtomicWidget ~ "*---*" ~ RangeSpec)
  26.                     | ("(" ~ AtomicWidget ~ ")"))
  27.  
  28. def RangeSpec = pId ~ "=" ~ pNumericExpr ~ ":" ~ pNumericExpr
  29. def AtomicWidget = (("(" ~ WidgetDef ~ ")")
  30.                     | ("(" ~ WidgetDef ~ ")" ~ "[" ~ (WidgetProp *)  ~ "]"))
  31.  
  32. def WidgetName = ("label" | "textbox" | "button" | "checkbox" | "radio" |
  33.                     "image" | "combobox" | "slider")
  34.  
  35. def WidgetDef    = (WidgetName
  36.                     | (WidgetName ~ ":" ~ WidgetDim ~ "x" ~ WidgetDim))
  37.  
  38. def WidgetDim    = (("(" ~ pNumericExpr ~ ")") | "?" | pNumericExpr)
  39.  
  40. def WidgetProp = (("text" ~ "=" ~ pStringExpr)
  41.                  | ("image" ~ "=" ~ pStringExpr)
  42.                  | ("checked" ~ "=" ~ pBooleanExpr)
  43.                  | ("value" ~ "=" ~ pNumericExpr)
  44.                  | ("enabled" ~ "=" ~ pBooleanExpr)
  45.                  | ("fgcolor" ~ "=" ~ pColorConst)
  46.                  | ("bgcolor" ~ "=" ~ pColorConst)
  47.                  | ("font" ~ "=" ~ "(" ~ pStringExpr ~ "," ~ pNumericExpr ~ "," ~ pTextStyleExpr ~ ")")
  48.                  | ("halign" ~ "=" ~ pHAlignExpr)
  49.                  | ("valign" ~ "=" ~ pVAlignExpr)
  50.                  | ("minval" ~ "=" ~ pNumericExpr)
  51.                  | ("maxval" ~ "=" ~ pNumericExpr))
Advertisement
Add Comment
Please, Sign In to add comment