All pastes #423506 Raw Edit

Someone

public text v1 · immutable
·published 2007-04-04 06:48 UTC
rendered paste body
-----------------Grammar---------------------------
%tokens%

allChars 		     = <<[\s\S]>>
startTextBlock		     = "<!"
endTextBlock	  	     = "!>"
startCodeBlock               = "<%"
endCodeBlock		     = "%>"
interpolationBlock = <<\$\{.*?\}>>
stringLiteral = <<\".*?\">>

%productions%
Template = (TextBlock|CodeBlock)+;
TextBlock = startTextBlock TextBlockText endTextBlock;
CodeBlock = startCodeBlock CodeBlockText endCodeBlock;

TextBlockText = (allChars|interpolationBlock|startCodeBlock|endCodeBlock|stringLiteral)+;
CodeBlockText = (allChars|stringLiteral|startTextBlock|endTextBlock)+;

-----------Input---------------
<!FDSFSDFS fds " { } ;
Hello, this is a; boo template
This is "some" ${more} template stuff
and ${more("<%%>"}
!><% for item in MomSucks{
print "${item}";
%><!
This is item ${item}
!><%
}
%>
--------------------------------



Parse tree from O:\SVN\DunnChurchill.Templates.Compiler\testscript.txt:
Template(2001)
  TextBlock(2002)
    startTextBlock(1002): "<!", line: 1, col: 1
    TextBlockText(2004)
      allChars(1001): "F", line: 1, col: 3
      allChars(1001): "D", line: 1, col: 4
      allChars(1001): "S", line: 1, col: 5
      allChars(1001): "F", line: 1, col: 6
      allChars(1001): "S", line: 1, col: 7
      allChars(1001): "D", line: 1, col: 8
      allChars(1001): "F", line: 1, col: 9
      allChars(1001): "S", line: 1, col: 10
      allChars(1001): " ", line: 1, col: 11
      allChars(1001): "f", line: 1, col: 12
      allChars(1001): "d", line: 1, col: 13
      allChars(1001): "s", line: 1, col: 14
      allChars(1001): " ", line: 1, col: 15
      allChars(1001): """, line: 1, col: 16
      allChars(1001): " ", line: 1, col: 17
      allChars(1001): "{", line: 1, col: 18
      allChars(1001): " ", line: 1, col: 19
      allChars(1001): "}", line: 1, col: 20
      allChars(1001): " ", line: 1, col: 21
      allChars(1001): ";", line: 1, col: 22
      allChars(1001): "
", line: 1, col: 23
      allChars(1001): "(...)", line: 1, col: 24
      allChars(1001): "H", line: 2, col: 1
      allChars(1001): "e", line: 2, col: 2
      allChars(1001): "l", line: 2, col: 3
      allChars(1001): "l", line: 2, col: 4
      allChars(1001): "o", line: 2, col: 5
      allChars(1001): ",", line: 2, col: 6
      allChars(1001): " ", line: 2, col: 7
      allChars(1001): "t", line: 2, col: 8
      allChars(1001): "h", line: 2, col: 9
      allChars(1001): "i", line: 2, col: 10
      allChars(1001): "s", line: 2, col: 11
      allChars(1001): " ", line: 2, col: 12
      allChars(1001): "i", line: 2, col: 13
      allChars(1001): "s", line: 2, col: 14
      allChars(1001): " ", line: 2, col: 15
      allChars(1001): "a", line: 2, col: 16
      allChars(1001): ";", line: 2, col: 17
      allChars(1001): " ", line: 2, col: 18
      allChars(1001): "b", line: 2, col: 19
      allChars(1001): "o", line: 2, col: 20
      allChars(1001): "o", line: 2, col: 21
      allChars(1001): " ", line: 2, col: 22
      allChars(1001): "t", line: 2, col: 23
      allChars(1001): "e", line: 2, col: 24
      allChars(1001): "m", line: 2, col: 25
      allChars(1001): "p", line: 2, col: 26
      allChars(1001): "l", line: 2, col: 27
      allChars(1001): "a", line: 2, col: 28
      allChars(1001): "t", line: 2, col: 29
      allChars(1001): "e", line: 2, col: 30
      allChars(1001): "
", line: 2, col: 31
      allChars(1001): "(...)", line: 2, col: 32
      allChars(1001): "T", line: 3, col: 1
      allChars(1001): "h", line: 3, col: 2
      allChars(1001): "i", line: 3, col: 3
      allChars(1001): "s", line: 3, col: 4
      allChars(1001): " ", line: 3, col: 5
      allChars(1001): "i", line: 3, col: 6
      allChars(1001): "s", line: 3, col: 7
      allChars(1001): " ", line: 3, col: 8
      stringLiteral(1007): ""some"", line: 3, col: 9
      allChars(1001): " ", line: 3, col: 15
      interpolationBlock(1006): "${more}", line: 3, col: 16
      allChars(1001): " ", line: 3, col: 23
      allChars(1001): "t", line: 3, col: 24
      allChars(1001): "e", line: 3, col: 25
      allChars(1001): "m", line: 3, col: 26
      allChars(1001): "p", line: 3, col: 27
      allChars(1001): "l", line: 3, col: 28
      allChars(1001): "a", line: 3, col: 29
      allChars(1001): "t", line: 3, col: 30
      allChars(1001): "e", line: 3, col: 31
      allChars(1001): " ", line: 3, col: 32
      allChars(1001): "s", line: 3, col: 33
      allChars(1001): "t", line: 3, col: 34
      allChars(1001): "u", line: 3, col: 35
      allChars(1001): "f", line: 3, col: 36
      allChars(1001): "f", line: 3, col: 37
      allChars(1001): "
", line: 3, col: 38
      allChars(1001): "(...)", line: 3, col: 39
      allChars(1001): "a", line: 4, col: 1
      allChars(1001): "n", line: 4, col: 2
      allChars(1001): "d", line: 4, col: 3
      allChars(1001): " ", line: 4, col: 4
      interpolationBlock(1006): "${more("<%%>"}", line: 4, col: 5
      allChars(1001): "
", line: 4, col: 19
      allChars(1001): "(...)", line: 4, col: 20
    endTextBlock(1003): "!>", line: 5, col: 1
  CodeBlock(2003)
    startCodeBlock(1004): "<%", line: 5, col: 3
    CodeBlockText(2005)
      allChars(1001): " ", line: 5, col: 5
      allChars(1001): "f", line: 5, col: 6
      allChars(1001): "o", line: 5, col: 7
      allChars(1001): "r", line: 5, col: 8
      allChars(1001): " ", line: 5, col: 9
      allChars(1001): "i", line: 5, col: 10
      allChars(1001): "t", line: 5, col: 11
      allChars(1001): "e", line: 5, col: 12
      allChars(1001): "m", line: 5, col: 13
      allChars(1001): " ", line: 5, col: 14
      allChars(1001): "i", line: 5, col: 15
      allChars(1001): "n", line: 5, col: 16
      allChars(1001): " ", line: 5, col: 17
      allChars(1001): "M", line: 5, col: 18
      allChars(1001): "o", line: 5, col: 19
      allChars(1001): "m", line: 5, col: 20
      allChars(1001): "S", line: 5, col: 21
      allChars(1001): "u", line: 5, col: 22
      allChars(1001): "c", line: 5, col: 23
      allChars(1001): "k", line: 5, col: 24
      allChars(1001): "s", line: 5, col: 25
      allChars(1001): "{", line: 5, col: 26
      allChars(1001): "
", line: 5, col: 27
      allChars(1001): "(...)", line: 5, col: 28
      allChars(1001): "p", line: 6, col: 1
      allChars(1001): "r", line: 6, col: 2
      allChars(1001): "i", line: 6, col: 3
      allChars(1001): "n", line: 6, col: 4
      allChars(1001): "t", line: 6, col: 5
      allChars(1001): " ", line: 6, col: 6
      stringLiteral(1007): ""${item}"", line: 6, col: 7
      allChars(1001): ";", line: 6, col: 16
      allChars(1001): "
", line: 6, col: 17
      allChars(1001): "(...)", line: 6, col: 18
    endCodeBlock(1005): "%>", line: 7, col: 1
  TextBlock(2002)
    startTextBlock(1002): "<!", line: 7, col: 3
    TextBlockText(2004)
      allChars(1001): "
", line: 7, col: 5
      allChars(1001): "(...)", line: 7, col: 6
      allChars(1001): "T", line: 8, col: 1
      allChars(1001): "h", line: 8, col: 2
      allChars(1001): "i", line: 8, col: 3
      allChars(1001): "s", line: 8, col: 4
      allChars(1001): " ", line: 8, col: 5
      allChars(1001): "i", line: 8, col: 6
      allChars(1001): "s", line: 8, col: 7
      allChars(1001): " ", line: 8, col: 8
      allChars(1001): "i", line: 8, col: 9
      allChars(1001): "t", line: 8, col: 10
      allChars(1001): "e", line: 8, col: 11
      allChars(1001): "m", line: 8, col: 12
      allChars(1001): " ", line: 8, col: 13
      interpolationBlock(1006): "${item}", line: 8, col: 14
      allChars(1001): "
", line: 8, col: 21
      allChars(1001): "(...)", line: 8, col: 22
    endTextBlock(1003): "!>", line: 9, col: 1
  CodeBlock(2003)
    startCodeBlock(1004): "<%", line: 9, col: 3
    CodeBlockText(2005)
      allChars(1001): "
", line: 9, col: 5
      allChars(1001): "(...)", line: 9, col: 6
      allChars(1001): "}", line: 10, col: 1
      allChars(1001): "
", line: 10, col: 2
      allChars(1001): "(...)", line: 10, col: 3
    endCodeBlock(1005): "%>", line: 11, col: 1