我可以在yacc中使用双引号字符串吗?

时间:2011-08-05 17:15:07

标签: syntax yacc

到目前为止,我只看到'<'之类的内容,但从未在yacc文件中看到'abc'"abc"

a:
  b '<' c;

后两者是否有效?

1 个答案:

答案 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"不匹配