'abc' = является допустимым символом, поскольку всякий раз, когда вы указываете символ, такой как этот компилятор / препроцессор, просто удаляете последний символ, иногда вы получите «символьные константы должны быть длиной в один или два символа» во время компиляции в ANSI C. Если это такне предоставленный вашим компилятором, тогда он должен был удалить последний 'c' из 'abc'.
, поэтому char ch='abc' ; // is actually equi. to ch = 'ab'
, но при связывании он будет использовать только ch='a'
, поэтому'abc' является синтаксически правильным, но символически неправильным символом. (Я написал C coz. Мы используем инструмент c89, то есть POSIX C для компиляции входных данных yacc и lex)
Опять же yylex () работает с символами как с базовой функциональной единицей, а не сстрока (что-нибудь внутри двойных кавычек).Таким образом, «abc» не является допустимым символом, даже символом, совпадающим с вводом yylex ().(yylex () принимает строку проверки токена. "10+20"
с грамматикой [[:DIGIT:]]+ [-+*/%] [[:DIGIT:]]+
и с токенами 1,0,+,2,0
Токены lex могут по умолчанию идентифицировать без указания грамматики 10 как число + как символ и20 снова как число, так что оно будет соответствовать грамматике, указанной ранее)
вы также можете указать строку в разделе правил для сопоставления, например, ^["I am"]
означает совпадение с любой строкой ввода, начинающейся с "Я есть" "I am"
совпадать только с вводом, имеющим только строку "I am"
, не будет совпадать с "I am Swapnil @ vikas.ghode@gmail.com"