rendered paste bodyGrammar
%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