g*********s 发帖数: 1782 | 1 有个lex/yacc写的文本分析器,现在需要更改一个词法单位string的实现,基本想法是
把返回值从strdup(yytext)改成yytext,用shallow copy来减少malloc/free操作频率
,提高运行效率。
但是更改这个词法单位后引发了链锁反应,所有涉及这个词法单位的yacc状态都要相应
地修改。手工跟踪了一下,非常多。一个一个改,容易错也容易漏。
有没有什么yacc/bison的调试和分析工具,能静态分析,告知有哪些状态需要修改,这
样可以按图索骥?
另外定义了YYDEBUG,也定义了int yydebug=1,调试时报告的状态转换和都是编码,60
,51等,报告的token只有名称,比如string,没有yytext的具体内容。能直接打出状
态名称,还有当前处理的token内容吗?
更进一步,有比lex/yacc更快的C++ based parser工具吗?ANTLR的C++实现似乎还在进
行中。
谢谢指教! |
t****t 发帖数: 6806 | 2 not sure about automatic tracing. and i think the yacc itself doesn't have
the solution. you can use valgrind on the generated program, though.
about yydebug, refer to "info bison", section "Tracing". there's an example
there.
60
【在 g*********s 的大作中提到】 : 有个lex/yacc写的文本分析器,现在需要更改一个词法单位string的实现,基本想法是 : 把返回值从strdup(yytext)改成yytext,用shallow copy来减少malloc/free操作频率 : ,提高运行效率。 : 但是更改这个词法单位后引发了链锁反应,所有涉及这个词法单位的yacc状态都要相应 : 地修改。手工跟踪了一下,非常多。一个一个改,容易错也容易漏。 : 有没有什么yacc/bison的调试和分析工具,能静态分析,告知有哪些状态需要修改,这 : 样可以按图索骥? : 另外定义了YYDEBUG,也定义了int yydebug=1,调试时报告的状态转换和都是编码,60 : ,51等,报告的token只有名称,比如string,没有yytext的具体内容。能直接打出状 : 态名称,还有当前处理的token内容吗?
|
c*****t 发帖数: 1879 | 3 yytext can change when doing input. Thus, you would have to make a copy
of the current token string with strdup.
yacc++ is a well known commercial parser generator for C++. Just google
it.
60
【在 g*********s 的大作中提到】 : 有个lex/yacc写的文本分析器,现在需要更改一个词法单位string的实现,基本想法是 : 把返回值从strdup(yytext)改成yytext,用shallow copy来减少malloc/free操作频率 : ,提高运行效率。 : 但是更改这个词法单位后引发了链锁反应,所有涉及这个词法单位的yacc状态都要相应 : 地修改。手工跟踪了一下,非常多。一个一个改,容易错也容易漏。 : 有没有什么yacc/bison的调试和分析工具,能静态分析,告知有哪些状态需要修改,这 : 样可以按图索骥? : 另外定义了YYDEBUG,也定义了int yydebug=1,调试时报告的状态转换和都是编码,60 : ,51等,报告的token只有名称,比如string,没有yytext的具体内容。能直接打出状 : 态名称,还有当前处理的token内容吗?
|
w***g 发帖数: 5958 | 4 I think boost has a parser library.
60
【在 g*********s 的大作中提到】 : 有个lex/yacc写的文本分析器,现在需要更改一个词法单位string的实现,基本想法是 : 把返回值从strdup(yytext)改成yytext,用shallow copy来减少malloc/free操作频率 : ,提高运行效率。 : 但是更改这个词法单位后引发了链锁反应,所有涉及这个词法单位的yacc状态都要相应 : 地修改。手工跟踪了一下,非常多。一个一个改,容易错也容易漏。 : 有没有什么yacc/bison的调试和分析工具,能静态分析,告知有哪些状态需要修改,这 : 样可以按图索骥? : 另外定义了YYDEBUG,也定义了int yydebug=1,调试时报告的状态转换和都是编码,60 : ,51等,报告的token只有名称,比如string,没有yytext的具体内容。能直接打出状 : 态名称,还有当前处理的token内容吗?
|