/
githubmirror
/
amphtml
Обзор
Документация
Войти
/
githubmirror
/
amphtml
Код
Запросы
0
Пакеты
0
Релизы
0
Аналитика
Безопасность
main
validator/cpp/htmlparser/data/jsongrammar.txt
147 строк
6 KB
Allan Banaag
Sync for validator cpp engine and cpp htmlparser (#39797)
06 фев 2024, 01:17
Не верифицирован
06 фев 2024, 01:17
6e751a4
Код
Авторство
О чём код?
# JSON grammar. https://www.json.org/ # Begin. $ '{' DICT ROOT_DICT; $ '[' ARRAY_FIRST_ITEM ROOT_ARRAY; $ '"' STRING ROOT_STRING; $ '-' NUMBER_AFTER_HYPHEN ROOT_NUMBER; $ "1..9" NUMBER ROOT_NUMBER; $ '0' NUMBER_AFTER_ZERO ROOT_NUMBER_AFTER_ZERO; $ 't' TRUE_1 ROOT_BOOL_TRUE; $ 'f' FALSE_1 ROOT_BOOL_FALSE; $ 'n' NULL_1 ROOT_NULL_VAL; # Ignore whitespace chars. $ "\t\n\r " $; # true literal (case sensitive, lowercase). TRUE_1 'r' TRUE_2; TRUE_2 'u' TRUE_3; TRUE_3 'e' POP; # false literal (case sensitive, lowercase). FALSE_1 'a' FALSE_2; FALSE_2 'l' FALSE_3; FALSE_3 's' FALSE_4; FALSE_4 'e' POP; # null literal (case sensitive, lowercase). NULL_1 'u' NULL_2; NULL_2 'l' NULL_3; NULL_3 'l' POP; # String. # https://www.json.org/img/string.png STRING .* STRING; # Stop string mode at closing double quotes. # STRING_ESCAPE ignores any escaped double quotes. STRING '"' POP; # Escape char followed by \. Allowed chars are: # " - Quotation mark. # \ - Reverse Solidus. # / - Solidus. # b - Backspace. # f - Formfeed. # n - Linefeed. # r - Carriage return. # t = Horizontal tab. STRING '\' STRING_ESCAPE; STRING_ESCAPE "\"\/bfnrt" STRING; # Next four characters followed by \u STRING_ESCAPE 'u' UNICODE_HEX_CHAR_FIRST; UNICODE_HEX_CHAR_FIRST "0..9a..fA..F" UNICODE_HEX_CHAR_SECOND; UNICODE_HEX_CHAR_SECOND "0..9a..fA..F" UNICODE_HEX_CHAR_THIRD; UNICODE_HEX_CHAR_THIRD "0..9a..fA..F" UNICODE_HEX_CHAR_LAST; UNICODE_HEX_CHAR_LAST "0..9a..fA..F" STRING; # Number. # https://www.json.org/img/number.png # 1-9 NUMBER "0..9" NUMBER; NUMBER '.' NUMBER_AFTER_PERIOD FLOATING_POINT_T; NUMBER "\t\n\r " POP; NUMBER ",}]" SHIFT; NUMBER_AFTER_PERIOD "0..9" NUMBER_AFTER_PERIOD_DIGIT; NUMBER_AFTER_PERIOD_DIGIT "0..9" NUMBER_AFTER_PERIOD_DIGIT; NUMBER_AFTER_PERIOD_DIGIT "eE" NUMBER_AFTER_E_NOTATION; NUMBER_AFTER_PERIOD_DIGIT ",}]\t\n\r " SHIFT; NUMBER_AFTER_ZERO '.' NUMBER_AFTER_PERIOD FLOATING_POINT_T; # Even though 0e+3 is invalid syntax (zero must be followed by period), but # browsers accept it as valid and convert it to 0. # As per spec (https://www.json.org/img/number.png) this is invalid, but we # are considering it as OK. # Commenting the following line will treat 0e+3 number value as invalid json. NUMBER_AFTER_ZERO "eE" NUMBER_AFTER_E_NOTATION; NUMBER_AFTER_ZERO ",}]\t\n\r " SHIFT; NUMBER_AFTER_HYPHEN "0..9" NUMBER; NUMBER_AFTER_HYPHEN '0' NUMBER_AFTER_ZERO; NUMBER_AFTER_E_NOTATION "+-" NUMBER_AFTER_PLUS_MINUS_AFTER_E_NOTATION; NUMBER_AFTER_E_NOTATION "0..9" NUMBER_AFTER_E_DIGIT_NOTATION; NUMBER_AFTER_E_DIGIT_NOTATION "0..9" NUMBER_AFTER_E_DIGIT_NOTATION; NUMBER_AFTER_PLUS_MINUS_AFTER_E_NOTATION "0..9" NUMBER_AFTER_PLUS_MINUS_AFTER_E_NOTATION; NUMBER_AFTER_E_DIGIT_NOTATION ",}]\t\n\r " SHIFT; NUMBER_AFTER_PLUS_MINUS_AFTER_E_NOTATION " \t\n\r" POP; NUMBER_AFTER_PLUS_MINUS_AFTER_E_NOTATION ",}]" SHIFT; # Arrays. # https://www.json.org/img/array.png ARRAY_FIRST_ITEM ']' POP ARRAY_END; ARRAY_FIRST_ITEM '{' DICT|PUSH|ARRAY_SEPARATOR DICT_T; ARRAY_FIRST_ITEM '[' ARRAY_FIRST_ITEM|PUSH|ARRAY_SEPARATOR ARRAY_T; ARRAY_FIRST_ITEM '"' STRING|PUSH|ARRAY_SEPARATOR STRING_T; ARRAY_FIRST_ITEM '-' NUMBER_AFTER_HYPHEN|PUSH|ARRAY_SEPARATOR NUMBER_T; ARRAY_FIRST_ITEM '0' NUMBER_AFTER_ZERO|PUSH|ARRAY_SEPARATOR NUMBER_T; ARRAY_FIRST_ITEM "1..9" NUMBER|PUSH|ARRAY_SEPARATOR NUMBER_T; ARRAY_FIRST_ITEM 't' TRUE_1|PUSH|ARRAY_SEPARATOR TRUE_T; ARRAY_FIRST_ITEM 'f' FALSE_1|PUSH|ARRAY_SEPARATOR FALSE_T; ARRAY_FIRST_ITEM 'n' NULL_1|PUSH|ARRAY_SEPARATOR NULL_T; ARRAY_FIRST_ITEM ']' POP ARRAY_END; # Ignore whitespace chars between [ and first item. ARRAY_FIRST_ITEM "\t\n\r " ARRAY_FIRST_ITEM; ARRAY_SEPARATOR ',' ARRAY_NEXT_ITEM ARRAY_VAL_END; # Ignore whitespce chars between first item and comma. ARRAY_SEPARATOR "\t\n\r " ARRAY_SEPARATOR; ARRAY_SEPARATOR ']' POP ARRAY_END; ARRAY_NEXT_ITEM '{' DICT|PUSH|ARRAY_SEPARATOR DICT_T; ARRAY_NEXT_ITEM '[' ARRAY_FIRST_ITEM|PUSH|ARRAY_SEPARATOR ARRAY_T; ARRAY_NEXT_ITEM '"' STRING|PUSH|ARRAY_SEPARATOR STRING_T; ARRAY_NEXT_ITEM '-' NUMBER_AFTER_HYPHEN|PUSH|ARRAY_SEPARATOR NUMBER_T; ARRAY_NEXT_ITEM '0' NUMBER_AFTER_ZERO|PUSH|ARRAY_SEPARATOR NUMBER_T; ARRAY_NEXT_ITEM "1..9" NUMBER|PUSH|ARRAY_SEPARATOR NUMBER_T; ARRAY_NEXT_ITEM 't' TRUE_1|PUSH|ARRAY_SEPARATOR TRUE_T; ARRAY_NEXT_ITEM 'f' FALSE_1|PUSH|ARRAY_SEPARATOR FALSE_T; ARRAY_NEXT_ITEM 'n' NULL_1|PUSH|ARRAY_SEPARATOR NULL_T; # Ignore whitespace chars between comma and next item or ]. ARRAY_NEXT_ITEM "\t\n\r " ARRAY_NEXT_ITEM; # Dictionary. # https://www.json.org/img/object.png DICT '"' STRING|PUSH|DICT_KEY DICT_KEY_BEGIN; DICT_KEY_BEGIN_QUOTE '"' STRING|PUSH|DICT_KEY DICT_KEY_BEGIN; DICT_KEY_BEGIN_QUOTE "\t\n\r " DICT_KEY_BEGIN_QUOTE; # Ignore whitespace between { and first key. DICT "\t\n\r " DICT; DICT '}' POP DICT_END; DICT_KEY ':' DICT_VALUE DICT_KEY_END; # Ignore whitespace betwen key and colon. DICT_KEY "\t\n\r " DICT_KEY; DICT_VALUE '"' STRING|PUSH|DICT_END_OR_SEPARATOR STRING_T; DICT_VALUE 't' TRUE_1|PUSH|DICT_END_OR_SEPARATOR TRUE_T; DICT_VALUE 'f' FALSE_1|PUSH|DICT_END_OR_SEPARATOR FALSE_T; DICT_VALUE 'n' NULL_1|PUSH|DICT_END_OR_SEPARATOR NULL_T; # Ignore whitespace between colon and value. DICT_VALUE "\t\n\r " DICT_VALUE; DICT_VALUE '0' NUMBER_AFTER_ZERO|PUSH|DICT_END_OR_SEPARATOR NUMBER_T; DICT_VALUE '-' NUMBER_AFTER_HYPHEN|PUSH|DICT_END_OR_SEPARATOR NUMBER_T; DICT_VALUE "1..9" NUMBER|PUSH|DICT_END_OR_SEPARATOR NUMBER_T; DICT_VALUE '[' ARRAY_FIRST_ITEM|PUSH|DICT_END_OR_SEPARATOR ARRAY_T; DICT_VALUE '{' DICT|PUSH|DICT_END_OR_SEPARATOR DICT_T; # Ignore whitespace chars between comma and next value. DICT_END_OR_SEPARATOR "\t\r\n " DICT_END_OR_SEPARATOR; DICT_END_OR_SEPARATOR ',' DICT_KEY_BEGIN_QUOTE DICT_VAL_END; DICT_END_OR_SEPARATOR '}' POP DICT_END;