| OLD | NEW |
| 1 package parser | 1 package parser |
| 2 | 2 |
| 3 import ( | 3 import ( |
| 4 "fmt" | 4 "fmt" |
| 5 "math" | 5 "math" |
| 6 "mojom/mojom_parser/lexer" | 6 "mojom/mojom_parser/lexer" |
| 7 "mojom/mojom_parser/mojom" | 7 "mojom/mojom_parser/mojom" |
| 8 "strconv" | 8 "strconv" |
| 9 ) | 9 ) |
| 10 | 10 |
| (...skipping 28 matching lines...) Expand all Loading... |
| 39 // MOJOM_FILE -> IMPORT_STMNT {IMPORT_STMNT} {ATTR_MOJOM_DECL} | 39 // MOJOM_FILE -> IMPORT_STMNT {IMPORT_STMNT} {ATTR_MOJOM_DECL} |
| 40 // MOJOM_FILE -> MOJOM_DECL {ATTR_MOJOM_DECL} | 40 // MOJOM_FILE -> MOJOM_DECL {ATTR_MOJOM_DECL} |
| 41 | 41 |
| 42 // MODULE_DECL -> module IDENTIFIER semi | 42 // MODULE_DECL -> module IDENTIFIER semi |
| 43 // IMPORT_STMNT -> import string_literal | 43 // IMPORT_STMNT -> import string_literal |
| 44 | 44 |
| 45 // ATTR_MOJOM_DECL -> [ATTRIBUTES] MOJOM_DECL | 45 // ATTR_MOJOM_DECL -> [ATTRIBUTES] MOJOM_DECL |
| 46 // MOJOM_DECL -> INTRFC_DECL | STRUCT_DECL | UNION_DECL | ENUM_DECL |
CONSTANT_DECL | 46 // MOJOM_DECL -> INTRFC_DECL | STRUCT_DECL | UNION_DECL | ENUM_DECL |
CONSTANT_DECL |
| 47 | 47 |
| 48 // ATTRIBUTES -> lbracket ATTR_ASSIGNMENT { comma, ATTR_ASSIGNMENT} | 48 // ATTRIBUTES -> lbracket ATTR_ASSIGNMENT { comma, ATTR_ASSIGNMENT} |
| 49 // ATTR_ASSIGNMENT -> name equals name | name equals literal | 49 // ATTR_ASSIGNMENT -> name equals name | name equals LITERAL_VALUE |
| 50 | 50 |
| 51 // INTRFC_DECL -> interface name lbrace INTRFC_BODY rbrace semi | 51 // INTRFC_DECL -> interface name lbrace INTRFC_BODY rbrace semi |
| 52 // INTRFC_BODY -> {ATTR_INTRFC_ELEMENT} | 52 // INTRFC_BODY -> {ATTR_INTRFC_ELEMENT} |
| 53 // ATTR_INTRFC_ELEMENT -> [ATTRIBUTES] INTRFC_ELEMENT | 53 // ATTR_INTRFC_ELEMENT -> [ATTRIBUTES] INTRFC_ELEMENT |
| 54 // INTRFC_ELEMENT -> METHOD_DECL | ENUM_DECL | CONSTANT_DECL | 54 // INTRFC_ELEMENT -> METHOD_DECL | ENUM_DECL | CONSTANT_DECL |
| 55 | 55 |
| 56 // METHOD_DECL -> name [ordinal] lparen [PARAM_LIST] rparen [response l
paren [PARAM_LIST] rparen] semi | 56 // METHOD_DECL -> name [ordinal] lparen [PARAM_LIST] rparen [response l
paren [PARAM_LIST] rparen] semi |
| 57 // PARAM_LIST -> PARAM_DECL {, PARAM_DECL} | 57 // PARAM_LIST -> PARAM_DECL {comma, PARAM_DECL} |
| 58 // PARAM_DECL -> [ATTRIBUTES] TYPE NAME [ordinal] | 58 // PARAM_DECL -> [ATTRIBUTES] TYPE NAME [ordinal] |
| 59 | 59 |
| 60 // STRUCT_DECL -> struct name lbrace STRUCT_BODY rbrace semi | 60 // STRUCT_DECL -> struct name lbrace STRUCT_BODY rbrace semi |
| 61 // STRUCT_BODY -> {ATTR_STRUCT_ELEMENT} | 61 // STRUCT_BODY -> {ATTR_STRUCT_ELEMENT} |
| 62 // ATTR_STRUCT_ELEMENT -> [ATTRIBUTES] STRUCT_ELEMENT | 62 // ATTR_STRUCT_ELEMENT -> [ATTRIBUTES] STRUCT_ELEMENT |
| 63 // STRUCT_ELEMENT -> STRUCT_FIELD | ENUM_DECL | CONSTANT_DECL | 63 // STRUCT_ELEMENT -> STRUCT_FIELD | ENUM_DECL | CONSTANT_DECL |
| 64 // STRUCT_FIELD -> TYPE name [ordinal] [equals DEFAULT_VALUE] semi | 64 // STRUCT_FIELD -> TYPE name [ordinal] [equals DEFAULT_VALUE] semi |
| 65 // DEFAULT_VALUE -> COMPATIBLE_VALUE_REF | default | 65 // DEFAULT_VALUE -> COMPATIBLE_VALUE_REF | default |
| 66 // COMPATIBLE_VALUE_REF -> VALUE_REF {{that resolves to a value whose type is as
signment compatible to the type of the assignee}} | 66 // COMPATIBLE_VALUE_REF -> VALUE_REF {{that resolves to a concrete value whose t
ype is assignment compatible with the type of the assignee}} |
| 67 | 67 |
| 68 // UNION_DECL -> union name lbrace UNION_BODY rbrace semi | 68 // UNION_DECL -> union name lbrace UNION_BODY rbrace semi |
| 69 // UNION_BODY -> {UNION_FIELD_DECL} | 69 // UNION_BODY -> {UNION_FIELD_DECL} |
| 70 // UNION_FIELD_DECL -> [ATTRIBUTES] TYPE name [ordinal] semi | 70 // UNION_FIELD_DECL -> [ATTRIBUTES] TYPE name [ordinal] semi |
| 71 | 71 |
| 72 // ENUM_DECL -> enum name lbrace ENUM_BODY rbrace semi | 72 // ENUM_DECL -> enum name lbrace ENUM_BODY rbrace semi |
| 73 // ENUM_BODY -> [ ENUN_VALUE {, ENUM_VALUE} [,] ] | 73 // ENUM_BODY -> [ ENUN_VALUE {, ENUM_VALUE} [,] ] |
| 74 // ENUM_VALUE -> [ATTRIBUTES] name [equals ENUM_VAL_INITIALIZER] | 74 // ENUM_VALUE -> [ATTRIBUTES] name [equals ENUM_VAL_INITIALIZER] |
| 75 // ENUM_VAL_INITIALIZER -> INT32_VAL | APPROPRIATE_ENUM_VALUE_REF | 75 // ENUM_VAL_INITIALIZER -> INT32_VAL | APPROPRIATE_ENUM_VALUE_REF |
| 76 // INT32_VAL -> VALUE_REF {{that resolves to a value of integer type
that may be assigned to an int32.}} | 76 // INT32_VAL -> VALUE_REF {{that resolves to a concrete value of inte
ger type that may be assigned to an int32.}} |
| 77 // APPROPRIATE_ENUM_VALUE_REF | 77 // APPROPRIATE_ENUM_VALUE_REF |
| 78 // -> USER_VALUE_REF {{that resolves to an enum value of th
e same enum type as the initializee | 78 // -> USER_VALUE_REF {{that resolves to an enum value of th
e same enum type as the initializee |
| 79 // and which occurs earlier in declarat
ion order than the initializee.}} | 79 // and which occurs earlier in declarat
ion order than the initializee.}} |
| 80 | 80 |
| 81 // CONSTANT_DECL -> const CONST_OK_TYPE name equals COMPATIBLE_VALUE_REF
semi | 81 // CONSTANT_DECL -> const CONST_OK_TYPE name equals COMPATIBLE_VALUE_REF
semi |
| 82 // CONST_OK_TYPE -> SIMPLE_TYPE | string | ENUM_TYPE {{See https://github
.com/domokit/mojo/issues/607}} | 82 // CONST_OK_TYPE -> SIMPLE_TYPE | string | ENUM_TYPE {{See https://github
.com/domokit/mojo/issues/607}} |
| 83 | 83 |
| 84 // VALUE_REF -> USER_VALUE_REF | LITERAL_VALUE | BUILT_IN_FLOAT_CONST | 84 // VALUE_REF -> USER_VALUE_REF | LITERAL_VALUE | BUILT_IN_FLOAT_CONST |
| 85 // USER_VALUE_REF -> IDENTIFIER {{that resolves to a user-declared constan
t or enum value}} | 85 // USER_VALUE_REF -> IDENTIFIER {{that resolves to a user-defined constant
or enum value}} |
| 86 // BUILT_IN_FLOAT_CONST -> IDENTIFIER {{that does not resolve to a user-declared
constant or enum value | 86 // BUILT_IN_FLOAT_CONST -> IDENTIFIER {{that does not resolve to a user-defined
constant or enum value |
| 87 // and that is equal to one of the following strings: | 87 // and that is equal to one of the following strings: |
| 88 // "float.INFINITY", "float.NEGATIVE_INFINITY", "float.N
AN", | 88 // "float.INFINITY", "float.NEGATIVE_INFINITY", "float.N
AN", |
| 89 // "double.INFINITY", "double.NEGATIVE_INFINITY","double
.NAN"} | 89 // "double.INFINITY", "double.NEGATIVE_INFINITY","double
.NAN"} |
| 90 // LITERAL_VALUE -> BOOL_LITERAL | string_literal | NUMBER_LITERAL | 90 // LITERAL_VALUE -> BOOL_LITERAL | string_literal | NUMBER_LITERAL |
| 91 // BOOL_LITERAL -> true | false | 91 // BOOL_LITERAL -> true | false |
| 92 // NUMBER_LITERAL -> [plus | minus] POS_NUM_LITERAL | 92 // NUMBER_LITERAL -> [plus | minus] POS_NUM_LITERAL |
| 93 // INTEGER_LITERAL -> [plus | minus] POS_INT_LITERAL | 93 // INTEGER_LITERAL -> [plus | minus] POS_INT_LITERAL |
| 94 // POS_NUM_LITERAL -> POS_INT_LITERAL | POS_FLOAT_LITERAL | 94 // POS_NUM_LITERAL -> POS_INT_LITERAL | POS_FLOAT_LITERAL |
| 95 // POS_INT_LITERAL -> int_const_dec | int_const_hex | 95 // POS_INT_LITERAL -> int_const_dec | int_const_hex |
| 96 // POS_FLOAT_LITERAL -> float_const | 96 // POS_FLOAT_LITERAL -> float_const |
| (...skipping 1624 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1721 func (p *Parser) unexpectedTokenError(token lexer.Token, expected string) { | 1721 func (p *Parser) unexpectedTokenError(token lexer.Token, expected string) { |
| 1722 var message string | 1722 var message string |
| 1723 switch token.Kind { | 1723 switch token.Kind { |
| 1724 case lexer.ErrorUnterminatedStringLiteral, lexer.ErrorUnterminatedCommen
t: | 1724 case lexer.ErrorUnterminatedStringLiteral, lexer.ErrorUnterminatedCommen
t: |
| 1725 message = fmt.Sprintf("%s", token) | 1725 message = fmt.Sprintf("%s", token) |
| 1726 default: | 1726 default: |
| 1727 message = fmt.Sprintf("Unexpected %s. Expecting %s.", token, exp
ected) | 1727 message = fmt.Sprintf("Unexpected %s. Expecting %s.", token, exp
ected) |
| 1728 } | 1728 } |
| 1729 p.parseErrorT(ParserErrorCodeUnexpectedToken, message, token) | 1729 p.parseErrorT(ParserErrorCodeUnexpectedToken, message, token) |
| 1730 } | 1730 } |
| OLD | NEW |