From dc672aedbafa7bf24cd24430abcae2d57528cf41 Mon Sep 17 00:00:00 2001 From: Vincent Sanders Date: Tue, 4 Sep 2012 16:36:01 +0100 Subject: Initial version of netsurf webidl javascript binding geenrator tool --- src/webidl-parser.y | 762 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 762 insertions(+) create mode 100644 src/webidl-parser.y (limited to 'src/webidl-parser.y') diff --git a/src/webidl-parser.y b/src/webidl-parser.y new file mode 100644 index 0000000..d5859ff --- /dev/null +++ b/src/webidl-parser.y @@ -0,0 +1,762 @@ +/* + * This is a bison parser for web IDL derived from the the grammar in + * apendix A of W3C WEB IDL - http://www.w3.org/TR/WebIDL/ + * + */ + +%{ + +#include +#include + +#include "webidl-ast.h" + +#include "webidl-parser.h" +#include "webidl-lexer.h" + + + +void webidl_error(const char *str) +{ + fprintf(stderr,"error: %s\n",str); +} + +int webidl_wrap() +{ + return 1; +} + + + +%} + +%output "webidl-parser.c" +%defines "webidl-parser.h" + +%locations +%define api.pure +%name-prefix "webidl_" + +%union +{ + int attr; + char* text; + long value; + struct ifmember_s **ifmember; +} + + +%token TOK_ANY +%token TOK_ATTRIBUTE +%token TOK_BOOLEAN +%token TOK_BYTE +%token TOK_CALLBACK +%token TOK_LEGACYCALLER +%token TOK_CONST +%token TOK_CREATOR +%token TOK_DATE +%token TOK_DELETER +%token TOK_DICTIONARY +%token TOK_DOUBLE +%token TOK_ELLIPSIS +%token TOK_ENUM +%token TOK_EOL +%token TOK_EXCEPTION +%token TOK_FALSE +%token TOK_FLOAT +%token TOK_GETRAISES +%token TOK_GETTER +%token TOK_IMPLEMENTS +%token TOK_IN +%token TOK_INFINITY +%token TOK_INHERIT +%token TOK_INTERFACE +%token TOK_LONG +%token TOK_MODULE +%token TOK_NAN +%token TOK_NATIVE +%token TOK_NULL_LITERAL +%token TOK_OBJECT +%token TOK_OCTET +%token TOK_OMITTABLE +%token TOK_OPTIONAL +%token TOK_OR +%token TOK_PARTIAL +%token TOK_RAISES +%token TOK_READONLY +%token TOK_SETRAISES +%token TOK_SETTER +%token TOK_SEQUENCE +%token TOK_SHORT +%token TOK_STATIC +%token TOK_STRING +%token TOK_STRINGIFIER +%token TOK_TRUE +%token TOK_TYPEDEF +%token TOK_UNRESTRICTED +%token TOK_UNSIGNED +%token TOK_VOID + +%token TOK_POUND_SIGN + +%token TOK_IDENTIFIER +%token TOK_INT_LITERAL +%token TOK_FLOAT_LITERAL +%token TOK_STRING_LITERAL +%token TOK_OTHER_LITERAL +%token TOK_JAVADOC + +%type Inheritance +%type InterfaceMembers + +%% + + /* [1] start with definitions */ +Definitions: + /* empty */ + | + ExtendedAttributeList Definition Definitions + ; + + /* [2] */ +Definition: + CallbackOrInterface + | + Partial + | + Dictionary + | + Exception + | + Enum + | + Typedef + | + ImplementsStatement + ; + + /* [3] */ +CallbackOrInterface: + TOK_CALLBACK CallbackRestOrInterface + | + Interface + ; + + /* [4] */ +CallbackRestOrInterface: + CallbackRest + | + Interface + ; + + /* [5] */ +Interface: + TOK_INTERFACE TOK_IDENTIFIER Inheritance '{' InterfaceMembers '}' ';' + { + } + ; + + /* [6] */ +Partial: + TOK_PARTIAL PartialDefinition + ; + + /* [7] */ +PartialDefinition: + PartialInterface + | + PartialDictionary + ; + + /* [8] */ +PartialInterface: + TOK_INTERFACE TOK_IDENTIFIER '{' InterfaceMembers '}' ';' + ; + + /* [9] */ +InterfaceMembers: + /* empty */ + { + $$ = NULL; + } + | + ExtendedAttributeList InterfaceMember InterfaceMembers + { + $$ = NULL; + } + ; + + /* [10] */ +InterfaceMember: + Const + | + AttributeOrOperation + ; + + /* [11] */ +Dictionary: + TOK_DICTIONARY TOK_IDENTIFIER Inheritance '{' DictionaryMembers '}' ';' + ; + + /* [12] */ +DictionaryMembers: + /* empty */ + | + ExtendedAttributeList DictionaryMember DictionaryMembers + ; + + /* [13] */ +DictionaryMember: + Type TOK_IDENTIFIER Default ";" + ; + + /* [14] */ +PartialDictionary: + TOK_DICTIONARY TOK_IDENTIFIER '{' DictionaryMembers '}' ';' + + /* [15] */ +Default: + /* empty */ + | + '=' DefaultValue + ; + + + /* [16] */ +DefaultValue: + ConstValue + | + TOK_STRING_LITERAL + ; + + /* [17] */ +Exception: + /* empty */ + | + TOK_EXCEPTION TOK_IDENTIFIER Inheritance '{' ExceptionMembers '}' ';' + ; + + /* [18] */ +ExceptionMembers: + /* empty */ + | + ExtendedAttributeList ExceptionMember ExceptionMembers + ; + + /* [19] returns a string */ +Inheritance: + /* empty */ + { + $$ = NULL; + } + | + ':' TOK_IDENTIFIER + { + $$ = $2; + } + ; + +/* [20] */ +Enum: + TOK_ENUM TOK_IDENTIFIER '{' EnumValueList '}' ';' + ; + +/* [21] */ +EnumValueList: + TOK_STRING_LITERAL EnumValues + ; + +/* [22] */ +EnumValues: + /* empty */ + | + ',' TOK_STRING_LITERAL EnumValues + ; + + /* [23] - bug in w3c grammar? it doesnt list the equals as a terminal */ +CallbackRest: + TOK_IDENTIFIER '=' ReturnType '(' ArgumentList ')' ';' + + /* [24] */ +Typedef: + TOK_TYPEDEF ExtendedAttributeList Type TOK_IDENTIFIER ';' + ; + + /* [25] */ +ImplementsStatement: + TOK_IDENTIFIER TOK_IMPLEMENTS TOK_IDENTIFIER ';' + ; + + /* [26] */ +Const: + TOK_CONST ConstType TOK_IDENTIFIER '=' ConstValue ';' + ; + + /* [27] */ +ConstValue: + BooleanLiteral + | + FloatLiteral + | + TOK_INT_LITERAL + | + TOK_NULL_LITERAL + ; + + /* [28] */ +BooleanLiteral: + TOK_TRUE + | + TOK_FALSE + ; + + /* [29] */ +FloatLiteral: + TOK_FLOAT_LITERAL + | + '-' TOK_INFINITY + | + TOK_INFINITY + | + TOK_NAN + ; + + /* [30] */ +AttributeOrOperation: + TOK_STRINGIFIER StringifierAttributeOrOperation + | + Attribute + | + Operation + ; + + /* [31] */ +StringifierAttributeOrOperation: + Attribute + | + OperationRest + | + ';' + ; + + /* [32] */ +Attribute: + Inherit ReadOnly TOK_ATTRIBUTE Type TOK_IDENTIFIER ';' + ; + + /* [33] */ +Inherit: + /* empty */ + | + TOK_INHERIT + ; + + /* [34] */ +ReadOnly: + /* empty */ + | + TOK_READONLY + ; + + /* [35] */ +Operation: + Qualifiers OperationRest + ; + + /* [36] */ +Qualifiers: + TOK_STATIC + | + Specials + ; + + /* [37] */ +Specials: + /* empty */ + | + Special Specials + ; + + /* [38] */ +Special: + TOK_GETTER + | + TOK_SETTER + | + TOK_CREATOR + | + TOK_DELETER + | + TOK_LEGACYCALLER + ; + + /* [39] */ +OperationRest: + ReturnType OptionalIdentifier '(' ArgumentList ')' ';' + ; + + /* [40] */ +OptionalIdentifier: + /* empty */ + | + TOK_IDENTIFIER + ; + + + /* [41] */ +ArgumentList: + /* empty */ + | + Argument Arguments + ; + + /* [42] */ +Arguments: + /* empty */ + | + ',' Argument Arguments + ; + + + /* [43] */ +Argument: + ExtendedAttributeList OptionalOrRequiredArgument + ; + + /* [44] */ +OptionalOrRequiredArgument: + TOK_OPTIONAL Type ArgumentName Default + | + Type Ellipsis ArgumentName + ; + + /* [45] */ +ArgumentName: + ArgumentNameKeyword + | + TOK_IDENTIFIER + ; + + /* [46] */ +Ellipsis: + /* empty */ + | + TOK_ELLIPSIS + ; + + /* [47] */ +ExceptionMember: + Const + | + ExceptionField + ; + + /* [48] */ +ExceptionField: + Type TOK_IDENTIFIER ';' + ; + + /* [49] extended attribute list inside square brackets */ +ExtendedAttributeList: + /* empty */ + | + '[' ExtendedAttribute ExtendedAttributes ']' + ; + + /* [50] extended attributes are separated with a comma */ +ExtendedAttributes: + /* empty */ + | + ',' ExtendedAttribute ExtendedAttributes + ; + + /* [51] extended attributes are nested with normal, square and curly braces */ +ExtendedAttribute: + '(' ExtendedAttributeInner ')' ExtendedAttributeRest + | + '[' ExtendedAttributeInner ']' ExtendedAttributeRest + | + '{' ExtendedAttributeInner '}' ExtendedAttributeRest + | + Other ExtendedAttributeRest + ; + + /* [52] extended attributes can be space separated too */ +ExtendedAttributeRest: + /* empty */ + | + ExtendedAttribute + ; + + /* [53] extended attributes are nested with normal, square and curly braces */ +ExtendedAttributeInner: + /* empty */ + | + '(' ExtendedAttributeInner ')' ExtendedAttributeInner + | + '[' ExtendedAttributeInner ']' ExtendedAttributeInner + | + '{' ExtendedAttributeInner '}' ExtendedAttributeInner + | + OtherOrComma ExtendedAttributeInner + ; + + /* [54] */ +Other: + TOK_INT_LITERAL + | + TOK_FLOAT_LITERAL + | + TOK_IDENTIFIER + | + TOK_STRING_LITERAL + | + TOK_OTHER_LITERAL + | + '-' + | + '.' + | + TOK_ELLIPSIS + | + ':' + | + ';' + | + '<' + | + '=' + | + '>' + | + '?' + | + TOK_DATE + | + TOK_STRING + | + TOK_INFINITY + | + TOK_NAN + | + TOK_ANY + | + TOK_BOOLEAN + | + TOK_BYTE + | + TOK_DOUBLE + | + TOK_FALSE + | + TOK_FLOAT + | + TOK_LONG + | + TOK_NULL_LITERAL + | + TOK_OBJECT + | + TOK_OCTET + | + TOK_OR + | + TOK_OPTIONAL + | + TOK_SEQUENCE + | + TOK_SHORT + | + TOK_TRUE + | + TOK_UNSIGNED + | + TOK_VOID + | + ArgumentNameKeyword + ; + + /* [55] */ +ArgumentNameKeyword: + TOK_ATTRIBUTE + | + TOK_CALLBACK + | + TOK_CONST + | + TOK_CREATOR + | + TOK_DELETER + | + TOK_DICTIONARY + | + TOK_ENUM + | + TOK_EXCEPTION + | + TOK_GETTER + | + TOK_IMPLEMENTS + | + TOK_INHERIT + | + TOK_INTERFACE + | + TOK_LEGACYCALLER + | + TOK_PARTIAL + | + TOK_SETTER + | + TOK_STATIC + | + TOK_STRINGIFIER + | + TOK_TYPEDEF + | + TOK_UNRESTRICTED + ; + + /* [56] as it says an other element or a comma */ +OtherOrComma: + Other + | + ',' + ; + + /* [57] */ +Type: + SingleType + | + UnionType TypeSuffix + ; + + /* [58] */ +SingleType: + NonAnyType + | + TOK_ANY TypeSuffixStartingWithArray + ; + + /* [59] */ +UnionType: + '(' UnionMemberType TOK_OR UnionMemberType UnionMemberTypes ')' + ; + + /* [60] */ +UnionMemberType: + NonAnyType + | + UnionType TypeSuffix + | + TOK_ANY '[' ']' TypeSuffix + ; + + /* [61] */ +UnionMemberTypes: + /* empty */ + | + TOK_OR UnionMemberType UnionMemberTypes + ; + + /* [62] */ +NonAnyType: + PrimitiveType TypeSuffix + | + TOK_STRING TypeSuffix + | + TOK_IDENTIFIER TypeSuffix + | + TOK_SEQUENCE '<' Type '>' Null + | + TOK_OBJECT TypeSuffix + | + TOK_DATE TypeSuffix + ; + + /* [63] */ +ConstType: + PrimitiveType Null + | + TOK_IDENTIFIER Null + ; + + /* [64] */ +PrimitiveType: + UnsignedIntegerType + | + UnrestrictedFloatType + | + TOK_BOOLEAN + | + TOK_BYTE + | + TOK_OCTET + ; + + /* [65] */ +UnrestrictedFloatType: + TOK_UNRESTRICTED FloatType + | + FloatType + ; + + /* [66] */ +FloatType: + TOK_FLOAT + | + TOK_DOUBLE + ; + + /* [67] */ +UnsignedIntegerType: + TOK_UNSIGNED IntegerType + | + IntegerType + ; + + /* [68] */ +IntegerType: + TOK_SHORT + | + TOK_LONG OptionalLong + ; + + /* [69] */ +OptionalLong: + /* empty */ + | + TOK_LONG + ; + + /* [70] */ +TypeSuffix: + /* empty */ + | + '[' ']' TypeSuffix + | + '?' TypeSuffixStartingWithArray + ; + + /* [71] */ +TypeSuffixStartingWithArray: + /* empty */ + | + '[' ']' TypeSuffix + ; + + /* [72] */ +Null: + /* empty */ + | + '?' + ; + + /* [73] */ +ReturnType: + Type + | + TOK_VOID + ; + +%% -- cgit v1.2.3