Font size:
Example context sensitive dotted grammar
// A dotted grammar for AnBnCn
terminals
a b
grammar AnBnCn
{
terminals
c
nonterminals
S B C SyntaxError
exception SyntaxError
start S
type int
principles
.S : .a S;
a.S : a. a S B C
| a. B C
;
a.B : a .b;
b.B : b .b;
B C.B : .B B C;
C .C B : C B C. ;
B C.C : .B C C ;
b.C B : b B C.;
c.C : c .c;
b.C : b .c;
.SyntaxError : . {% cout << "Syntax error" << endl; %};
{%
public:
AnBnCn(int s) : cpg_tape(s) {}
void Parse(int i)
{
EnterTraceMode();
TraceAll();
Run(i);
}
%}
}
source
{%
void AnBnCn::GetToken(CPG_Symbol<int> &s)
{
char c;
cin >> c;
s.attr = 0;
if (c == 'a' || c == 'A')
s.id = AnBnCn::a;
else if (c == 'b' || c == 'B')
s.id = AnBnCn::b;
else if (c == 'c' || c == 'C')
s.id = AnBnCn::c;
else
s.id = 0;
}
%}

