Skip to content

Instantly share code, notes, and snippets.

@dmajda
Created November 28, 2013 08:49
Show Gist options
  • Star 2 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save dmajda/7688943 to your computer and use it in GitHub Desktop.
Save dmajda/7688943 to your computer and use it in GitHub Desktop.
Simple PEG.js grammar to parse a markup language with nested elements (like XML)
Content =
(Element / Text)*
Element =
startTag:StartTag content:Content endTag:EndTag {
if (startTag != endTag) {
throw new Error(
"Expected </" + startTag + "> but </" + endTag + "> found."
);
}
return {
name: startTag,
content: content
};
}
StartTag =
"<" name:TagName ">" { return name; }
EndTag =
"</" name:TagName ">" { return name; }
TagName = chars:[a-z]+ { return chars.join(""); }
Text = chars:[^<]+ { return chars.join(""); }
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment