thrift 关键字冲突

错误
File “/private/tmp/pycodegen/thriftpy/parser/lexer.py”, line 258, in t_IDENTIFIER
‘ at line %d’ % (t.value, t.lineno))
thriftpy.parser.exc.ThriftLexerError: Cannot use reserved language keyword: ‘from’ at line 82



原因
from 是thrift.idl 的关键字



解决办法
6: string from_name(php.field=”from”) //eg



在使用thrift生成java、php代码时出现错误:Cannot use reserved language keyword: “end”,查看出错位置,是因为thrift认为方法定义的变量名end为关键字,而end既不是java的关键字,也不是php的关键字,为什么会报错呢。



于是大致看了一下thrift的源码:



thrift的编译模块是thrift/compiler,其下的generate中的代码负责通过.thrift文件来生成各种语言的源文件。



而这两个生成器继承自t_oop_generator,而t_oop_generator继承自t_generator。



t_generator中定义了一个方法lang_keywords,此方法返回不能作为标识符的关键字列表。默认实现为:



可以看到end就在其中,而t_java_generator.cc和t_php_generator.cc中没有对lang_keywords方法进行覆盖,所以虽然end既不是java的关键字,也不是php的关键字,但是仍然会报错。



所以遇到Cannot use reserved language keyword错误时,将错误信息中的标识符修改即可。



end其实是python3的关键字。



Category php