// Copyright (c) 2007-2010 by Kavanagh Consultancy Limited. All rights reserved. PatternLanguage : // Syntax Rules ruleSet := identifier ':' { syntaxRule }+ [ identifier "::" { lexicalRule }+ ] syntaxRule := identifier ":=" pattern lexicalRule := identifier ( ":=" | "::=" ) pattern pattern := logicalOrPattern logicalOrPattern := sequentialPattern { '|' sequentialPattern }* sequentialPattern := { logicalAndPattern }+ logicalAndPattern := logicalAndLengthEqualsPattern { "&&" logicalAndLengthEqualsPattern }* logicalAndLengthEqualsPattern := simplePattern { "&&==" simplePattern }* simplePattern := useRulePattern | characterPattern | stringPattern | '(' pattern ')' | conditionalPattern | repeatingPattern | logicalNotPattern | errorMessagePattern useRulePattern := identifier ( '.' identifier | ! ":=" ! "::" ! "::=" ) characterPattern := characterLiteral [ ".." characterLiteral ] stringPattern := stringLiteral conditionalPattern := '[' pattern ']' repeatingPattern := '{' pattern ( "}*" | "}+" ) logicalNotPattern := '!' simplePattern errorMessagePattern := ">>" stringLiteral PatternLanguage :: // Lexical Rules input := { $javaWhitespace | $javaComment | token }* token := identifier | characterLiteral | stringLiteral | separatorOrOperator identifier ::= $javaIdentifier characterLiteral ::= $javaCharacterLiteral | $javaIntegerLiteral stringLiteral ::= $javaStringLiteral separatorOrOperator ::= "&&==" | "::=" | "&&" | ".." | "::" | ":=" | ">>" | "}*" | "}+" | '!' | '(' | ')' | '.' | ':' | '[' | ']' | '{' | '|' // End of File