From c7493cf58c439bb3b9d2cf2cd989d3dc6f7ebb39 Mon Sep 17 00:00:00 2001 From: Vincent Sanders Date: Fri, 7 Sep 2012 18:04:03 +0100 Subject: alter InterfaceMembers to be left recusrsive Document accurately the changes from the w3c grammar --- src/webidl-parser.y | 12 +++++++++--- test/data/bindings/blankidl.bnd | 1 + test/data/bindings/emptyidl.bnd | 1 + test/data/idl/blank.idl | 4 ++++ test/data/idl/empty.idl | 0 5 files changed, 15 insertions(+), 3 deletions(-) create mode 100644 test/data/bindings/blankidl.bnd create mode 100644 test/data/bindings/emptyidl.bnd create mode 100644 test/data/idl/blank.idl create mode 100644 test/data/idl/empty.idl diff --git a/src/webidl-parser.y b/src/webidl-parser.y index 7425a21..db10ab7 100644 --- a/src/webidl-parser.y +++ b/src/webidl-parser.y @@ -114,7 +114,13 @@ int webidl_wrap() %% - /* [1] start with definitions */ + /* [1] altered from original grammar to be left recusive, avoid reduce/reduce + * conficts and have an error term. + * + * By omitting the empty term from here reduce/reduce conficts are removed as + * both ExtendedAttributeList and Definition (by way of Exception) can end + * up with an empty term anyhow. + */ Definitions: ExtendedAttributeList Definition | @@ -183,14 +189,14 @@ PartialInterface: TOK_INTERFACE TOK_IDENTIFIER '{' InterfaceMembers '}' ';' ; - /* [9] */ + /* [9] slightly altered from original grammar to be left recursive */ InterfaceMembers: /* empty */ { $$ = NULL; } | - ExtendedAttributeList InterfaceMember InterfaceMembers + InterfaceMembers ExtendedAttributeList InterfaceMember { $$ = NULL; } diff --git a/test/data/bindings/blankidl.bnd b/test/data/bindings/blankidl.bnd new file mode 100644 index 0000000..dfd7a4a --- /dev/null +++ b/test/data/bindings/blankidl.bnd @@ -0,0 +1 @@ +webidlfile "blank.idl"; diff --git a/test/data/bindings/emptyidl.bnd b/test/data/bindings/emptyidl.bnd new file mode 100644 index 0000000..e746325 --- /dev/null +++ b/test/data/bindings/emptyidl.bnd @@ -0,0 +1 @@ +webidlfile "empty.idl"; diff --git a/test/data/idl/blank.idl b/test/data/idl/blank.idl new file mode 100644 index 0000000..4661728 --- /dev/null +++ b/test/data/idl/blank.idl @@ -0,0 +1,4 @@ + + + + diff --git a/test/data/idl/empty.idl b/test/data/idl/empty.idl new file mode 100644 index 0000000..e69de29 -- cgit v1.2.3