001 // Copyright 2011 Waterken Inc. under the terms of the MIT X license found at 002 // http://www.opensource.org/licenses/mit-license.html 003 package org.waterken.syntax; 004 005 import org.joe_e.Powerless; 006 import org.ref_send.deserializer; 007 import org.ref_send.name; 008 009 /** 010 * Signals parsed data did not contain an expected token at a required position. 011 */ 012 public class WrongToken extends RuntimeException implements Powerless { 013 static private final long serialVersionUID = 1L; 014 015 /** 016 * expected token 017 */ 018 public final String expected; 019 020 /** 021 * Constructs an instance. 022 * @param expected {@link #expected} 023 */ 024 public @deserializer 025 WrongToken(@name("expected") final String expected) { 026 super(expected); 027 this.expected = expected; 028 } 029 030 /** 031 * Requires a token to have an expected value. 032 * @param expected expected token 033 * @param actual actual token 034 * @throws WrongToken {@code actual} is not {@code expected} 035 */ 036 static public void 037 require(final String expected, final String actual) throws WrongToken { 038 if (!expected.equals(actual)) { throw new WrongToken(expected); } 039 } 040 }