到目前为止,我只看到'<'
之类的内容,但从未在yacc文件中看到'abc'
或"abc"
。
a:
b '<' c;
后两者是否有效?
答案 0 :(得分:1)
'abc'=是有效字符,因为无论何时指定char都像这个编译器/预处理器一样 只需删除最后一个字符,有时你会得到“字符常量必须是一个或两个字符长”ANSI C中的编译时错误。如果你的编译器没有给出它 它应该假设从'abc'删除了最后一个'c'。
所以
char ch='abc' ; // is actually equi. to ch = 'ab'
但是绑定时它只会使用ch='a'
,这就是为什么'abc'在语法上是正确的但在语法上错误的特征。(我写了C coz。我们使用c89工具,即POSIX C来编译yacc和lex输入)< / p>
yylex()再次将字符作为基本功能单元而不是字符串(双引号内的任何内容)。所以“abc”不是有效字符,甚至不是与yylex()相匹配的字符
输入。
(yylex()接受令牌字符串
考试。 "10+20"
有语法[[:DIGIT:]]+ [-+*/%] [[:DIGIT:]]+
并有令牌1,0,+,2,0
令牌lex可以默认识别w / o指定语法
10号码
+作为char和
20再次作为数字
所以它将与之前指定的语法匹配)
您还可以在规则部分指定字符串以进行匹配,例如
^["I am"]
表示匹配任何以“我是”开头的输入行
"I am"
仅匹配仅包含"I am"
字符串的输入,它与"I am Swapnil @ vikas.ghode@gmail.com"
不匹配