W3C home > Mailing lists > Public > www-archive@w3.org > May 2003

NonXmlSyntax.jj

From: Dan Connolly <connolly@w3.org>
Date: 06 May 2003 14:44:57 -0500
To: "Eric Prud'hommeaux" <eric@w3.org>
Cc: www-archive@w3.org
Message-Id: <1052250297.11680.256.camel@dirk.dm93.org>
NonXmlSyntax.jj


-- 
Dan Connolly, W3C http://www.w3.org/People/Connolly/

options {
  STATIC = false;
  UNICODE_INPUT = true;
}

PARSER_BEGIN(NonXmlSyntax)

package com.thaiopensource.relaxng.nonxml;

import java.util.Hashtable;
import java.util.Enumeration;

public class NonXmlSyntax {
  static public final String xmlUri = "http://www.w3.org/XML/1998/namespace";
  static private final String INHERIT = "#inherit";
  private String defaultNamespace = INHERIT;
  private boolean haveInherit = false;
  private Hashtable namespaceTable = new Hashtable();
  private String datatypeLibrary = null;
  private Hashtable datatypesTable = new Hashtable();
  public static String unquote(String s) {
    char quoteChar = s.charAt(0);
    s = s.substring(1, s.length() - 1);
    for (int i = 0; (i = s.indexOf(quoteChar, i)) >= 0; i++)
      s = s.substring(0, i) + s.substring(i + 1);
    return s;
  }
  private void addNamespaceDecls(Element e) {
    if (defaultNamespace != INHERIT && !haveInherit)
      e.addAttribute("ns", defaultNamespace);
    if (datatypeLibrary != null && datatypeLibrary.length() != 0)
      e.addAttribute("datatypeLibrary", datatypeLibrary);
    e.addAttribute("xmlns", "http://relaxng.org/ns/structure/0.9");
    for (Enumeration prefixes = namespaceTable.keys(); prefixes.hasMoreElements();) {
      String prefix = (String)prefixes.nextElement();
      String ns = (String)namespaceTable.get(prefix);
      if (ns != INHERIT && ns.length() != 0 && !prefix.equals("xml")) {
        e.addAttribute("xmlns:" + prefix, ns);
      }
    }
  }
}

PARSER_END(NonXmlSyntax)

Element Input() throws SyntaxException :
{
  Element e;
}
{

  (<BYTE_ORDER_MARK>)?
  // If it starts with a non-reserved word it must be a grammar,
  // because there would be no way to define an identifier
  Preamble() (LOOKAHEAD(1) e = TopLevelGrammar() | e = Expr()) <EOF>
  {
    addNamespaceDecls(e);
    return e;
  }
}

Element TopLevelGrammar() throws SyntaxException :
{
  Element e = new Element("grammar");
  Element d;
}
{
  (d = GrammarComponent() { e.addChild(d); })+
  { return e; }
}

void Preamble() :
{}
{
  (NamespaceDecl() | DatatypesDecl())*
  { namespaceTable.put("xml", xmlUri); }
}


void NamespaceDecl() :
{
  String prefix = null;
  boolean isDefault = false;
  String namespaceName;
}
{
  (("namespace" prefix = UnprefixedName())
    | ("default" { isDefault = true; }
      "namespace" (prefix = UnprefixedName())?))
  "="
  namespaceName = NamespaceName()
  {
    if (isDefault)
      defaultNamespace = namespaceName;
    if (prefix != null)
      namespaceTable.put(prefix, namespaceName);
  }
}

String NamespaceName() :
{
  String r;
}
{
  (r = Literal() | "inherit" { r = INHERIT; })
  { return r; }
}

void DatatypesDecl() :
{
  String prefix;
  String uri;
}
{
  "datatypes" prefix = UnprefixedName() "=" uri = Literal()
  {
    datatypesTable.put(prefix, uri);
  }
}

Element PrimaryExpr() throws SyntaxException :
{
  Element e;
}
{
  (e = ElementExpr()
  | e = AttributeExpr()
  | e = GrammarExpr()
  | e = ExternalRefExpr()
  | e = ListExpr()
  | e = MixedExpr()
  | e = ParenExpr()
  | e = IdentifierExpr()
  | e = ParentExpr()
  | e = DataExpr()
  | e = ValueExpr()
  | e = TextExpr()
  | e = EmptyExpr()
  | e = NotAllowedExpr())
  { return e; }
}

Element EmptyExpr() :
{}
{
  "empty"
  { return new Element("empty"); }
}

Element TextExpr() :
{}
{
  "text"
  { return new Element("text"); }
}

Element NotAllowedExpr() :
{}
{
  "notAllowed"
  { return new Element("notAllowed"); }
}

Element Expr() throws SyntaxException :
{
  Element firstChild;
  Element otherChild;
  Element r = null;
}
{
  (firstChild = UnaryExpr()
  (("|" otherChild = UnaryExpr()
    {
      if (r == null)
        r = new Element("choice", firstChild);
      r.addChild(otherChild);
    })+
   | ("&" otherChild = UnaryExpr()
    {
      if (r == null)
        r = new Element("interleave", firstChild);
      r.addChild(otherChild);
    })+
   | ("," otherChild = UnaryExpr()
     {
      if (r == null)
        r = new Element("group", firstChild);
      r.addChild(otherChild);
    })+)?)
  { return r == null ? firstChild : r; }
}

Element UnaryExpr() throws SyntaxException :
{
  Element e;
  String name;
}
{
  (e = PrimaryExpr() (
  ("+" { name = "oneOrMore"; }
  | "?" { name = "optional"; }
  | "*" { name = "zeroOrMore"; }) { 
    Element tem = new Element(name);
    tem.addChild(e);
    e = tem;
  })?)
  { return e; }
}

Element ElementExpr() throws SyntaxException :
{
  Element nc;
  Element content;
}
{
  "element" nc = NameClass(false) "{" content = Expr() "}"
  {
    Element r = new Element("element");
    r.addChild(nc);
    r.addChild(content);
    return r;
  }
}

Element AttributeExpr() throws SyntaxException :
{
  Element nc;
  Element content;
}
{
  "attribute" nc = NameClass(true) "{" content = Expr() "}"
  {
    Element r = new Element("attribute");
    r.addChild(nc);
    r.addChild(content);
    return r;
  }
}

Element NameClass(boolean inAttribute) throws SyntaxException :
{
  Element r;
  Element e = null;
}
{
  r = PrimaryNameClass(inAttribute)
  ("|" { if (e == null) r = new Element("choice", r); } 
    e = PrimaryNameClass(inAttribute) { r.addChild(e); })*
  { return r; }
}

Element PrimaryNameClass(boolean inAttribute) throws SyntaxException :
{
  Element e;
}
{
  (e = UnprefixedNameClass(inAttribute)
  | e = PrefixedNameClass() 
  | e = AnyNameClass(inAttribute)
  | e = NsNameClass(inAttribute)
  | e = ParenNameClass(inAttribute))
  { return e; }
}

Element UnprefixedNameClass(boolean inAttribute) :
{
  String s;
}
{
  s = UnprefixedName()
  {
    Element e = new Element("name");
    e.addChild(s);
    String ns = null;
    if (inAttribute)
      ns = "";
    else if (defaultNamespace == INHERIT)
      haveInherit = true;
    else
      ns = defaultNamespace;
    if (ns != null)
      e.addAttribute("ns", ns); 
    return e;
  }
}

Element PrefixedNameClass() throws SyntaxException :
{
  Token t;
}
{
  t = <PREFIXED_NAME>
  {
    Element e = new Element("name");
    String qn = t.image;
    int colon = qn.indexOf(':');
    String prefix = qn.substring(0, colon);
    String ns = (String)namespaceTable.get(prefix);
    if (ns == null)
      throw new UndeclaredPrefixException(prefix, t);
    if (ns == INHERIT) {
      haveInherit = true;
      qn = qn.substring(colon + 1);
    }
    else if (ns.length() == 0) {
      qn = qn.substring(colon + 1);
      e.addAttribute("ns", "");
    }
    e.addChild(qn);
    return e;
  }
}

Element NsNameClass(boolean inAttribute) throws SyntaxException :
{
  Token t;
  Element e = null;
}
{
  t = <PREFIX_STAR> (e = ExceptNameClass(inAttribute))?
  {
    if (e == null)
      e = new Element("nsName");
    else
      e = new Element("nsName", e);
    String qn = t.image;
    String prefix = qn.substring(0, qn.length() - 2);
    String ns = (String)namespaceTable.get(prefix);
    if (ns == null)
      throw new UndeclaredPrefixException(prefix, t);
    else if (ns == INHERIT)
      haveInherit = true;
    else
      e.addAttribute("ns", ns);
    return e;
  }
}

Element AnyNameClass(boolean inAttribute) throws SyntaxException :
{
  Element e = null;
}
{
  "*" (e = ExceptNameClass(inAttribute))?
  {
    if (e == null)
      return new Element("anyName");
    else
      return new Element("anyName", e);
  }
}

Element ParenNameClass(boolean inAttribute) throws SyntaxException :
{
  Element e;
}
{
  "(" e = NameClass(inAttribute) ")"
  { return e; }
}

Element ExceptNameClass(boolean inAttribute) throws SyntaxException :
{
  Element e;
}
{
  "-" e = PrimaryNameClass(inAttribute)
  {
    return new Element("except", e);
  }
}

Element ListExpr() throws SyntaxException :
{
  Element r = new Element("list");
  Element e;
}
{
  "list" "{" e = Expr() { r.addChild(e); } "}"
  { return r; }
}

Element MixedExpr() throws SyntaxException :
{
  Element e;
}
{
  "mixed" "{" e = Expr() "}"
  {
    return new Element("mixed", e);
  }
}

Element GrammarExpr() throws SyntaxException :
{
  Element e = new Element("grammar");
  Element d;
}
{
  "grammar"   "{" (d = GrammarComponent() { e.addChild(d); } )+ "}"
  { return e; }
}

Element ParenExpr() throws SyntaxException :
{
  Element e;
}
{
  "(" e = Expr() ")"
  { 
    return e;
  }
}

Element GrammarComponent() throws SyntaxException :
{
  Element e;
}
{

  (e = Definition() | e = Include())
  {
    return e;
  }
}

Element Definition() throws SyntaxException :
{
  Element def;
  String s;
  Element e;
}
{
  ("start" { def = new Element("start"); }
  | s = Identifier() {
    def = new Element("define"); def.addAttribute("name", s);
  } )
  AssignOp(def)
  e = Expr()
  {
    def.addChild(e);
    return def;
  }
}

void AssignOp(Element define) :
{}
{
  "="
  | "|="
  {
    define.addAttribute("combine", "choice");
  }
  | "&="
  {
    define.addAttribute("combine", "interleave");
  }
}

Element Include() throws SyntaxException :
{
  Element e = new Element("include");
  Element d;
  String s;
  String inherit = null;
}
{
  "include" s = Literal() { e.addAttribute("href", s); }
  ("inherit" inherit = Prefix())?
  ("{" (d = Definition() { e.addChild(d); })* "}")?
  {
    if (inherit == null)
      inherit = defaultNamespace;
    if (inherit == INHERIT)
      haveInherit = true;
    else if (inherit != null)
      e.addAttribute("ns", inherit);
    return e;
  }
}

Element ExternalRefExpr() throws SyntaxException :
{
  String s;
  String inherit = null;
}
{
  "externalRef" s = Literal() 
  ("inherit" inherit = Prefix())?
  {
    Element e = new Element("externalRef");
    e.addAttribute("href", s);
    if (inherit != null)
      inherit = defaultNamespace;
    if (inherit == INHERIT)
      haveInherit = true;
    else if (inherit != null)
      e.addAttribute("ns", inherit);
    return e;
  }
}

Element ParentExpr() :
{
  String s;
}
{
  "parent" s = Identifier()
  {
    Element e = new Element("parentRef");
    e.addAttribute("name", s);
    return e;
  }
}

Element IdentifierExpr() :
{
  String s;
}
{
  s = Identifier()
  {
    Element e = new Element("ref");
    e.addAttribute("name", s);
    return e;
  }
}

Element ValueExpr() :
{
  String s;
}
{
  s = Literal()
  {
    Element e = new Element("value");
    e.addChild(s);
    return e;
  }
}

Element DataExpr() throws SyntaxException :
{
  Token datatypeToken;
  String s = null;
  Element r = null;
  Element e = null;
  String d = null;
}
{
  datatypeToken = DatatypeName()
  ((r = Params() (e = Except())?)
   | e = Except()
   | s = Literal())?
  {
    String datatype = datatypeToken.image;
    String datatypeUri = null;
    int colon = datatype.indexOf(':');
    if (colon < 0)
      datatypeUri = null;
    else {
      String prefix = datatype.substring(0, colon);
      datatypeUri = (String)datatypesTable.get(prefix);
      if (datatypeUri == null)
        throw new UndeclaredPrefixException(prefix, datatypeToken);
      datatype = datatype.substring(colon + 1);
    }
    if (s != null) {
      r = new Element("value");
      r.addChild(s);
      if (datatypeUri != null && datatypeUri.length() != 0) {
        if (defaultNamespace == INHERIT)
          haveInherit = true;
        else
          r.addAttribute("ns", defaultNamespace);
      }
    }
    else if (r == null)
      r = new Element("data");
    if (datatype != null)
      r.addAttribute("type", datatype);
    if (datatypeUri != null) {
      if (datatypeLibrary == null)
        datatypeLibrary = datatypeUri;
      else if (!datatypeUri.equals(datatypeLibrary))
        r.addAttribute("datatypeLibrary", datatypeUri);
    }
    if (e != null)
      r.addChild(e);
    return r;
  }
}

Token DatatypeName() :
{
  Token t;
}
{
  (t = "string" | t = "token" | t = <PREFIXED_NAME>)
  { return t; }
}

String Identifier() :
{
  String s;
  Token t;
}
{
  (t = <IDENTIFIER> { s = t.image; }
  | t = <ESCAPED_IDENTIFIER> { s = t.image.substring(1); })
  { return s; }
}

String Prefix() throws SyntaxException :
{
  Token t;
  String prefix;
}
{
  (t = <IDENTIFIER> { prefix = t.image; }
  | t = <ESCAPED_IDENTIFIER> { prefix = t.image.substring(1); }
  | t = Keyword() { prefix = t.image; })
  {
    String ns = (String)namespaceTable.get(prefix);
    if (ns == null)
      throw new UndeclaredPrefixException(prefix, t);
    return ns;
  }
}

String UnprefixedName() :
{
  String s;
  Token t;
}
{
  (s = Identifier()
   | t = Keyword() { s = t.image; })
  { return s; }
}

Element Params() :
{
  Element r = new Element("data");
}
{
  "{" (Param(r))* "}"
  {
    return r;
  }
}

void Param(Element container) :
{
  String name;
  String value;
}
{
  name = UnprefixedName() "=" value = Literal()
  {
    Element tem = new Element("param");
    tem.addAttribute("name", name);
    tem.addChild(value); 
    container.addChild(tem);
  }
}

Element Except() throws SyntaxException :
{
  Element e; 
}
{
  "-" e = PrimaryExpr()
  {
    return new Element("except", e);
  }
}

String Literal() :
{
  Token t;
}
{
  t = <LITERAL>
  {
    return unquote(t.image);
  }
}

Token Keyword() :
{
  Token t;
}
{
  (t = "element"
  | t = "attribute"
  | t = "namespace"
  | t = "list"
  | t = "mixed"
  | t = "grammar"
  | t = "empty"
  | t = "text"
  | t = "parent"
  | t = "externalRef"
  | t = "notAllowed"
  | t = "start"
  | t = "include"
  | t = "default"
  | t = "inherit"
  | t = "string"
  | t = "token"
  | t = "datatypes")
  { return t; }
}


SKIP: { " " | "\r" | "\n" | "\t" }

SPECIAL_TOKEN:
{
  < SINGLE_LINE_COMMENT: "#" (~["\n","\r"])* >
}

TOKEN :
{
  < #BASE_CHAR : [
    "\u0041" - "\u005a",
    "\u0061" - "\u007a",
    "\u00c0" - "\u00d6",
    "\u00d8" - "\u00f6",
    "\u00f8" - "\u00ff",
    "\u0100" - "\u0131",
    "\u0134" - "\u013e",
    "\u0141" - "\u0148",
    "\u014a" - "\u017e",
    "\u0180" - "\u01c3",
    "\u01cd" - "\u01f0",
    "\u01f4" - "\u01f5",
    "\u01fa" - "\u0217",
    "\u0250" - "\u02a8",
    "\u02bb" - "\u02c1",
    "\u0386",
    "\u0388" - "\u038a",
    "\u038c",
    "\u038e" - "\u03a1",
    "\u03a3" - "\u03ce",
    "\u03d0" - "\u03d6",
    "\u03da",
    "\u03dc",
    "\u03de",
    "\u03e0",
    "\u03e2" - "\u03f3",
    "\u0401" - "\u040c",
    "\u040e" - "\u044f",
    "\u0451" - "\u045c",
    "\u045e" - "\u0481",
    "\u0490" - "\u04c4",
    "\u04c7" - "\u04c8",
    "\u04cb" - "\u04cc",
    "\u04d0" - "\u04eb",
    "\u04ee" - "\u04f5",
    "\u04f8" - "\u04f9",
    "\u0531" - "\u0556",
    "\u0559",
    "\u0561" - "\u0586",
    "\u05d0" - "\u05ea",
    "\u05f0" - "\u05f2",
    "\u0621" - "\u063a",
    "\u0641" - "\u064a",
    "\u0671" - "\u06b7",
    "\u06ba" - "\u06be",
    "\u06c0" - "\u06ce",
    "\u06d0" - "\u06d3",
    "\u06d5",
    "\u06e5" - "\u06e6",
    "\u0905" - "\u0939",
    "\u093d",
    "\u0958" - "\u0961",
    "\u0985" - "\u098c",
    "\u098f" - "\u0990",
    "\u0993" - "\u09a8",
    "\u09aa" - "\u09b0",
    "\u09b2",
    "\u09b6" - "\u09b9",
    "\u09dc" - "\u09dd",
    "\u09df" - "\u09e1",
    "\u09f0" - "\u09f1",
    "\u0a05" - "\u0a0a",
    "\u0a0f" - "\u0a10",
    "\u0a13" - "\u0a28",
    "\u0a2a" - "\u0a30",
    "\u0a32" - "\u0a33",
    "\u0a35" - "\u0a36",
    "\u0a38" - "\u0a39",
    "\u0a59" - "\u0a5c",
    "\u0a5e",
    "\u0a72" - "\u0a74",
    "\u0a85" - "\u0a8b",
    "\u0a8d",
    "\u0a8f" - "\u0a91",
    "\u0a93" - "\u0aa8",
    "\u0aaa" - "\u0ab0",
    "\u0ab2" - "\u0ab3",
    "\u0ab5" - "\u0ab9",
    "\u0abd",
    "\u0ae0",
    "\u0b05" - "\u0b0c",
    "\u0b0f" - "\u0b10",
    "\u0b13" - "\u0b28",
    "\u0b2a" - "\u0b30",
    "\u0b32" - "\u0b33",
    "\u0b36" - "\u0b39",
    "\u0b3d",
    "\u0b5c" - "\u0b5d",
    "\u0b5f" - "\u0b61",
    "\u0b85" - "\u0b8a",
    "\u0b8e" - "\u0b90",
    "\u0b92" - "\u0b95",
    "\u0b99" - "\u0b9a",
    "\u0b9c",
    "\u0b9e" - "\u0b9f",
    "\u0ba3" - "\u0ba4",
    "\u0ba8" - "\u0baa",
    "\u0bae" - "\u0bb5",
    "\u0bb7" - "\u0bb9",
    "\u0c05" - "\u0c0c",
    "\u0c0e" - "\u0c10",
    "\u0c12" - "\u0c28",
    "\u0c2a" - "\u0c33",
    "\u0c35" - "\u0c39",
    "\u0c60" - "\u0c61",
    "\u0c85" - "\u0c8c",
    "\u0c8e" - "\u0c90",
    "\u0c92" - "\u0ca8",
    "\u0caa" - "\u0cb3",
    "\u0cb5" - "\u0cb9",
    "\u0cde",
    "\u0ce0" - "\u0ce1",
    "\u0d05" - "\u0d0c",
    "\u0d0e" - "\u0d10",
    "\u0d12" - "\u0d28",
    "\u0d2a" - "\u0d39",
    "\u0d60" - "\u0d61",
    "\u0e01" - "\u0e2e",
    "\u0e30",
    "\u0e32" - "\u0e33",
    "\u0e40" - "\u0e45",
    "\u0e81" - "\u0e82",
    "\u0e84",
    "\u0e87" - "\u0e88",
    "\u0e8a",
    "\u0e8d",
    "\u0e94" - "\u0e97",
    "\u0e99" - "\u0e9f",
    "\u0ea1" - "\u0ea3",
    "\u0ea5",
    "\u0ea7",
    "\u0eaa" - "\u0eab",
    "\u0ead" - "\u0eae",
    "\u0eb0",
    "\u0eb2" - "\u0eb3",
    "\u0ebd",
    "\u0ec0" - "\u0ec4",
    "\u0f40" - "\u0f47",
    "\u0f49" - "\u0f69",
    "\u10a0" - "\u10c5",
    "\u10d0" - "\u10f6",
    "\u1100",
    "\u1102" - "\u1103",
    "\u1105" - "\u1107",
    "\u1109",
    "\u110b" - "\u110c",
    "\u110e" - "\u1112",
    "\u113c",
    "\u113e",
    "\u1140",
    "\u114c",
    "\u114e",
    "\u1150",
    "\u1154" - "\u1155",
    "\u1159",
    "\u115f" - "\u1161",
    "\u1163",
    "\u1165",
    "\u1167",
    "\u1169",
    "\u116d" - "\u116e",
    "\u1172" - "\u1173",
    "\u1175",
    "\u119e",
    "\u11a8",
    "\u11ab",
    "\u11ae" - "\u11af",
    "\u11b7" - "\u11b8",
    "\u11ba",
    "\u11bc" - "\u11c2",
    "\u11eb",
    "\u11f0",
    "\u11f9",
    "\u1e00" - "\u1e9b",
    "\u1ea0" - "\u1ef9",
    "\u1f00" - "\u1f15",
    "\u1f18" - "\u1f1d",
    "\u1f20" - "\u1f45",
    "\u1f48" - "\u1f4d",
    "\u1f50" - "\u1f57",
    "\u1f59",
    "\u1f5b",
    "\u1f5d",
    "\u1f5f" - "\u1f7d",
    "\u1f80" - "\u1fb4",
    "\u1fb6" - "\u1fbc",
    "\u1fbe",
    "\u1fc2" - "\u1fc4",
    "\u1fc6" - "\u1fcc",
    "\u1fd0" - "\u1fd3",
    "\u1fd6" - "\u1fdb",
    "\u1fe0" - "\u1fec",
    "\u1ff2" - "\u1ff4",
    "\u1ff6" - "\u1ffc",
    "\u2126",
    "\u212a" - "\u212b",
    "\u212e",
    "\u2180" - "\u2182",
    "\u3041" - "\u3094",
    "\u30a1" - "\u30fa",
    "\u3105" - "\u312c",
    "\uac00" - "\ud7a3"
    ] >
  | < #IDEOGRAPHIC : [
    "\u4e00" - "\u9fa5",
    "\u3007",
    "\u3021" - "\u3029"
    ] >
  | < #LETTER : (<BASE_CHAR> | <IDEOGRAPHIC>) >
  | < #COMBINING_CHAR : [
    "\u0300" - "\u0345",
    "\u0360" - "\u0361",
    "\u0483" - "\u0486",
    "\u0591" - "\u05a1",
    "\u05a3" - "\u05b9",
    "\u05bb" - "\u05bd",
    "\u05bf",
    "\u05c1" - "\u05c2",
    "\u05c4",
    "\u064b" - "\u0652",
    "\u0670",
    "\u06d6" - "\u06dc",
    "\u06dd" - "\u06df",
    "\u06e0" - "\u06e4",
    "\u06e7" - "\u06e8",
    "\u06ea" - "\u06ed",
    "\u0901" - "\u0903",
    "\u093c",
    "\u093e" - "\u094c",
    "\u094d",
    "\u0951" - "\u0954",
    "\u0962" - "\u0963",
    "\u0981" - "\u0983",
    "\u09bc",
    "\u09be",
    "\u09bf",
    "\u09c0" - "\u09c4",
    "\u09c7" - "\u09c8",
    "\u09cb" - "\u09cd",
    "\u09d7",
    "\u09e2" - "\u09e3",
    "\u0a02",
    "\u0a3c",
    "\u0a3e",
    "\u0a3f",
    "\u0a40" - "\u0a42",
    "\u0a47" - "\u0a48",
    "\u0a4b" - "\u0a4d",
    "\u0a70" - "\u0a71",
    "\u0a81" - "\u0a83",
    "\u0abc",
    "\u0abe" - "\u0ac5",
    "\u0ac7" - "\u0ac9",
    "\u0acb" - "\u0acd",
    "\u0b01" - "\u0b03",
    "\u0b3c",
    "\u0b3e" - "\u0b43",
    "\u0b47" - "\u0b48",
    "\u0b4b" - "\u0b4d",
    "\u0b56" - "\u0b57",
    "\u0b82" - "\u0b83",
    "\u0bbe" - "\u0bc2",
    "\u0bc6" - "\u0bc8",
    "\u0bca" - "\u0bcd",
    "\u0bd7",
    "\u0c01" - "\u0c03",
    "\u0c3e" - "\u0c44",
    "\u0c46" - "\u0c48",
    "\u0c4a" - "\u0c4d",
    "\u0c55" - "\u0c56",
    "\u0c82" - "\u0c83",
    "\u0cbe" - "\u0cc4",
    "\u0cc6" - "\u0cc8",
    "\u0cca" - "\u0ccd",
    "\u0cd5" - "\u0cd6",
    "\u0d02" - "\u0d03",
    "\u0d3e" - "\u0d43",
    "\u0d46" - "\u0d48",
    "\u0d4a" - "\u0d4d",
    "\u0d57",
    "\u0e31",
    "\u0e34" - "\u0e3a",
    "\u0e47" - "\u0e4e",
    "\u0eb1",
    "\u0eb4" - "\u0eb9",
    "\u0ebb" - "\u0ebc",
    "\u0ec8" - "\u0ecd",
    "\u0f18" - "\u0f19",
    "\u0f35",
    "\u0f37",
    "\u0f39",
    "\u0f3e",
    "\u0f3f",
    "\u0f71" - "\u0f84",
    "\u0f86" - "\u0f8b",
    "\u0f90" - "\u0f95",
    "\u0f97",
    "\u0f99" - "\u0fad",
    "\u0fb1" - "\u0fb7",
    "\u0fb9",
    "\u20d0" - "\u20dc",
    "\u20e1",
    "\u302a" - "\u302f",
    "\u3099",
    "\u309a"
    ] >
  | < #DIGIT : [
    "\u0030" - "\u0039",
    "\u0660" - "\u0669",
    "\u06f0" - "\u06f9",
    "\u0966" - "\u096f",
    "\u09e6" - "\u09ef",
    "\u0a66" - "\u0a6f",
    "\u0ae6" - "\u0aef",
    "\u0b66" - "\u0b6f",
    "\u0be7" - "\u0bef",
    "\u0c66" - "\u0c6f",
    "\u0ce6" - "\u0cef",
    "\u0d66" - "\u0d6f",
    "\u0e50" - "\u0e59",
    "\u0ed0" - "\u0ed9",
    "\u0f20" - "\u0f29"
    ] >
  | < #EXTENDER : [
    "\u00b7",
    "\u02d0",
    "\u02d1",
    "\u0387",
    "\u0640",
    "\u0e46",
    "\u0ec6",
    "\u3005",
    "\u3031" - "\u3035",
    "\u309d" - "\u309e",
    "\u30fc" - "\u30fe"
    ] >
  | < #NMSTART : (<LETTER> | "_") >
  | < #NMCHAR : (<LETTER> | <COMBINING_CHAR> | <EXTENDER> | <DIGIT> | "." | "-" | "_") >
  | < #NCNAME: <NMSTART> (<NMCHAR>)* >
  | < #HIGH_SURROGATE: [ "\ud800" - "\udbff" ]>
  | < #LOW_SURROGATE: [ "\udc00" - "\udfff" ]>
  | < #SURROGATE_PAIR: <HIGH_SURROGATE> <LOW_SURROGATE> >
  | < #CHAR_NOT_QUOT:  ["\t", "\n", "\r", "\u0020" - "\u0021",
                        "\u0023" - "\ud7ff", "\ue000" - "\ufffd"]
                       | <SURROGATE_PAIR> >
  | < #CHAR_NOT_APOS:  ["\t", "\n", "\r", "\u0020" - "\u0026",
                        "\u0028" - "\ud7ff", "\ue000" - "\ufffd"]
                       | <SURROGATE_PAIR> >
}

TOKEN :
{
  < IDENTIFIER: <NCNAME> >
  | < ESCAPED_IDENTIFIER: "\\" <NCNAME> >
  | < PREFIX_STAR: <NCNAME> ":*" >
  | < PREFIXED_NAME: <NCNAME> ":" <NCNAME> >
  | < LITERAL : ( "\"" (<CHAR_NOT_QUOT> | "\"\"")* "\"")
                | ("'" (<CHAR_NOT_APOS> | "''")* "'") >
  | < BYTE_ORDER_MARK : "\ufeff" >
  /* This avoids lexical errors from JavaCC. */
  | < ILLEGAL_CHAR : [ "\u0000" - "\u0008", "\u000b", "\u000c",
                       "\u000e" - "\uffff" ] >
}
Received on Tuesday, 6 May 2003 15:47:10 GMT

This archive was generated by hypermail 2.2.0+W3C-0.50 : Wednesday, 7 November 2012 14:17:30 GMT