Select Git revision
VOParser.scc
Code owners
Assign users and groups as approvers for specific file changes. Learn more.
VOParser.scc 2.62 KiB
Package de.prob.voparser;
/*******************************************************************
* Helpers *
*******************************************************************/
Helpers
small_letter = ['a'..'z'];
capital_letter = ['A' .. 'Z'];
letter = small_letter | capital_letter;
digit = ['0' .. '9'];
underscore = '_';
line_break = [10 + 13];
layout_char = [[[[0 .. 32] - line_break] + [127..160]] + [[8206 .. 8207] + [8232 .. 8233]]];
white_space = line_break | layout_char+;
l_paren = '(';
r_paren = ')';
opt_white_space = layout_char*; // note: no newline (so as not to disturb counting); no comments
dot = '.';
comma = ',';
identifier_literal = (letter | underscore) (letter | underscore | digit | dot | comma)*;
/*******************************************************************
* Tokens *
*******************************************************************/
Tokens
l_par = l_paren;
r_par = r_paren;
/* Boolean Operators */
and = '&' | 0x2227 | 'and';
or = 'or' | 0x2228 | '||';
/* Sequential Operator*/
sequential = ';';
identifier_literal = identifier_literal;
white_space = white_space;
/*******************************************************************
* Ignored Tokens *
*******************************************************************/
Ignored Tokens
white_space;
/*******************************************************************
* Productions *
*******************************************************************/
Productions
vo_formula {-> vo} =
{and} [left]:vo_formula and [right]:vo_formula1 {-> New vo.and(left.vo, right.vo)} |
{or} [left]:vo_formula or [right]:vo_formula1 {-> New vo.or(left.vo, right.vo)} |
vo_formula1 {-> vo_formula1.vo};
vo_formula1 {-> vo} =
{sequential} [left]:vo_formula1 sequential [right]:vo_formula2 {-> New vo.sequential(left.vo, right.vo)} |
vo_formula2 {-> vo_formula2.vo};
vo_formula2 {-> vo} =
{identifier} identifier_literal {-> New vo.identifier(identifier_literal)} |
{par} l_par vo_formula r_par {-> vo_formula.vo};
/*******************************************************************
* Abstract Syntax Tree *
*******************************************************************/
Abstract Syntax Tree
vo =
{and} [left]:vo [right]:vo |
{or} [left]:vo [right]:vo |
{sequential} [left]:vo [right]:vo |
{identifier} identifier_literal;