All pastes #546436 Raw Edit

Stuff

public text v1 · immutable
·published 2007-06-07 01:55 UTC
rendered paste body
Grammar
%header%

GRAMMARTYPE = "LL"

DESCRIPTION = "A grammar for a simple search text"

AUTHOR      = "Matthew Dunn"
VERSION     = "1.0"
DATE        = "10 June 2003"

LICENSE     = ""

COPYRIGHT   = "Copyright (c) 2007 SA Govt"


%tokens%
 
SPACE			     = " "
DOUBLEQUOTE		     = '"'
LETTER		             = <<[A-z0-9]>>
BOOLAND			     = 'AND'
BOOLOR			     = 'OR'
BOOLNOT			     = 'NOT'


%productions%
CRAP = (WORD|PHRASE|SPACE|BOOLOPERATOR)+;
WORD = LETTER+;
PHRASE = DOUBLEQUOTE (SPACE|LETTER)+ DOUBLEQUOTE;
BOOLOPERATOR = BOOLAND|BOOLOR|BOOLNOT;


Example:
this NOT is "a search" test OR and some "More test" of this stuff


Result:

Parse tree from testdata.txt:
CRAP(2001)
  WORD(2002)
    LETTER(1003): "t", line: 1, col: 1
    LETTER(1003): "h", line: 1, col: 2
    LETTER(1003): "i", line: 1, col: 3
    LETTER(1003): "s", line: 1, col: 4
  SPACE(1001): " ", line: 1, col: 5
  BOOLOPERATOR(2004)
    BOOLNOT(1006): "NOT", line: 1, col: 6
  SPACE(1001): " ", line: 1, col: 9
  WORD(2002)
    LETTER(1003): "i", line: 1, col: 10
    LETTER(1003): "s", line: 1, col: 11
  SPACE(1001): " ", line: 1, col: 12
  PHRASE(2003)
    DOUBLEQUOTE(1002): """, line: 1, col: 13
    LETTER(1003): "a", line: 1, col: 14
    SPACE(1001): " ", line: 1, col: 15
    LETTER(1003): "s", line: 1, col: 16
    LETTER(1003): "e", line: 1, col: 17
    LETTER(1003): "a", line: 1, col: 18
    LETTER(1003): "r", line: 1, col: 19
    LETTER(1003): "c", line: 1, col: 20
    LETTER(1003): "h", line: 1, col: 21
    DOUBLEQUOTE(1002): """, line: 1, col: 22
  SPACE(1001): " ", line: 1, col: 23
  WORD(2002)
    LETTER(1003): "t", line: 1, col: 24
    LETTER(1003): "e", line: 1, col: 25
    LETTER(1003): "s", line: 1, col: 26
    LETTER(1003): "t", line: 1, col: 27
  SPACE(1001): " ", line: 1, col: 28
  BOOLOPERATOR(2004)
    BOOLOR(1005): "OR", line: 1, col: 29
  SPACE(1001): " ", line: 1, col: 31
  WORD(2002)
    LETTER(1003): "a", line: 1, col: 32
    LETTER(1003): "n", line: 1, col: 33
    LETTER(1003): "d", line: 1, col: 34
  SPACE(1001): " ", line: 1, col: 35
  WORD(2002)
    LETTER(1003): "s", line: 1, col: 36
    LETTER(1003): "o", line: 1, col: 37
    LETTER(1003): "m", line: 1, col: 38
    LETTER(1003): "e", line: 1, col: 39
  SPACE(1001): " ", line: 1, col: 40
  PHRASE(2003)
    DOUBLEQUOTE(1002): """, line: 1, col: 41
    LETTER(1003): "M", line: 1, col: 42
    LETTER(1003): "o", line: 1, col: 43
    LETTER(1003): "r", line: 1, col: 44
    LETTER(1003): "e", line: 1, col: 45
    SPACE(1001): " ", line: 1, col: 46
    LETTER(1003): "t", line: 1, col: 47
    LETTER(1003): "e", line: 1, col: 48
    LETTER(1003): "s", line: 1, col: 49
    LETTER(1003): "t", line: 1, col: 50
    DOUBLEQUOTE(1002): """, line: 1, col: 51
  SPACE(1001): " ", line: 1, col: 52
  WORD(2002)
    LETTER(1003): "o", line: 1, col: 53
    LETTER(1003): "f", line: 1, col: 54
  SPACE(1001): " ", line: 1, col: 55
  WORD(2002)
    LETTER(1003): "t", line: 1, col: 56
    LETTER(1003): "h", line: 1, col: 57
    LETTER(1003): "i", line: 1, col: 58
    LETTER(1003): "s", line: 1, col: 59
  SPACE(1001): " ", line: 1, col: 60
  WORD(2002)
    LETTER(1003): "s", line: 1, col: 61
    LETTER(1003): "t", line: 1, col: 62
    LETTER(1003): "u", line: 1, col: 63
    LETTER(1003): "f", line: 1, col: 64
    LETTER(1003): "f", line: 1, col: 65